
2.2 项目工作量估计
一般来说,项目的基本参数包括工作量、进度、缺陷和规模等。其中工作量是项目中的一个最基本的参数,它决定了项目的成本,工作量估计是一项重要的项目管理活动,直接影响到其后的项目成本估算和项目进度的安排。
Thayer对60个项目的计划工作做了总结,发现有67%的项目参照相似规模的同类项目来进行估算,40%的项目利用公式进行估算,17%的项目根据专家意见进行估算(一些项目采取了几种估算方法)。对于工作量的估算技术,主要有自上而下和自下而上两种估算方式。本节在此基础上,建立一种基于分段函数与分区函数的项目工作量估计方法,并对估计方法的有效性进行分析。
2.2.1 基于分段与分区函数的工作量估计方法
回归分析法是项目管理实践中被应用得最为广泛的估算方法。本书将对基于规模的线性回归估算方法的不足提出改进建议,以提高估算的精确度。主要的改进思路包括以下三点。
①回归分析法的精确度极大地依赖于历史数据的准确度和合理性。尤其是对新技术很敏感的一些行业,同一个系统项目用不同的技术开发所耗费的工作量差距很大。因此在选择历史数据的时候要有所取舍,例如,可以考虑时间因子T,用T表示过去的项目与当前项目的紧密程度,把时间分为若干段,每段上的T值不同,距当前时间越久的历史项目重要性越低,因此它的T值越低。
②回归分析法对于异常数据的敏感性较强,寻求一种较好的办法以解决因数据离散性大而影响估算精度的问题是研究工作的重点和难点。因此,本书在项目工作量估算中引入MER和MRE两个变量,来降低数据的离散性。
③项目工作量与规模之间的关系不完全是线性的。在项目开发中,项目规模越大,则需要协调的人就越多,也就需要更多的沟通,导致工作量成指数级增长。从COCOMO模型的21个调整因子考虑,规模不经济产生的原因是其中的5个规模因子,即开发过程成熟度、构架和风险化解、有先例可循的程度、团队凝聚力和开发灵活性,这可以从不同规模的项目对规模因子的不同加权中反映出来。基于此,本书提出采用分段函数对不同规模下的工作量进行估计,以解决此问题。
根据Nanus和Morin的研究结论:当规模不断递增达到一定程度,工作量和规模之间不是简单的线性关系,而是指数关系。目前已有的回归分析方法只是简单地认定规模和工作量是线性关系。针对传统的回归分析法的不足采取改进措施,本书提出一种基于规模的分段函数的估算方法,可以用方程组表示为。
其中,x表示项目规模,y表示项目工作量,a、b、c、d、g表示常数,s表示大小规模的界限值。
当规模小于s时,项目的规模经济显著,则可用一元线性回归方程计算工作量;当规模大于等于s时,项目规模不经济显著,则使用指数函数计算工作量。而s的界定需要统计大量的历史数据,并用线性方程和指数函数分别进行拟合。本书以s等于125万代码行为例,来分析说明分段函数的含义。如图2-13~图2-15所示,不难发现,当规模小于125万行时,线性拟合要比指数函数拟合性好,而随着规模的不断增大,工作量的增速远远大于规模的递增,这时指数函数拟合效果比线性回归的好,因此运用分段函数来估计工作量可以提高估算的精确度。

图2-13 基于规模的线性回归拟合图

图2-14 基于规模的指数函数拟合图

图2-15 基于规模的分段函数拟合图
公式(2-14)中,MRE(Magnitude of Relative Error)和MER(Magnitude of Error Relative)中的ActualEffort表示实际工作量,Estimated Effort表示估计的工作量。
大多数历史项目数据成集群分散在拟合曲线的周边,有些是被高估的,而有些是被低估的。如表2-3所示,当项目工作量被高估的时候,MRE∈(0,+∞),而MER∈(0,1);相反,当被低估时,MRE∈(0,1),而MER∈(0,+∞)。为了提高工作量估算的精确度,将分区对历史数据进行曲线拟合。主要分为几个步骤:①计算所有历史数据的MRE和MER值;②针对高估的数据用MER与MER*(可接受偏差范围的MER值)比较,对MER>MER*的历史数据划分成一个区域进行曲线拟合;针对低估的数据用MRE与MRE*(可接受偏差范围的MRE值)比较,对MRE>MRE*的历史数据划分成一个区域进行曲线拟合;对剩余的数据再进行曲线拟合;③采用欧氏距离计算三条曲线的权重,最终得出加权平均值即为最终的估算值。
表2-3 MRE和MER对比情况

如图2-16所示,首先,基于历史数据拟合曲线F1(x)、F2(x)、F3(x),分别是高估程度太大的历史数据集群、偏差可接受范围内的历史数据集群、低估程度太大的历史数据集群所拟合的三条曲线;其次,分别用三条拟合曲线算出特定规模下工作量的三个值;最后,利用加权平均法估计出项目工作量。

图2-16 分区拟合曲线图
本书主要用欧氏距离来计算三条曲线的各自权重。不管是线性回归曲线还是指数函数曲线,计算权重的方法是相同的,公式表示如下。
式(2-15)中,Wi表示每个曲线在估算中所占的权重,disti(x)-1表示用第i条曲线方程估计出来的[x,Ei(x)]到另外两条曲线的最短距离和的倒数,式(2-16)中,Ei(x)是第i条曲线方程估计出来的工作量值,并且i满足1≤i≤3;Ew(x)为加权平均后的工作量,也是最终的估计结果。接下来简单介绍如何计算权重。
如图2-16所示,直线L与F1(x)、F2(x)、F3(x)分别相交于A、B、C三点,A点到F2(x)、F3(x)的距离的和的倒数即为disti(x)-1,图中箭头表示A点到F2(x)、F3(x)的距离;假设A到F2(x)、F3(x)两条直线的距离为dist(A1)和dist(A2),以此类推可得:
最终得到估计工作量为:
Ew(x)=W1×E1(x)+W2×E2(x)+W3×E3(x) (2-19)
2.2.2 工作量估计方法有效性分析
工作量估计对成本控制和进度估计起着非常重要的作用,因此为促进工作量估计的准确性,有必要对组织工作量估计方法的有效性进行研究。研究的最好方法是将所估计的工作量和实际工作量画一个二维坐标,如果估计方法效果很好的话,大多数点应靠近45°线,而实践证明很多点都是在45°线之上而非之下,即人们通常会低估。但是这个比较只是给出估计的正确性的一般观点,并未指出这个估计为什么“最优”,如比较工程师是否被滥用或未充分利用。表2-4是某组织估计工作量与实际工作量的对比情况,根据表中的数据,可以利用统计分析工具对其分析,进行线性回归。
表2-4 项目估计工作量与实际工作量对比情况

根据表中的数据,运用数理统计中一元线性回归的求解方法,使用Excel可求解,如图2-17所示。

图2-17 项目实际工作量与估计工作量
设:实际工作量为y,估计工作量为x。从图2-17中可见,y=1.2658x,相关系数的平方和为0.9821。这就说明,该组织平均的实际工作量比平均的估计工作量高27.9%左右。总体来说偏差比较低,项目估计的有效性是很好的。同样,从图2-17中可发现,项目所有的点或绝大多数点都在45°线之上,这说明,项目在进行工作量估计的时候,绝大多数是低估的,因此应该对估计的这一特点有充分的认识。
另外,也可以使用每单元工作量标准的一个换算率,把估计的工作量转换成实际成本来实现项目成本的估计。例如:经统计,一个企业一个普通工程师平均一个人年的成本为15万元,如果一个项目的总工作量为12个人年,则这个项目的总成本为180万元(15×12=180)。
项目的工作量受到多种因素的影响,有68种,其中29种有较大影响。并且有研究发现,项目工作量和项目规模之间的关系并不是线性的。事实上,项目工作量常常随着项目规模的增大呈指数增长。因此在进行工作量估计的时候,往往很难准确估计,尤其刚开始更不可能准确估计,特别是对于一些复杂的项目更是这样,不能对估计方法抱有太大的期望,在估计的时候往往要用多种工具和技术来进行,即所谓的“多头凑”的方法,用多种方法来互相验证,互相校正,这样效果就会更好一些。并且刚开始的这样一个估计,并不是一劳永逸的,在项目进行过程中,项目在所设置的里程碑处要不断地对工作量重新进行估计,以不断地修正估计的结果,确保项目的成功。