对于庞大的、多变的软件项目来说有着太多的不确定性。之所以要先制定项目计划,目的就是为了让项目更加可控。如果项目的计划缺乏数据进行支持,或者根本不进行估算,只凭项目管理人员的经验进行管理,最终结果不可控制。
软件项目的属性有很多,建议至少以下属性要在项目计划时对其进行估算:
类比法。通过相同类别的项目比较,确定不同的项目工作所需要的时间。
专家法。依靠专家过去的知识、经验进行估算。
三点估算法。在缺少信息或考虑因素不确定的时候,可以采用三点估算法。
参数模型法。是通过依据历史数据,用计算机回归分析来确定一种数学模型的方法。
在具体估算时还需考虑相应因素的影响,包括员工的技能水平、工作效率,一些突发事件的影响,有效的工作时间,有无返工,这些因素都会影响项目工作所消耗的时间的长短。
在成本估算当中,通常采用的方法和时间估算有些类似,如可以用类比估算法、参数估算法和计算机估算技术,也可以使用一个或者多个估算模型综合起来的一种综合模型。
在进行成本或者是工期估算时,通常采用一种比较精确的方法——自下而上法。实际上就是通过在项目计划阶段对工作进行分解,把项目分成一个一个小的工作包,直到分解到便于管理和控制、便于估算为止。
所有的估算方法可以按照不同的方法进行归类,一般称之为正规估算方法,像参数估算法和计算机估算技术,这些估算方法的特点是能够被重复地验证,输入同样的数据就会得到同样的输出。
另外一个方法为非正规估算法,像专家法或者类比估算法。由于这些方法是建立在长期利润的收集、长期分析和经验总结基础上得出的数学模型,因此,它有着旺盛的生命力,而且它可以不断地进行完善和不断发展。
项目的不同阶段对项目估算精度的要求是逐步提高的。
项目成本的估算往往是根据项目建议书或项目可行性研究来进行项目的论证。
项目估算应该满足设计任务书和编制招标文件的需要,或为项目实行贷款及其它需要做更加详细的估算。
在项目的施工、实施阶段,原来的估算要转化为预算,为满足合同变更和成本核算的需要,要求估算精度进一步提高,并作为进度付款和费用控制的依据。
满足合同结算需要,作为历史资料供将来项目估价和确定生产定额参考。
采用不同的估算方法,项目的精度就有所不同。但总而言之,项目估算精度取决于手头的资料、信息的可得性以及经验积累的多寡。
如果缺乏可利用的信息资料,没有相应的数据库和外部信息的支持,估算的结果和实际成本就会有比较大的偏差。如果希望提高估算精度,可以建立组织级度量库,不间断地进行项目记录及多渠道获取信息。包括商业数据库、报纸、期刊或者其他媒体所提供的一些有价值的信息,都可以为项目的估算提供基础。按照不同的估算方法,项目估算通常划分为以下几类:
就是粗略的估算或简单的估算,误差在-25%到75%之间。
如果进一步提高估算精度,可以采用参数模型或类比估算法,这样可以把误差控制在15%到25%之间。
自下而上法就是从每个工作包开始,从最下一层开始估算,把整个项目所有的工作包都估算出来之后再汇总加和,得出整个项目的整体估算,这种估算方法通常误差在5%的范围左右。
在详细估算过程中有时候还需要考虑学习曲线的影响。
学习曲线就是人们多次从事同一工作,不断地积累经验、增进技能,随着熟练程度的增加,完成同样的工作就会需要较少的时间。把这样一个变化趋势反映出来的曲线,称之为学习曲线。
学习曲线是一个指数曲线,也就是成本的增加或者减少都是遵循一个指数变化规律。可以通过数学分析来确定学习曲线的时间参数,确定学习曲线因素对成本或者对项目工期所产生的影响。
对这些项目属性进行估算的主要方法是通过与组织级度量库中的历史数据进行对比,找到相同规模的历史项目,参考其数据,根据本项目的特点对相关属性进行估算。假如本项目与公司之前的某项目A规模大体相当,项目A历史数据如表1和表2所示。
1)对项目所需资源进行估算
表格 1 项目A使用资源数
人力资源估算 |
|
PM |
1 |
需求人员 |
1 |
设计人员 |
2 |
开发人员 |
4 |
测试人员 |
3 |
2)对项目各阶段工作量进行估算
表格 2 项目A生命周期各阶段工作量分布
瀑布模型生命周期各阶段 |
工作量分布 |
立项阶段 |
2.0% |
需求阶段 |
5.0% |
计划阶段 |
6.0% |
设计阶段 |
22.0% |
开发阶段 |
22.0% |
系统测试阶段 |
25.0% |
客户验收阶段 |
11.0% |
结项阶段 |
7.0% |
如果项目A和项目B两个项目的规模相当,这是进行估算的依据,根据之前对项目总工作量的估算(300人天),那么就可以得到本项目各个阶段的工作量分布,如表3所示:
表格 3项目B工作量估算
瀑布模型生命周期各阶段 |
工作量分布 |
B项目预估工作量(人天) |
立项阶段 |
2.0% |
6 |
需求阶段 |
5.0% |
15 |
计划阶段 |
6.0% |
18 |
设计阶段 |
22.0% |
66 |
开发阶段 |
22.0% |
66 |
系统测试阶段 |
25.0% |
75 |
客户验收阶段 |
11.0% |
33 |
结项阶段 |
7.0% |
21 |
3)对项目工期进行估算
假设本项目B采用瀑布式的开发模型,并且所需资源与组织级度量库中的历史项目A相同,根据表3对各个生命周期阶段工作量的估算,以及表1对各种资源的估算,那么通过表4的计算就可以得到完成本项目所需要的时间。
假如每月按照22个工作日进行计算,那么本项目估计5.55个月后可以结束。
表格 4 项目周期的估算
瀑布模型生命周期各阶段 |
B项目预估工作量(人天) |
参与角色 |
参与人数 |
天数 |
立项阶段 |
6 |
PM |
1 |
6 |
需求阶段 |
15 |
需求人员 |
1 |
15 |
计划阶段 |
18 |
PM |
1 |
18 |
设计阶段 |
66 |
设计人员 |
2 |
33 |
开发阶段 |
66 |
开发人员 |
4 |
16.5 |
系统测试阶段 |
75 |
测试人员 |
3 |
25 |
客户验收阶段 |
33 |
测试人员 需求人员 PM |
5 |
6.6 |
结项阶段 |
21 |
全体人员 |
10 |
2.1 |
项目工作周期(天) |
122.2 |
|||
项目工作历时(月) |
5.55月 |
假如本项目所使用的资源与项目A相同,经过对项目周期的估算,可以得知本项目大概需要5.55个月的时间。基于以上数据就可以通过表5来对项目的成本进行估算,其结果如下所示:
表格 5 本项目成本估算
工种 |
人数 |
参考数据(元/月) |
估算成本 |
PM |
1 |
9000 |
9000 |
需求人员 |
1 |
5000 |
5000 |
设计人员 |
2 |
8000 |
16000 |
开发人员 |
4 |
6000 |
24000 |
测试人员 |
3 |
4500 |
13500 |
每月成本(元) |
67500 |
||
项目为期5.55个月,总成本(元) |
374625 |
参数模型是利用历史数据来进行项目估算(包括时间估算和成本估算)的一种方法。
在建立参数模型的时候,首先要确定成本要素,也就是说一个项目产品由哪些要素决定其成本消耗,这个模型的取得是建立在数学分析的基础上,利用历史数据、利用分析方法得出一个相应的数学模型。
比如盖一栋房子,房子的建筑面积、墙面面积或者屋顶面积可以决定建筑成本的耗费。制造一个卡车的成本可以根据卡车的马力或者它的重量、运载力、载重量等确定它的成本大小。
【举例】
参数模型估算
如发动机的成本和设计费的成本,是根据数百个航空发动机在过去制造的成本统计数据的基础上,确定出影响发动机的基本要素,即是发动机本身的重量和它的马达推力。比方航空发动机的成本是:
C=成本(cost)
L=设计费(designlabor,currentcostrate)
T=马达推力(motorthrust)
M=重量(massflow)
这里a、k和c都是一个固定常数,一旦确定了这三个参数之后,就可以计算出航空发动机的成本。它的设计费用是发动机的成本乘上设计费率。
自下而上法是广泛采用的一种项目估算方法。与其他方法相比,它具有更高的精度,所以在一般的项目管理中被普遍采用。自下而上法的估算过程:
1)工作分解
按照项目目标要求把工作层层细化,一直细化到工作包能够便于管理,能够对它进行估算为止。WBS的精度,实际上也决定了项目估算的精度水平。也就是说如果第一个项目估算分解精度不高,WBS分解比较粗,估算也只能比较粗,只有工作分解比较细才能够估算得比较细,使估算达到一定的精度要求。具体WBS分解层次以及精度要求到什么程度因项目不同而异。
一般说来,对一些不确定性比较大的项目,像一些研究开发项目,新产品的开发项目,由于存在众多的不确定性,很难把工作分解到非常细致的水平上,这时候它的估算只能相对比较粗略,而对一般确定性比较大的项目,像建筑工程,通常可以把工作包分解到非常细的层次,从而更加精确地对项目进行估算及进行更加有效的管理和控制。
2)工作说明
WBS分解完之后,接下来就是对工作的说明。工作说明的内容实际上反映了对项目估算的一些先决条件,包括质量要求,安全质量等,因此对工作说明的分析是估算过程中不可缺少的一个环节。
3)确定基础数据和假定条件
如果前面的工作已经完成,在估算阶段需要重新审查对工作的说明,包括它的一些基础数据或它的假定条件。
4)WBS单元估算
对每个WBS的工作单元进行估算,也就是对每一个工作单位进行逐个估算。在WBS估算过程中,有时需要项目经理,或项目小组长、项目团队成员亲自参与估算工作。这样才能保证估算具有实际意义。因为在制定项目计划时,需要对项目团队成员、项目计划做出一个承诺,这个项目计划是在项目估算的基础上进行的,因此在估算当中需要选择合适的人参与估算过程。
5)WBS单元估算评审
在对每一个工作单元估算完成之后,接下来的工作需要对WBS单元的估算进行评审。评审活动可以请有关部门、专家包括职能部门经理来参与。评审过程主要是对前面已经完成的每个WBS单元的估算结果进行评审,就估算结果的合理性、正确性与相应的一些假定条件或者一些数据的合理性做一个审核。确保每一个单元估算之间的精度控制在一个水平上,使所有的WBS单元的估算建立在一个同样的精度水平上。
6)统计汇总
统计汇总就是按照WBS的层次结构,由下而上,层层加和。这个阶段,通常采用计算机进行管理。
7)验证估算
在统计汇总完成之后需要对一些估算进行验证。可以通过不同单元的比较,通过横向或者纵向比较来验证估算的正当性和合理性。
验证工作结束之后,估算工作就算全部完成。估算过程是由下而上的过程,按照工作包的分解估算出每个工作包相应的成本和时间,然后层层加和,得出项目的估算。最后再按照项目目标和项目其他要求自上而下把成本做一个重新分配。这个过程就是预算过程。预算过程和估算过程可以看成是一个完全相反的过程,但是这个过程同时进一步证明估算的正确性和合理性。
在一般情况下,预算可以按照估算的结果进行,但少数情况下,比如说需要压缩预算,或者说进一步提高效率,需要进一步借助价值工程分析等等手段,采用一个有效的成本分配手段,按照每一个工作单元所能够提供的价值,也就是说每个工作单元为整个项目目标所提供的价值来合理地分配成本,而不仅仅是基于它的估算。
项目的估算是基于当前的信息确定出项目整个过程及相应活动的相关数据,包括时间估算、成本估算。估算在项目的不同阶段是不断变化的。
采用不同的估算方法,项目的精度就有所不同,它主要取决于手头资料、信息的可得性和经验积累的多寡,如果想提高估算精度,可以建立项目的数据库,包括历史信息、项目记录、项目数据库等。
本讲重点介绍了项目估算通常采用的两种方法:参数模型和自下而上法。参数模型是时间估算和成本估算通常采用的估算方法,而自下而上法具有更高的精度,因而也被广泛采用。