软件项目的规模估算历来是比较复杂的事,因为软件本身的复杂性、历史经验的缺乏、估算工具缺乏以及一些人为错误,导致软件项目的规模估算往往和实际情况相差甚远。因此,估算错误已被列入软件项目失败的四大原因之一。

软件工程师经常会被问到,编一个什么样的软件需要多长时间、多少资金。对于这个问题,不少人会犯难,原因有两个:一是用户的需求太不具体,二是自己缺乏一个科学的估计方法。这里向大家介绍几种软件项目规模的估计方法。

概念介绍

先介绍一个衡量软件项目规模最常用的概念—— LOC(line of code),LOC指所有的可执行的源代码行数,包括可交付的工作控制语言(JCL:job control language)语句、数据定义、数据类型声明、等价声明、输入/输出格式声明等。一行代码(1LOC)的价值和人月均代码行数可以体现一个软件生产组织的生产能力。组织可以根据对历史项目的审计来核算组织的单行代码价值。

例如,某软件公司统计发现该公司每一万行C语言源代码形成的源文件(.c和.h文件)约为250K。某项目的源文件大小为3.75M,则可估计该项目源代码大约为15万行,该项目累计投入工作量为240人月,每人月费用为10 000元(包括人均工资、福利、办公费用公摊等),则该项目中1LOC的价值为:

(240×10 000)/150 000=16元/LOC

该项目的人月均代码行数为:

150 000/240=625LOC/人月

方法一:Delphi法

Delphi法是目前最流行的专家评估技术,在没有历史数据的情况下,这种方式适用于评定过去与将来、新技术与特定程序之间的差别,但专家“专”的程度以及对项目的理解程度是工作中的难点,尽管Delphi技术可以减少这种偏差,但通常在评定一个新软件的实际成本时用得不多,这种方式在决定其他模型的输入时特别有用。Delphi法鼓励参加者根据问题进行相互讨论。这个技术要求有多种软件相关经验的人参与,互相说服对方。

Delphi法的步骤是:

(1) 协调人向各专家提供项目规格和估计表格;

(2) 协调人召集小组会的各专家讨论与规模相关的因素;

(3) 各专家匿名填写迭代表格(如下图2-2所示);

(4) 协调人整理出一个估计总结,以迭代表的形式返回专家;

(5) 协调人召集小组会,讨论较大的估计差异;

(6) 专家复查估计总结并在迭代表上提交另一个匿名估计;

(7) 重复(4)~(6)步骤,直到最低和最高估计达到一致。

Delphi法规模估计迭代表

项目名称:                   

估计日期:    

估计者:                        

估计论次:    

结果:

代码行    LOC;周期:  月;工作量:   人月;费用    元。



理由:

图2-2 Delphi法规模估计迭代表样例

方法二:类比法

类比法适合评估一些与历史项目在应用领域、环境和复杂度相似的项目,通过新项目与历史项目的比较得到规模估计。类比法估计结果的精确度取决于历史项目数据的完整性和准确度,因此,用好类比法的前提条件之一是组织建立起较好的项目后评价与分析机制,对历史项目的数据分析是可信赖的。

其基本步骤是:

(1) 整理出项目功能列表和实现每个功能的代码行;

(2) 标识出每个功能列表与历史项目的相同点和不同点,特别要注意历史项目做得不够的地方;

(3) 通过步骤(1)和(2)得出各个功能的估计值;

(4) 产生规模估计。

软件项目中用类比法,往往还要解决可重用代码的估算问题。估计可重用代码量的最好办法就是由程序员或系统分析员详细地考查已存在的代码,估算出新项目可重用的代码中需重新设计的代码百分比、需重新编码或修改的代码百分比以及需重新测试的代码百分比。根据这三个百分比,可用下面的计算公式来计算等价新代码行:

等价代码行 = [(重新设计% +重新编码% +重新测试%)/3]× 已有代码行

例如,有10 000行代码,假定30%需要重新设计,50%需要重新编码,70%需要重新测试,那么其等价的代码行可以计算为:

[ (30% + 50% + 70%)/3 ]× 10 000 = 5 000 等价代码行

也就是说,重用这10 000代码相当于编写5 000代码行的工作量。

方法三:功能点估计法

功能点测量是在需求分析阶段基于系统功能的一种规模估计方法。通过研究初始应用需求来确定各种输入、输出、计算和数据库需求的数量和特性。通常的步骤如下:

(1) 计算输入、输出、查询、主控文件和接口需求的数目。

(2) 将这些数据进行加权相乘。如表2-1所示就是一个典型的权值表。

表2-1 权值表举例

功 能 类 型 权  值

输入 4

输出 5

查询 4

主控文件 10

接口 10



(3) 估计者根据对复杂度的判断,总数可以用+25%、0、或–25%调整。

统计发现,对一个软件产品的开发,功能点对项目早期的规模估计很有帮助。然而,在了解产品越多后,功能点可以转换为软件规模测量更常用的LOC方法。