有许多因素决定或影响软件估算的准确性,例如:待开发软件规模估算的准确性;以往软件项目度量数据的可用性;项目计划中软件团队能力的强弱;产品需求的稳定性和支持软件工作的环境等。
在项目计划中,规模是指软件项目的可量化结果。规模可以用代码行和功能点来表示。对规模的估算要考虑项目类型以及应用领域、要交付的功能、要交付的构件数量、对现有构件的修改程度。
代码行技术是一种简单而直观的软件规模估算方法,它从过去开发类似产品的经验和历史数据出发,估算出所开发软件的代码行数。开发人员需要给出软件的范围描述,并进一步将软件分解成一些尽量小且可分别独立估算的子功能,通过估算每一个子功能并将其代码行数累加得到整个系统的代码行数。
估算时,要求评估人员给出乐观的( a )、可能的( m )、悲观的( b )三种情况,并采用以下公式计算估算结果,其中 L 是软件的代码行数, Ld 为对期望值偏离的均方差。单位是行代码LOC或千行代码kLOC。
计算代码行应遵循以下原则:
①保证每个计算的“源代码行”只包含一个源语句;
②计算所有交付的、可执行的语句;
③数据定义只计算一次;
④不计算注释行;
⑤不计算诸如测试行、测试用例、开发工具、原型工具等使用的调试代码或临时代码;
⑥在每一个出现的地方,每条宏的调用、激活或包含都作为源代码的一部分。
在估算出代码行数,还可以进一步度量软件的生产率、每行代码的单元成本、每千行代码的错误个数等。
(1)生产率
其中, L 为软件的代码行数, PM 为软件开发的工作量,单位为人月; P 为生产率,单位为每人月完成的代码行数。
(2)单位成本
其中, S 为软件开发总成本, C 是每行代码的平均成本。
(3)代码出错率
其中, N 为软件的错误总数; EQR 是每千行代码的平均错误数。
代码行技术的优点是简单方便,在历史数据可靠的情况下可以很快估算出比较准确的代码行数;其缺点是这种方法需要依赖比较详细的功能分解结果,难以在开发初期进行估算,其估算结果与所用的开发语言紧密相关,且无法适用于非过程语言。