构造性成本模型

构造性成本模型（，英文全称为）是由巴里·勃姆（Barry Boehm）提出的一种软件成本估算方法。这种模型使用一种基本的回归分析公式，使用从项目历史和现状中的某些特征作为参数来进行计算。

概述 

构造性成本模型最初发表于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是一种静态的单值模型，它使用以每千源代碼行數（KLoC）来度量的程序大小来计算软件开发的工作量（及成本）。COCOMO可以应用于三种不同的软件项目：

 有机项目 - 相对较小、较简单的软件项目，由较小的有经验的团队来完成，需求较少并且没有过份严格的限定。
 中度分离项目 - 指中等规模（大小及复杂度）的软件项目，由不同经验水平的人组成的团队来完成，需求中即有严格的部分也有不太严格的部分。
 嵌入式项目 - 指软件项目必须依赖于一套紧凑的硬件、软件以及符合操作限制

基本COCOMO的等式如下：

E=ab(KLOC)bb
D=cb(E)<sup

>db</sup>
P=E/D

其中E是用“人月”来计算的工作量，D是指累积的开发时间（月），KLOC是指对最终发布的代码行数的估计（千行代码），P指需要的人数。其中的一些系数 ab,bb, cb和db如下表所示：

    Software project    ab      bb      cb      db
   
    有机型              2.4     1.05    2.5     0.38
    中度分离型          3.0     1.12    2.5     0.35
    嵌入式              3.6     1.20    2.5     0.32

基本COCOMO适用于快速、早期地粗略估算软件成本，但它没有考虑如不同的硬件条件、人员素质及经验、对现代工具与技术的使用，等其它会对软件成本有深远影响的项目属性，所以它的准确程度有限。

中级COCOMO 

中级COCOMO对软件工作量的估算使用了程度大小以及一组“成本驱动者”，包括对产品、硬件、人员及项目属性的客观评价。这种扩展包含了四类“成本驱动者”，每个类又有一些小的属性：
 产品属性
 软件可靠性需求
 应用数据库的大小
 产品复杂度
 硬件属性
 运行时的性能约束
 内存约束
 虚拟机稳定性
 回复时间的需求 
 人员属性
 分析能力
 软件工程能力
 应用经验
 虚拟机的经验
 编程语言经验
 项目属性
 采用的软件工具
 采用的软件工程手段
 对开发时间的要求

这15个属性的每一个都会得到一个6点的评估，从“非常低”到“非常高”（重要性或大小）。下表中列出了可用的因子值。所有这些因子的乘积的结果就是“工作量调整因子(EAF)”通常这些因子的值是从0.9到1.4。

中级COCOMO的计算公式如下：

E=ai(KLoC)(bi).EAF

其中E是以“人月”来计算的工作量，“KLoC”是产品发布的代码行数(千行代码)，“EAF”是用上述方法计算得出的因子。系数ai和幂bi在下表中给出：

{| border="0" cellspacing="4"
!软件项目
!width="20%"|ai
!width="20%"|bi
|-
|有机型
|align="center"|3.2
|align="center"|1.05
|-
|中度分离型
|align="center"|3.0
|align="center"|1.12
|-
|嵌入式
|align="center"|2.8
|align="center"|1.20
|}

对于使用“E”来计算开发时间“D”的方法与基本COCOMO相同。

软件工程