COCOMO(Constructive Cost Model; 构造性成本模型)
目录 |
COCOMO英文全称为Constructive Cost Model,中文为构造性成本模型,是指由巴里·勃姆(Barry Boehm)于 1981 年提出的一种精确、易于使用的,基于模型的软件成本估算方法。从本质上说是一种参数化的项目估算方法,参数建模是把项目的某些特征作为参数,通过建立一个数字模型预测项目成本的回归分析公式。
COCOMO最初发表于1981年巴里·勃姆《软件工程经济学》一书中,做为一种在软件项中估算工作量、成本以及时间表的模型。它基于对TRW飞机制造公司的63个项目的研究。巴里·勃姆于1981年在该公司担任软件研究与技术总监。这项研究中的项目所包含的代码量从2000行到10000行,包含的编程语言从汇编语言到PL/I。这些项目采用瀑布模型进行软件开发,这是在1981年时主流的软件开发模式。
通常把上述模型称作为“COCOMO 81”。1997年,“COCOMO II”开始研发,并最终于2001年发表于《软件成本估算:COCOMO Ⅱ模型方法》一书中。COCOMO II是COCOMO 81的继承者,并且更适用于对现代软件开发项目进行估算。它为现代软件开发流程提供了更多支持,并提供了一个更新了的数据库。对于新模型的需求来源于软件开发技术从基于大型计算机和整晚的批处理到桌面开发、代码重用以及利用即有软件模块的改变。
COCOMO由三个不断深入和详细的层次组成。第一层,“基本COCOMO”,适用对软件开发进行快速、早期地对重要的方面进行粗略的成本估计,但因其缺少不同的项目属性(“成本驱动者”)的因素,所以准确性有一定的局限性。“中级COCOMO”中考虑进了这些成本驱动者。“详细COCOMO”加入了对不同软件开发阶段影响的考量。
COCOMO模型中,考虑到开发环境的不同,软件开发项目的类型可以分为3种:
组织型(organic):相对较小、较简单的软件项目。开发人员对开发目标理解比较充分,与软件系统相关的工作经验丰富,对软件的使用环境很熟悉,受硬件的约束较小,程序的规模不是很大(<50000行)。
嵌入型(embedded):要求在紧密联系的硬件、软件和操作的限制条件下运行,通常与某种复杂的硬件设备紧密结合在一起。对接口、数据结构、算法的要求很高,软件规模任意。如大而复杂的事务处理系统,大型/超大型操作系统,航天用控制系统,大型指挥系统等。
半独立型(semidetached):介于上述两种软件之间。规模和复杂度都属于中等或更高。最大可达30万行。
COCOMO模型按其详细程度可以分为三级:基本COCOMO模型,中间COCOMO模型,详细COCOMO模型。
基本COCOMO模型是一个静态单变量模型,它用一个已估算出来的原代码行数(LOC)为自变量的经验函数计算软件开发工作量。
中级COCOMO模型在基本COCOMO模型的基础上,再用设计产品、硬件、人员、项目等方面的影响因素调整工作量的估算。
详细COCOMO模型包括中间COCOMO模型的所有特性,但更进一步考虑了软件工程中每一步骤(如分析、设计)的影响。
E=aLb
D=cEb
其中:E表示工作量,单位是人月(PM)。
D表示开发时间,单位是月(M)。
L是项目的代码行估计值,单位是千行代码。
a,b,c,d是常数,取值如下表所示
对于基本COCOMO模型,通过统计63个历史项目的历史数据,得到如下计算公式
总体类型 | 工作量 | 进度 |
---|---|---|
组织型 | E=10.4×(KLOC)1.05 | D=10.5(E)0.38 |
半独立型 | E=3.0×(KLOC)1.12 | D=10.5(E)0.35 |
嵌入型 | E=3.0×(KLOC)1.20 | D=10.5(E)0.32 |
例如:某公司开发一个CAD软件,源代码行数为目标代码行数为33.3KLOC。CAD软件开发属于中等规模、半独立型。
从表中查到
a=3.0,b=1.12。
E=3.0×L1.12
=3.0×33.31.12
=152人月
假设每人每月费用为10000元,则总费用为152万元。
中级COCOMO对软件工作量的估算使用了程度大小以及一组“成本驱动者”,包括对产品、硬件、人员及项目属性的客观评价。这种扩展包含了四类“成本驱动者”,每个类又有15个属性,每一个属性都会得到一个6点的评估,从“非常低”到“非常高”(重要性或大小)。下表中列出了可用的因子值。所有这些因子的乘积的结果就是“工作量调整因子(EAF)”通常这些因子的值是从0.9到1.4。
成本驱动者 | 评估 | |||||
---|---|---|---|---|---|---|
非常低 | 低 | 正常 | 高 | 很高 | 非常高 | |
产品属性 | ||||||
软件可靠性需求 | 0.75 | 0.88 | 1.00 | 1.15 | 1.40 | |
应用数据库的大小 | 0.94 | 1.00 | 1.08 | 1.16 | ||
产品复杂度 | 0.70 | 0.85 | 1.00 | 1.15 | 1.30 | 1.65 |
硬件属性 | ||||||
运行时的性能约束 | 1.00 | 1.11 | 1.30 | 1.66 | ||
内存约束 | 1.00 | 1.06 | 1.21 | 1.56 | ||
虚拟机稳定性 | 0.87 | 1.00 | 1.15 | 1.30 | ||
回复时间的需求 | 0.87 | 1.00 | 1.07 | 1.15 | ||
人员属性 | ||||||
分析能力 | 1.46 | 1.19 | 1.00 | 0.86 | 0.71 | |
应用经验 | 1.42 | 1.17 | 1.00 | 0.86 | 0.70 | |
虚拟机的经验 | 1.12 | 1.10 | 1.00 | 0.90 | ||
编程语言经验 | 1.14 | 1.07 | 1.00 | 0.95 | ||
项目属性 | ||||||
采用的软件工具 | 1.24 | 1.10 | 1.00 | 0.91 | 0.82 | |
采用的软件工程手段 | 1.24 | 1.10 | 1.00 | 0.91 | 0.83 | |
虚拟机稳定性 | 1.23 | 1.08 | 1.00 | 1.04 | 1.10 | |
回复时间的需求 | 0.87 | 1.00 | 1.07 | 1.15 |
中级COCOMO的计算公式如下:
E=aLb
对于中级COCOMO模型,通过统计63个历史项目的历史数据,得到如下计算公式
总体类型 | 工作量 |
---|---|
组织型 | E=3.2×(KLOC)1.05 |
半独立型 | E=3.0×(KLOC)1.12 |
嵌入型 | E=2.8×(KLOC)1.20 |