2.7.1 成本估计
一个软件开发的成本主要表现在人力和时间的消耗。工作量是指在软件项目建设过程中需要投入的人力和时间,一般用人月数进行度量。项目的建设分为开发阶段、实施阶段、运行维护阶段。故工作量需要分阶段进行估算。工作量=开发工作量+实施工作量+维护工作量。由于这种消耗估计不是精确的科学计算,因此可以用几种方法计算后相互验证。
(1)代码行定量估算方法。开发软件中实现每一个功能所需要的源代码行数与成本联系起来。根据历史数据和经验,估计实现一个功能需要的源程序行数。当有了源程序的行数后,再根据软件的复杂度和当时的工资水平确定每行代码的平均成本。每行代码的平均成本与源程序的总行数的乘积就是总成本。如果以往开发过类似的项目或有历史的数据参考,这种方法比较有效。
(2)开发阶段工作量估算。包括两种估算方式:功能点估算法和任务估算法。
1)功能点估算法:该方法是依据软件项目的功能需求来评估开发工作量。通过分析系统需求计算项目规模(功能点数),再乘以各阶段完成每个功能点所需要投入的人工时(开发成本系数),就可以计算出完成项目所需要的人月数。适用于立项阶段需求分析比较详细的项目或者用于项目完成阶段的最终工作量估算。
开发工作量D(人月)=(项目功能点FP*开发成本系数k/H/W)
其中,H是指国家规定的一天工作时数,W指一个月工作天数。
开发成本系数k主要考虑项目的非技术难度,如开发周期、协调难度、业务的复杂度、需求的不确定性。
k的取指范围一般如表2.2所示。
表2.2 k取指一般范围

2)任务估算法:任务估算法是把软件项目功能分解为若干个相对独立的任务,再分别估计完成每个任务需要的人员搭配比例及投入时间,每个人员的工作量之和就是该任务的工作量。最后将各个任务的工作量累加起来就得出软件项目的总工作量。该方法适用于立项阶段的工作量估算。
软件开发工作可分为:需求分析、设计、编码、测试。设计各个岗位人员工作量可基于以下标准计算:
①以程序员的工作量为标准;
②高级程序员的工作量为标准工作量的1.5倍;
③系统分析员的工作量为标准工作量的2.5倍;
④测试工程师的工作量为标准工作量;(https://www.daowen.com)
⑤高级测试工程师的工作量为标准工作量的1.5倍;
⑥项目管理人员的工作量为标准工作量的3倍;
⑦市场营销人员的工作量为标准工作量;
⑧技术支持工程师的工作量为标准工作量;
⑨文秘的工作量为标准工作量的0.5倍;
⑩如果遇到类似的项目,就可以比较有把握地进行估算。但是在软件工程中,受到人、问题、过程、生产、资源等因素的影响比较多,因此要得到准确的结果并不容易。
例2.5 以已有项目的经验,研发部门每一万行C语言源代码形成的源文件(.c和.h文件)约为250k。一个已结束的研发项目,经过统计,源文件大小为3.75m。该项目投入成本为360万元,人工价是18000元/人月。问:
①该项目的规模是多少KLOC(源代码行数)?
②工作量是多少人月?
③生产率是多少?
④每行代码的价值是多少?
解:①3.75m/250k=15万行=150KLOC;
②工作量=成本/人工价=360万元/18000元/人月=200人月;
③生产率=规模/工作量=150KLOC/200人月=750LOC/人月;
④360万元/15万行=24元/行。