1.2 软件成本度量技术和方法
软件成本度量是对软件成本的预计值进行估算或对实际值进行测量、分析的过程。所估算的成本会成为预算编制、招投标、项目计划、投资分析以及定价等活动的重要参考依据。
在国内外相关的实践中,软件成本度量常用的方法包括Wideband Delphi、SLIM、PRICE-S、SEER-SEM和COCOMOⅡ等。
1.Wideband Delphi
Wideband Delphi是一种基于专家经验的主观估算方法,其估计步骤如下:
(1)组建估算团队。组建估算团队并划分成不同估算单元。当团队规模较小(不超过5人)时,每个人视为一个估算单元;当团队较大时,可以将团队分成3~5人的小组,每个小组视为一个估算单元。
(2)向估算团队描述估算背景及要求,包括项目范围/目标/结果、资源约束,以及量纲、估算的轮次等详细要求等。
(3)每个估算单元独立估算。保证估算团队中的每个估算单元有足够的时间独立完成估算,并记录其在估算过程中的假设及主要工作。同时,赋予每个估算单元表达其独立洞见和直觉的权利,而不受其他估算单元的干扰,首轮估算过程中的私密性和匿名性非常重要。
(4)展现结果并进行讨论。估算团队分析各估算结果之间的异同,并分别解释其估算过程,包括主要假设和结论等。在这个过程中,各估算单元可以提醒其他估算单元在估算过程中所遗漏的内容,也可以强制要求他们面对不同的假设给出估算结论。
(5)重复(3)~(4)步骤,直到达到预设的终止条件为止。常用的终止条件为各估算单元的差异小于预设值或已达到步骤(2)中设定的估算轮次上限。在估算终止时,通常采用加权平均的方式确定最终估算结果。
2.SLIM
在1978年,为了满足美国陆军估算大型项目的总工作量和交付时间的需要,Putnam开发了一个约束模型——SLIM,并应用于代码行数大于70000行的项目。另外,经过调整,基本的SLIM公式也可以适用于小项目。SLIM假设软件开发工作量的分布规律符合Rayleigh曲线,且每个点对应一个主要的开发活动,并引入关于生产率级别的经验观察值,得到如下软件功能规模S计算式:
式中,C为技术因子;K为按人年计算的项目总工作量(包含维护工作量);td为以年为计算单位的交付前剩余时间,理论上,td是Rayleigh曲线上的最大值点。
3.PRICE-S
PRICE-S模型最初由美国无线电公司开发,并用于内部的软件项目估算,如阿波罗登月计划。PRICE-S包含以下3个子模型。
(1)采购子模型:这个子模型用于预测软件成本和制订计划。该模型覆盖的主要软件类型包括业务系统、通信系统、指挥和控制系统、航天系统等。
(2)规模子模型:该子模型用于估算所开发的软件规模。规模可以是代码行、功能点和对象点。
(3)生存周期成本子模型:该子模型用于估算软件运维阶段的早期成本。
4.SEER-SEM
与SLIM的提出背景相似,SEER-SEM最早也是由美国军方研究和应用的。该模型同样适用于软件项目的工期和工作量估算。在使用SEER-SEM的过程中,首先要了解软件项目基本信息,如规模、技术、工时或工期约束、质量要求等。明确上述信息后,就可以应用SEER-SEM估算项目的工期和工作量了。
在SEER-SEM中,不同的规模首先被转换为有效规模Se。有效规模包括新增的内容、修改或重用的内容及第三方组件实现的功能等。SEER-SEM规定有效规模的计算方式为
得到项目的有效规模后,然后确定项目的工时,如式(1-3)所示:
式中,K为软件项目所需的工时,D为人员配置的复杂性程度(根据项目添加人员的速度对项目难度进行评级),Se为有效规模,Cte为考虑综合因素后的生产率系数。计算项目工期的公式与计算项目工时的公式相似。
式中,td为预期的软件项目工期。
SEER-SEM用于工作量和工期的估算结果表明,随着规模的增加,项目工作量上升得更为迅速(幂函数的指数为1.2),项目工期的增长则比较缓慢(幂函数的指数为0.4)。
5.COCOMO Ⅱ
Barry W. Boehm在20世纪70年代后期提出了构造性成本模型COCOMO(Constructive Cost Model),此后,随着软件工程技术的发展这一模型不断完善,在1994年形成了COCOMOⅡ,成为当今世界上应用最广泛的软件成本估算模型之一。
COCOMOⅡ以软件规模作为估算的主要依据,使用17个工作量乘数与5个规模因子来体现不同软件项目在项目环境、运行平台、人员、产品等方面的差异。
COCOMOⅡ中所采用的成本驱动因子及其含义见表1-1。
表1-1 COCOMOⅡ中所采用的成本驱动因子及其含义
COCOMOⅡ是一个可扩展的结构化成本估算模型。使用者将COCOMOⅡ模型用于新的环境时,可以使用该环境下的项目数据对模型进行校准,加入新的成本驱动因子,以获得更准确的结果;COCOMOⅡ模型会不定期地发布新的校准结果,模型中的常量也会因校准时间的不同而略有不同。COCOMOⅡ还可添加新的因子满足软件工程发展的新需求,并与软件实践保持同步。
综上所述,不同的估算方法具有各自的优缺点,不存在一种“最佳方法”可以满足所有场景下的估算需求。因此,不同的组织可以根据应用场景和管理需求选择不同的估算方法。在选择及应用估算方法时应注意以下4点:
(1)在方法选择过程中,所用方法的成本、方法的易用性、估算结果的可追溯性等重要因素都需要考虑。
(2)为了提高估算的准确程度,可以同时采用多种估算方法交叉验证。例如,采用一种基于参数模型的形式化估算方法与专家经验法进行交叉验证。
(3)当形式化估算模型没有根据组织的特点及历史数据进行优化或校正时,估算结果可能会存在较大的偏差。
(4)在项目实施过程中,应定期或根据实际情况对假设条件进行检查,以不断提高估算精度。