OCOMO 模型 – 软件工程

建设性成本模型 (COCOMO) 是一种软件成本估算模型,可帮助预测软件开发项目所需的工作量、成本和进度。COCOMO 由 Barry Boehm 于 1981 年开发,使用基于软件项目规模的数学公式,通常以代码行 (LOC) 为单位。

什么是 COCOMO 模型?

COCOMO 模型是软件项目的程序成本估算模型,通常用作可靠地预测与项目相关的各种参数(如规模、工作量、成本、时间和质量)的过程。它由 Barry Boehm 于 1981 年提出,基于对 63 个项目的研究,这使其成为记录最齐全的模型之一。

定义任何软件产品质量的关键参数(也是 COCOMO 的结果)主要是工作量和进度:

  1. 工作量:完成任务所需的人工量。它以人月为单位进行测量。
  2. 时间表: 这只是意味着完成工作所需的时间,当然,这与投入的努力成正比。它以时间单位(例如周和月)进行测量。

COCOMO 模型中的项目类型

在 COCOMO 模型中,软件项目根据其复杂性、大小和开发环境分为三种类型。这些类型是:

  1. 有机: 如果所需的团队规模足够小,问题得到充分理解并且过去已经解决,并且团队成员对问题有名义上的经验,则称软件项目为有机类型。
  2. 半独立式:如果团队规模、经验和各种编程环境的知识等重要特征介于有机和嵌入式之间,则称软件项目为半独立式。与有机项目相比,归类为半独立式的项目相对不太熟悉且难以开发,并且需要更多的经验、更好的指导和创造力。例如:编译器或不同的嵌入式系统可以被认为是 Semi-Detached 类型。
  3. 嵌入式:需要最高级别复杂性、创造力和经验要求的软件项目属于此类别。这种软件需要比其他两种模型更大的团队规模,而且开发人员需要有足够的经验和创造力来开发这种复杂的模型。

COCOMO 模型中这三种类型的项目比较

方面

有机

半独立式

嵌入式

项目规模

2 至 50 KLOC

50-300 千洛

300 及以上 KLOC

复杂性

中等

团队经验

经验丰富

一些有经验的员工和没有经验的员工

混合经验,包括专家

环境

灵活、限制较少

比较灵活,适度的约束

高度严谨、严格要求

工作量方程

E = 2.4“(400)1.05

E = 3.0“(400)1.12

E = 3.6“(400)1.20

简单的工资系统

新系统与现有系统的接口

飞行控制软件

COCOMO 模型的详细结构

详细的 COCOMO 结合了中间版本的所有特征,并评估了成本驱动因素对软件工程过程每个步骤的影响。 详细模型对每个成本驱动因素属性使用不同的努力乘数。在详细的 COCOMO 中,将整个软件分为不同的模块,然后我们在不同的模块中应用 COCOMO 来估算工作量,然后对工作量进行汇总。

详细的 COCOMO 的六个阶段是:

Cocomo 模型

OCOMO 模型 – 软件工程的图2 编辑

COCOMO 模型的阶段

  1. 规划和要求:此初始阶段涉及定义项目的范围、目标和约束。它包括制定概述时间表、资源和里程碑的项目计划
  2. 系统设计: : 在这个阶段,创建软件系统的高级架构。这包括定义系统的整体结构,包括主要组件、它们的交互以及它们之间的数据流
  3. 详细设计:此阶段涉及为系统的每个组件创建详细规范。它将系统设计分解为每个模块的详细描述,包括数据结构、算法和接口。
  4. 模块代码和测试:这涉及为详细设计中定义的每个模块或组件编写实际源代码。它包括对功能进行编码、实现算法和开发接口。
  5. 集成和测试:此阶段涉及将各个模块组合成一个完整的系统,并确保它们按预期协同工作。
  6. 成本建设模型: 建设性成本模型 (COCOMO) 是一种广泛使用的方法,用于估算软件开发项目所需的成本和工作量。

已经提出了不同的 COCOMO 模型,以根据所需的准确性和正确性来预测不同级别的成本估算。所有这些模型都可以应用于各种项目,这些项目的特性决定了后续计算中使用的常数值。下面提到了不同系统类型的这些特性。Boehm 对有机、半独立和嵌入式系统的定义:

COCOMO 模型的重要性

  1. 成本估算:为了帮助进行资源规划和项目预算,COCOMO 提供了一种有条不紊的软件开发成本估算方法。
    资源管理:通过考虑团队经验、项目规模和复杂性,该模型有助于有效分配资源。
  2. 项目规划: COCOMO 协助制定实用的项目计划,其中包括可实现的目标、截止日期和基准。
  3. 风险管理:在开发过程的早期,COCOMO 通过包含风险元素来协助识别和减轻潜在危害。
  4. 支持决策:在项目规划期间,该模型为范围、优先级和资源分配的选择提供了定量基础。
  5. 基准测试:为了根据行业标准比较和评估各种软件开发项目,COCOMO 提供了一个基准测试。
  6. 资源优化:该模型有助于最大限度地利用资源,从而提高生产率并降低成本。

COCOMO 模型的类型

COCOMO 模型有三种类型:

  • 基本 COCOMO 模型
  • 中级 COCOMO 模型
  • 详细的 COCOMO 模型

1. COCOMO 基本模型

Basic COCOMO 模型是估算软件开发项目所需工作量的一种简单方法。它使用一个简单的数学公式,根据项目的大小预测需要多少人月的工作,以数千行代码 (KLOC) 为单位。

它使用以下表达式估计开发所需的工作量和时间:

E = a*(KLOC)b下午

Tdev = c*(E)d

所需人员 = 工作量 / 时间

哪里

E 表示以个人-月为单位应用的工作量

KLOC 是软件产品的估计大小,以 Kilo 行代码表示

Tdev 是以月为单位的开发时间

a、b、c 是由下表中给出的软件项目类别确定的常数。

上述公式用于基本 COCOMO 模型的成本估算,也用于后续模型。对于不同类别的软件项目,基本模型的常量值 a、b、c 和 d 为:

软件项目 一个 b c d
有机 2.4 1.05 2.5 0.38
半独立式 3.0 1.12 2.5 0.35
嵌入式 3.6 1.20 2.5 0.32
  1. 工作量以 Person-Months 为单位衡量,从公式中可以明显看出,它依赖于 Kilo-Lines 代码。开发时间以月为单位。
  2. 这些公式在基本模型计算中是这样使用的,因为没有过多考虑可靠性和专业知识等不同因素,因此估计是粗略的。

基本 COCOMO 模型示例

假设一个 Basic 项目估计为 400 KLOC(千字节代码)。计算三种开发模式中每一种的工作量和时间。下表中提供了所有常量值:

溶液

从上表中,我们取常数 a、b、c 和 d 的值。

  1. 对于有机模式,
    • 努力 = 2.4 × (400)1.05≈ 1295 人月。
    • 开发时间 = 2.5 × (1295)0.38≈ 38 个月。
  2. 对于半分离模式,
    • 工作量 = 3 × (400)1.12≈ 2462 人月。
    • 开发时间 = 2.5 × (2462)0.35≈ 38 个月。
  3. 对于 Embedded 模式,
    • 工作量 = 3.6 × (400)1.20≈ 4772 人月。
    • 开发时间 = 2.5 × (4772)0.32≈ 38 个月。

以下是 Basic COCOMO Model 的程序:

C++爪哇岛蟒C#JavaScript (英语)
// Javascript program to implement basic COCOMO

// Function to calculate parameters of Basic COCOMO
function calculate(table,n,mode,size)
{
    var effort,time,staff,model;

    // Check the mode according to size

    if (size >= 2 && size <= 50)
        model = 0; // organic

    else if (size > 50 && size <= 300)
        model = 1; // semi-detached

    else if (size > 300)
        model = 2; // embedded
    

    console.log("The mode is ",mode[model]);
    
    // Calculate Effort
    effort = table[model][0] * (size ** table[model][1]);

    // Calculate Time
    time = table[model][2] * (effort ** table[model][3]);

    // Calculate Persons Required
    staff = effort / time;

    console.log("Effort = ",effort," Person-Month");
    console.log("Development Time = ",time," Months");
    console.log("Average Staff Required = ",Math.round(staff)," Persons");
}


var table = [[2.4,1.05,2.5,0.38],[3.0,1.12,2.5,0.35],[3.6,1.20,2.5,0.32]]
var mode = ["Organic","Semi-Detached","Embedded"]
var size = 4;
calculate(table, 3, mode, size);

// This code is contributed by satwiksuman.

输出
The mode is Organic
Effort = 10.289 Person-Month
Development Time = 6.06237 Months
Average Staff Required = 2 Persons

2. 中级 COCOMO 模型

基本的 COCOMO 模型假设工作量只是代码行数和根据不同软件系统评估的一些常数的函数。然而,在现实中,没有系统的工作量和时间表可以仅根据 Lines of Code 来计算。为此,还需要各种其他因素,例如可靠性、经验和能力。这些因素被称为成本驱动因素(乘数),中间模型利用 15 个这样的驱动因素进行成本估算。

成本驱动因素的分类及其属性:

成本驱动因素分为四类

产品特性:

  • 所需的软件可靠性范围
  • 应用程序数据库的大小
  • 产品的复杂性

硬件属性

  • 运行时性能约束
  • 内存约束
  • 虚拟机环境的波动性
  • 所需周转时间

个人属性

  • 分析师能力
  • 软件工程能力
  • 应用经验
  • 虚拟机体验
  • 编程语言经验

项目属性

  • 软件工具的使用
    软件工程方法的应用
    所需的开发时间表

这 15 个这样的属性中的每一个都可以按照它们的相对重要性顺序,从“非常低”到“特别高”的六分制进行评级。每个属性都有一个根据评级固定的努力乘数。下表代表了成本驱动因素及其各自的评级:

工作量调整系数 (EAF) 是通过将与 15 个属性中的每个属性关联的工作量乘数相乘来确定的。

工作量调整因子 (EAF) 用于增强基本 COCOMO 模型在以下表达式中生成的估计值:

中级 COCOMO 模型方程:

E = a*(KLOC)b* 电弧炉 PM

Tdev = c*(E)d

哪里

  • E 表示以个人-月为单位应用的工作量
  • KLOC 是软件产品的估计大小,以 Kilo 行代码表示
  • EAF 是工作量调整因子 (EAF) 是一个乘数,用于优化从基本 COCOMO 模型获得的工作量估计。
  • Tdev 是以月为单位的开发时间
  • a、b、c 是由下表中给出的软件项目类别确定的常数。

对于不同类别的软件项目,基本模型的常量值 a、b、c 和 d 为:

软件项目 一个 b c d
有机 3.2 1.05 2.5 0.38
半独立式 3.0 1.12 2.5 0.35
嵌入式 2.8 1.20 2.5 0.32

3. 详细的 COCOMO 模型

详细的 COCOMO 超越了基础和中级 COCOMO,更深入地研究了项目特定的因素。它考虑了更广泛的参数,例如团队经验、开发实践和软件复杂性。通过更详细地分析这些因素,Detailed COCOMO 为软件项目提供了高度准确的工作量、时间和成本估算。这就像放大项目的独特特征,以更清楚地了解成功完成它需要什么。

案例研究和示例

  1. NASA 航天飞机软件开发:NASA 估计了使用 COCOMO 模型为航天飞机计划构建软件所需的时间和金钱。NASA 能够通过考虑包括项目规模、复杂性和团队经验在内的变量,在资源分配和项目调度方面做出明智的决策。
  2. 大企业软件开发:COCOMO 模型已被大企业广泛用于预测构建复杂的商业软件系统所需的时间和金钱。通过使用 COCOMO 的估算方法,这些组织能够更好地为其软件项目规划和分配资源。
  3. 商业软件产品:事实证明,COCOMO 方法对于创造商业产品的软件公司也是有利的。这些企业能够通过精确计算构建新软件产品或功能的时间和费用来决定定价、上市时间和资源分配。
  4. 学术研究计划:为了估计创建软件原型或进行实验研究所需的时间和费用,学术研究计划采用了 COCOMO。研究人员能够使用 COCOMO 的估算方法更好地规划他们的项目和分配资源。

COCOMO 模型的优势

  1. 系统成本估算:提供一种系统化的方法来估算软件项目的成本和工作量。
  2. 帮助估算成本和工作量:这可用于估算软件项目在开发过程的不同阶段的成本和工作量。
  3. 有助于处理高影响因子:帮助确定对软件项目的成本和工作量影响最大的因素。
  4. 帮助评估项目的可行性: 这可用于通过估计完成软件项目所需的成本和工作量来评估软件项目的可行性。

COCOMO 模型的缺点

  1. 假设项目大小为主要因素:假设软件的大小是决定软件项目成本和工作量的主要因素,但情况可能并非总是如此。
  2. 不计算开发团队的特定特征:不考虑开发团队的具体特征,这些特征可能会对软件项目的成本和工作量产生重大影响。
  3. 不够精确的成本和工作量估计:这并不能提供对软件项目的成本和工作量的精确估计,因为它是基于假设和平均值的。

使用 COCOMO 的最佳实践

  1. 识别支撑模型的假设: 熟悉 COCOMO 模型的基本假设,包括它对团队体验、规模和复杂性的强调。要知道,尽管 COCOMO 提供了有用的近似值,但无法准确预测项目结果。
  2. 自定义模型:根据您项目的独特要求调整 COCOMO 的输入和参数,包括组织能力、开发流程和行业标准。通过这样做,您可以确信 COCOMO 生成的估计值更精确且更适合您的情况。
  3. 利用历史数据: 为了验证 COCOMO 输入并改进估算参数,请收集和检查以前项目的历史数据。由于真实数据考虑了项目特定的方面和经验教训,因此 COCOMO 预测变得更加准确和可靠。
  4. 验证和确认:将 COCOMO 估算与实际项目结果进行比较,并根据反馈和发现的经验教训对估算程序进行必要的调整。审查已完成的项目以发现错误并提高未来项目估算的准确性。
  5. 结合其他技术:为了减少任何一种方法中的偏差或不准确之处并对结果进行三角测量,请将 COCOMO 估计添加到其他估计技术中,包括专家判断、相似估计和自下而上估计。

关于 COCOMO 模型的重要问题

1. 一家公司需要为其一项最新发明开发数字信号处理软件。该软件预计有 20000 行代码。该公司需要确定使用基本 COCOMO 模型开发此软件所需的人力(以月为单位)。对于嵌入式系统上的软件开发,该模型的乘法因子为 2.2,而幂因子为 1.50。以个人月为单位的估计工作量是多少?

(一) 196.77

(二) 206.56

(C) 199.56

(D) 210.68

解决方案:正确答案是 (A)。

2. 基本 COCOMO 中有机软件的软件开发工作量估计为 

(A) E = 2.0(千块)1.05下午

(B) E = 3.4(千块)1.06下午

(C) E = 2.4(千块)1.05下午

(D) E = 2.4(千块)1.07下午

解决方案:正确答案是 (C)。

结论

COCOMO 模型提供了一种结构化的方法,可以根据项目规模和各种影响因素来估计软件开发所需的时间、精力和成本。它可以帮助项目经理和开发人员有效地规划资源并设定切合实际的时间表和预算,从而提高整体项目管理和成功率。

关于 COCOMO Model 的常见问题 - 常见问题

1. COCOMO 有多少种型号?

COCOMO 模型有三种类型:

  • 基本 COCOMO 模型
  • 中级 COCOMO 模型
  • 详细的 COCOMO 模型

2. COCOMO Model 代表什么?

COCOMO 模型代表建设性成本模型。

3. 为什么使用 COCOMO II?

COCOMO II 对于非顺序、快速且可重用的软件开发非常有用。它给出了工作和时间表的估计。它提供的估计值在最可能估计值的一个标准差内。

登录后免费查看全文
立即登录
App下载
技术邻APP
工程师必备
  • 项目客服
  • 培训客服
  • 平台客服

TOP

1