用科学的方法估算项目实施所需时间引言前两天一个朋友给我打电话,问我如何估计项目开发时间。对此我很诧异, 问他以前他们是怎么估计的,他说以前基本都是大家开个会,大约都说说自己意见,最后负责人一拍脑袋,给出一个时间。 不过这次遇到一个非常认真的客户,要求不但要估计出项目开发时间,还要明确说明具体的依据和估算方法,这下我这朋友有点犯难,才询问我。 后来我翻阅了一些数理统计和项目估算方面的资料,告诉了他利用一元线性回归分析估计软件项目开发时间的方法。想到这种估算需要在一些开发团队很常见,所以在这里整理成文。问题的定义及数学模型这里我们仅考虑比较简单的一元回归问题,即通过单一的Proxy 预测项目开发时间。这里先说一下什么叫Proxy。Proxy 叫做代理变量, 简单来说就是估计项目开发时间的数理依据。 说白了,就是我们预测开发时间,总要有个根据,例如需求中用例个数、概要设计中的实体个数、 数据库中的表的数量等等。设 Proxy 为 x,项目开发时间为y,那么可以得到y=f(x),学过初等数学的都可以看懂,就是说开发时间是Proxy 的一个函数,如果我们既知道了新项目的 x,又知道函数f,那么 y 就出来了。可惜天下哪有这么好的事,我们现在既不知道f,又不知道 x,别说 x 的值了,甚至我们都不知道该用哪个Proxy 做 x。不过也不必悲观,经过上面分析,我们至少明确了我们奋斗的方向:1、找出候选的Proxy。2、选择最合适的Proxy 作为 x。3、得到 x 的值。4、确定函数f。5、得出 y。下面我们一步一步解决各个问题。找出候选的 Proxy 虽然一个项目的特征量很多,不过可不是随便一个特征量都可以当做Proxy 的。要成为 Proxy,至少要满足如下四个条件。1)Proxy 的值应该和工作量紧密相关。这个不用多解释了吧,就是说Proxy 的值和 y 的值要有相关性。关于“相关性”的概念这里先定性说一下,定量分析后续会讲到。2)Proxy 应该是能明确得出值的,没有二义性。这是说 Proxy 应该对应一个明确数值,是一就是一, 是二就是二, 不能取“不错”、“挺多”这种值。3)Proxy 应该在项目开始阶段可以得出或能较精确估计出。这个开始阶段最晚不能晚于概要设计,因为估算都是一开始进行,所以Proxy 一定要在起始阶段就能得出,否则项目结束了谁还搞估算,实际值都出来了。4)Proxy 对于不同的实施方案是敏感的。就是说当开发方法、开发过程等因素变化时,Proxy 应该具有一定的敏感性。...