原文为GeeksforGeeks网站Link

分类

Cocomo(Constructive Cost Model)是基于代码行的回归模型。它是软件项目的程序成本估算模型,通常用作可靠地预测与项目相关的各种参数的过程,例如大小、工作量、成本、时间和质量。它由Barry Boehm在1981年提出,该研究基于63个工程,使他成为了记录最好的模型之一。

模型的关键参数有两个,工作量和进度。

  • 工作量: 完成单个任务所需要的人工,通常用人月来表示。
  • 进度: 完成整个工程所需要的时间,和工作量成比例。通常用时间单位表示,如周,月等。

已经提出了不同的 Cocomo 模型来根据所需的准确性和正确性来预测不同级别的成本估算。所有这些模型都可以应用于各种项目,其特性决定了在后续计算中使用的常数值。下面提到了与不同系统类型有关的这些特性。

Boehm定义了三种不同的项目类型:

  • 成熟的(Organic,本来应该翻译成有机的,但我觉得成熟的更加合适):如果所需的团队规模足够小,问题得到很好的理解并且过去已经解决,并且团队成员对问题有一定经验。

  • 半成熟的(Semi detached,翻译原因同上):如果团队规模、经验、各种编程环境的知识等重要特征介于成熟与陌生之间,则软件项目被称为半成熟类型。与成熟项目相比,被归类为半成熟的项目相对来说不太熟悉和难以开发,需要更多的经验和更好的指导和创造力。例如:不同芯片类型的嵌入式系统。

  • 陌生的(Embedded,翻译原因同上):需要最高级别的复杂性、创造力和经验要求的软件项目属于这一类。此类软件需要比其他两个模型更大的团队规模,并且开发人员需要有足够的经验和创造力来开发此类复杂的模型。

Cocomo模型按照细致程度分成三个等级:

  • 基础模型(Basic COCOMO Model)
  • 中级模型(Intermediate COCOMO Model)
  • 细致模型(Detailed COCOMO Model)

基础模型可用于快速且稍微粗略地计算软件成本。由于缺乏足够的因素考虑,其准确性受到一定限制。中级模型考虑了成本驱动,细致模型额外考虑了各个项目阶段的影响,如每个阶段的成本驱动因素,并分阶段进行计算,从而产生更精确的结果。

工作量估计的计算

  1. 基本模型

Effort=a(KLOC)bEffort = a(KLOC)^bEffort=a(KLOC)b

time=c(Effort)dtime = c(Effort)^dtime=c(Effort)d

人员需求=Effort/time人员需求 = Effort/time=Effort/time

项目类型 a b c d
成熟的 2.4 1.05 2.5 0.38
半成熟的 3.0 1.12 2.5 0.35
陌生的 3.6 1.2 2.5 0.32

上边的公式对于COCOMO的基础模型和后边的模型都适用。

基础模型的计算代码

// C++ program to implement basic COCOMO
#include<bits/stdc++.h>
using namespace std;// Function for rounding off float to int
int fround(float x)
{int a;x=x+0.5;a=x;return(a);
}// Function to calculate parameters of Basic COCOMO
void calculate(float table[][4], int n,char mode[][15], int size)
{float effort,time,staff;int model;// Check the mode according to sizeif(size>=2 && size<=50)model=0;    //organicelse if(size>50 && size<=300)model=1;    //semi-detachedelse if(size>300)model=2;   //embeddedcout<<"The mode is "<<mode[model];// Calculate Efforteffort = table[model][0]*pow(size,table[model][1]);// Calculate Timetime = table[model][2]*pow(effort,table[model][3]);//Calculate Persons Requiredstaff = effort/time;// Output the values calculatedcout<<"\nEffort = "<<effort<<" Person-Month";cout<<"\nDevelopment Time = "<<time<<" Months";cout<<"\nAverage Staff Required = "<<fround(staff)<<" Persons";}int main()
{float table[3][4]={2.4,1.05,2.5,0.38,3.0,1.12,2.5,0.35,3.6,1.20,2.5,0.32};char mode[][15]={"Organic","Semi-Detached","Embedded"};int size = 4;calculate(table,3,mode,size);return 0;
}Output:
The mode is Organic
Effort = 10.289 Person-Month
Development Time = 6.06237 Months
Average Staff Required = 2 Persons

中间模型

基本的 Cocomo 模型假设工作量只是代码行数和根据不同软件系统评估的一些常数的函数。然而,实际上,任何系统的工作量和进度都不能仅根据代码行来计算。为此,各种其他因素,如可靠性、经验、能力。这些因素被称为成本驱动因素,中间模型利用 15 个这样的驱动因素进行成本估算。

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

  1. 产品属性:

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

  1. 硬件属性

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

  1. 人员属性

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

  1. 项目属性

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

所涉及的因素参数如下表所示:

成本驱动因素 非常低 中等 非常高
产品因素:
软件可靠性需求 0.75 0.88 1.00 1.15 1.40
应用数据库的规模 0.94 1.00 1.08 1.16
产品的复杂度 0.75 0.85 1.00 1.15 1.30
硬件属性:
运行时性能参数 1.00 1.11 1.30
内存参数 1.00 1.06 1.21
虚拟环境的波动 0.87 1.00 1.15 1.30
周转时间需求 0.94 1.00 1.07 1.15
个人属性
分析能力 1.46 1.19 1.00 0.86 0.71
项目经验 1.29 1.13 1.00 0.91 0.82
软件工程师能力 1.42 1.17 1.00 0.86 0.70
虚拟机经验 1.21 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

项目经理分别针对上面的因子进行评分,并将其相乘,所取得的结果被称为努力因子(EAF)。中级COCOMO的计算公式如下:

Effort=(a(KLOC)b)×EAFEffort = (a(KLOC)^b)\times EAF Effort=(a(KLOC)b)×EAF

该公式涉及的参数值如下表:

软件项目 a b
成熟的 3.2 1.05
半成熟的 3.0 1.12
陌生的 2.8 1.20

细致模型

细致模型将中间版本的所有特征与成本驱动因素对软件工程过程每个步骤的影响的评估相结合。细致模型对每个成本动因属性使用不同的工作量乘数。在细致模型cocomo中,将整个软件分为不同的模块,然后我们在不同的模块中应用 COCOMO 来估算工作量,然后对工作量求和。

细致模型COCOMO的六个阶段是:

  • 规划和要求
  • 系统设计
  • 详细设计
  • 模块代码和测试
  • 集成和测试
  • 成本建设模型

工作量是作为程序规模的函数来计算的,并且根据软件生命周期的每个阶段给出了一组成本驱动因素。

软件工程预测模型之COCOMO相关推荐

  1. 《软件工程方法与实践》—— 导读

    <img src="https://yqfile.alicdn.com/3e3e341793012d0054d9ae32221f90deabf0b3dd.jpeg" widt ...

  2. 『软件工程6』详解软件项目管理之软件范围与估算

    软件项目管理--软件范围与估算 一.软件项目计划 1.目标 2.步骤 二.软件范围 1.软件范围定义 2.软件范围--引例 三.影响估算的因素 四.软件项目资源 1.软件项目资源构成 2.分析图 3. ...

  3. 实战项目| 7天掌握神经网络预测模型

    (新春福利文末领取,绝对干货) 做为一个软件工程师,工作了几年你有没有遇到以下情况? 工作已经有几年时间,依旧是公司的一颗"螺丝钉",工作单一没创新,工作能力得不到锻炼: 每个项目 ...

  4. 【软件工程导论题型大总结】名词解释总结

    文章目录 一:传统软件工程部分 非常重要 可以了解 二:面向对象设计部分 一:传统软件工程部分 非常重要 软件工程方法学:把在软件生命周期全过程中使用的一整套技术方法的集合称之为方法学,也称为范型 软 ...

  5. (软件工程复习核心重点)第十二章软件项目管理-第二节:进度计划

    文章目录 一:相关概念 (1)任务集合 (2)项目管理者的工作 A:目标 B:方法 (3)进度安排 A:定义 B:流程 二:估算开发时间 (1)利用成本估算模型估算开发时间 (2)特殊情况 A:描述 ...

  6. (软件工程复习核心重点)第十二章软件项目管理-第一节:软件项目管理综述、估算软件规模和工作量估算

    文章目录 一:软件项目管理综述 (1)管理 (2)软件项目管理 二:估算软件规模 (1)代码行技术 A:定义 B:方法 C:优缺点 (2)功能点技术 A:定义 B:信息域特性 C:估算功能点的步骤 ① ...

  7. 软件工程理论方法与实践

    第一章. 概述  软件是人类思维的杰作,并成为人类现代生活的催化剂.今天软件遍布整个世界,在生物工程.现代通信.宇宙探索.商务处理.工业控制等方面发挥出巨大的威力,并推动了商业.科学和工程领域的跨越式 ...

  8. 软件工程复习题-快来划重点

    文章目录 写在前面 选择题 填空题 计算题 分析题 写在前面 各校教学和考试大纲肯定有差异,此份复习总结仅作参考. 选择题 10' CMM2级过程区域有7个:需求管理.项目策划.项目监督和控制.供方协 ...

  9. 山东大学软件工程期末复习知识点总结

    山大软院软件工程期末复习知识点总结,根据任课老师所给提纲及课件等资料进行整理. 考试范围全覆盖. 文档电子版下载地址 目录 第一章 1.1软件工程(SE)的定义.目的.方法.作用: //1.2开发模式 ...

  10. 软件设计师---软件工程

    笔记有错误欢迎直接在评论区进行纠正!我将不再维护软件设计师笔记! 软件工程上午题10分+ CMM(能力成熟度模型) 真题 真题1 真题2 真题3 真题4 能力成熟度集成模型(CMMI) 能力等级0指未 ...

最新文章

  1. WKWebView的使用
  2. china-pub计算机图书最新一周排行榜
  3. 【arduino】arduino ISP下载程序方法,用arduino uno给M5 Module DC MOTOR下载程序
  4. Managing Tables
  5. leetcode-136. 只出现一次的数字解法
  6. Linux C 中断言assert()使用简介
  7. Query Layer介绍
  8. 贝壳:计算绝对值(暴力破解)
  9. 小程序复制内容至剪贴板
  10. B站校招面试官“炫耀资产、贬低应试者”?当事人发长文回应,北邮学子要求向学校道歉...
  11. Google 将于明年彻底关闭 Chrome Apps,以后就是 PWA 的天下了
  12. 机器学习—线性回归推广及案例
  13. java单链表上的选择排序_《Java数据结构和算法》简单排序选择排序
  14. 企业项目运行管理体系的实现
  15. DroidCamX – 让您的 Android 安卓手机瞬间变成电脑的高清无线摄像头
  16. 通过Kettle工具解析Json接口数据并且保存到数据库中的详细操作
  17. 国科大模式识别与机器学习课程整理
  18. 微信小程序直播如何开通
  19. 编辑,修改chm帮助文档,无需修改繁琐的html文件,可以直接编辑修改chm
  20. 王家林 构建spark集群

热门文章

  1. IPFS为什么被学者称为数据的“黄金保险柜”?
  2. OpenGL二十面体及多次细分成球体
  3. 数字 显示为LED 字体
  4. android流行ui设计,30款美丽的App UI设计作品
  5. 示例项目-京东商城图书分类排行榜抓取
  6. 微软官方帮助文档的中文网站和英文网站
  7. centos php ioncube_CentOS 7安装ionCube Loader为php解密组件的方法
  8. Theano框架学习
  9. gateface php,XAMPP下载-Xampp(PHP环境套件)V8.01 官方win版-ucbug软件站
  10. SPSS分析数据学习笔记