Boehm在1981年提出了COCOMO(建设性成本估算模型)。COCOMO是世界上最常用的软件估算模型之一。 COCOMO根据软件的大小预测软件产品的工作量和进度。
此模型中的必要步骤是:
- 通过评估成千上万的源代码行(KDLOC)获得开发工作的初步估计。
- 从项目的各种属性中确定一组15个乘数。
- 通过将初始估算值乘以所有乘数来计算工作量估算值, 即, 将步骤1和步骤2中的值相乘。
Ei = a *(KDLOC)b
常数a和b的值取决于项目类型。
在COCOMO中, 项目分为三种类型:
- 有机
- 半独立式
- 嵌入式的
2.半独立式:如果开发项目由经验丰富和缺乏经验的人员组成, 则可以将其视为半独立式项目。团队成员可能在相关系统方面经验有限, 但可能不熟悉所开发订单的某些方面。半独立系统的示例包括开发新的操作系统(OS), 数据库管理系统(DBMS)和复杂的库存管理系统。
3.嵌入式:如果正在开发的软件与复杂的硬件紧密耦合, 或者存在关于操作方法的严格规定, 则将开发项目视为嵌入式类型。例如:ATM, 空中交通管制。
对于三个产品类别, Bohem提供了一组不同的表达式来预测工作量(以人月为单位)和开发时间(根据KLOC(基洛代码行)的估计大小), 工作量估计考虑了由于假期导致的生产力损失, 每周休息, 喝咖啡休息时间等。
Boehm认为, 软件成本估算应分三个阶段进行:
- 基本型号
- 中间模型
- 详细模型
努力= a1 *(KLOC)a2 PM
Tdev = b1 *(努力)b2个月
其中
KLOC是在Kilo Lines of Code中表示的软件产品的估计大小,
a1, a2, b1, b2是每组软件产品的常量,
Tdev是开发该软件的估计时间, 以月为单位,
努力是开发软件产品所需的总努力, 以人月(PM)表示。
估算开发工作量
对于这三类软件产品, 下面显示了根据代码大小估算工作量的公式:
有机:努力= 2.4(KLOC)下午1.05
半独立:努力= 3.0(KLOC)1.12 PM
嵌入式:努力= 3.6(KLOC)1.20 PM
估计开发时间
对于这三类软件产品, 下面给出了基于工作量估算开发时间的公式:
有机:Tdev = 2.5(努力)0.38个月
半独立式:Tdev = 2.5(努力)0.35个月
嵌入式:Tdev = 2.5(努力)0.32个月
通过绘制不同软件大小的估计特征, 可以获得对基本COCOMO模型的一些了解。图中显示了估算的工作量与产品尺寸的关系图。从无花果中可以看出, 这种努力在软件产品的大小上有些繁琐。因此, 开发产品所需的工作量随项目规模的增加而迅速增加。
文章图片
在KLOC中, 开发时间与产品尺寸的关系图如图2所示。从图可以看出, 显影时间是产品尺寸的次线性函数, 即, 当产品尺寸增加两倍时, 产品显影时间不会增加一倍, 而会适度增加。这可以通过以下事实来解释:对于较大的产品, 可以识别可以同时执行的大量活动。并行活动可以由工程师同时进行。这减少了完成项目的时间。此外, 从图可以看出, 所有三类产品的开发时间大致相同。例如, 一个60 KLOC程序可以在大约18个月内开发, 无论它是有机, 半分离还是嵌入式类型。
文章图片
从工作量估算中, 可以通过将所需工作量乘以每月的人力成本来获得项目成本。但是, 在此项目成本计算中隐含一个假设, 即整个项目成本仅凭人力成本就产生了。除了人力成本外, 由于项目所需的硬件和软件以及公司的管理, 办公空间等开销, 项目还会产生成本。
重要的是要注意, 使用COCOMO模型获得的工作量和工期估算被称为名义工时估算和名义工时估算。 “ 名义” 一词意味着, 如果有人试图在比预计的工期短的时间内完成项目, 那么成本将急剧增加。但是, 如果有人在比预计的时间更长的时间内完成了项目, 则估计的成本值几乎不会减少。
例1:假设一个项目估计为400 KLOC。计算三种模型(即有机模型, 半分离模型和嵌入式模型)中每种模型的工作量和开发时间。
解决方案:基本的COCOMO方程采用以下形式:
努力= a1 *(KLOC)a2 PM
Tdev = b1 *(努力)b2个月
项目估计规模= 400 KLOC
(i)有机模式
E = 2.4 *(400)1.05 = 1295.31 PM
D = 2.5 *(1295.31)0.38 = 38.07 PM
(ii)半独立模式
E = 3.0 *(400)1.12 = 2462.79 PM
D = 2.5 *(2462.79)0.35 = 38.45 PM
(iii)嵌入式模式
E = 3.6 *(400)1.20 = 4772.81 PM
D = 2.5 *(4772.8)0.32 = 38下午
示例2:将开发一个200 KLOC的项目。软件开发团队在类似项目上具有平均经验。项目进度不是很紧。计算工作量, 开发时间, 平均员工人数和项目生产率。
解决方案:半分离模式是最合适的模式, 要考虑开发时间的大小, 进度和经验。
因此E = 3.0(200)1.12 = 1133.12PM
D = 2.5(1133.12)0.35 = 29.3PM
文章图片
P = 176 LOC /下午
2.中间模型:基本的Cocomo模型认为工作量仅是代码行数和根据各种软件系统计算出的一些常数的函数。中间COCOMO模型可以识别这些事实, 并根据软件工程的各种属性, 使用一组15个成本动因来完善通过基本COCOMO模型获得的初始估计。
成本动因分类及其属性:
(i)产品属性-
- 所需的软件可靠性程度
- 应用程序数据库的大小
- 产品的复杂性
- 运行时性能约束
- 内存限制
- 虚拟机环境的波动性
- 所需的周转时间
- 分析能力
- 软件工程能力
- 应用经验
- 虚拟机经验
- 编程语言经验
- 使用软件工具
- 软件工程方法的应用
- 所需的开发时间表
文章图片
文章图片
中间的COCOMO方程:
E = ai(KLOC)bi * EAF
D = ci(E)的
中间COCOMO的系数
Project | ai | bi | ci | di |
---|---|---|---|---|
Organic | 2.4 | 1.05 | 2.5 | 0.38 |
Semidetached | 3.0 | 1.12 | 2.5 | 0.35 |
Embedded | 3.6 | 1.20 | 2.5 | 0.32 |
详细的COCOMO的六个阶段是:
- 规划和要求
- 系统结构
- 完整的结构
- 模块代码和测试
- 整合与测试
- 成本构成模型
推荐阅读
- 什么是数据结构指标(详解————)
- 数据字典是什么()
- 快速了解圈复杂度
- 什么是软件成本估算(答案都在这里)
- 用于软件指标的案例工具
- 普特南(Putnam)资源分配模型图文详解
- 为什么需要软件配置管理()
- SCM流程是怎么样的()
- uni-app点击事件传参与vue区别