陈斌彬的技术博客

Stay foolish,stay hungry

软件规模估算之COCOMO模型应用解读

模型按其详细程度可以分为三级:基本COCOMO模型,中间COCOMO模型,详细COCOMO模型。其中基本COCOMO模型是是一个静态单变量模型,它用一个以已估算出来的原代码行数(LOC)为自变量的经验函数计算软件开发工作量。 中级COCOMO模型在基本COCOMO模型的基础上,再用涉及产品、硬件、人员、项目等方面的影响因素调整工作量的估算。详细COCOMO模型包括中间COCOMO模型的所有特性,但更进一步考虑了软件工程中每一步骤(如分析、设计)的影响。

模型中,考虑开发环境,软件开发项目的类型可以分为3种:

  1. 组织型(organic): 相对较小、较简单的软件项目。开发人员对开发目标理解比较充分,与软件系统相关的工作经验丰富,对软件的使用环境很熟悉,受硬件的约束较小,程序的规模不是很大(<50000行)

  2. 嵌入型(embedded): 要求在紧密联系的硬件、软件和操作的限制条件下运行,通常与某种复杂的硬件设备紧密结合在一起。对接口,数据结构,算法的要求高。软件规模任意。如大而复杂的事务处理系统,大型/超大型操作系统,航天用控制系统,大型指挥系统等。

  3. 半独立型(semidetached): 介于上述两种软件之间。规模和复杂度都属于中等或更高。最大可达30万行。

COCOMO模型中我们定义以下变量:

  • L——-源指令条数。不包括注释。1KDSI = 1000DSI。
  • E——-开发工作量(以人月计) 1MM = 19 人日 = 152 人时 =1/12 人年
  • D—–开发进度。(以月计)

根据以上定义,我们分别对基本COCOMO模型,中间COCOMO模型,详细COCOMO模型的应用做出解释如下:

基本COCOMO模型

  1. 我们知道,COCOMO模型是一种基于代码行估算的成本分析方法,因此我们首先估算出软件的代码行规模L(单位是kLoc,即千行代码)
  2. 然后我们根据公式 E = a*L^b , D = c*E^d 得到估算出的工作量和开发时间。其中a,b,c,d是固定的参数值,需要注意的是,对于不同类型的软件项目,参数值是不同的,如表。

img

很显然,这种方法过于粗糙,我们需要对其进行精化,因此就有了中间COCOMO模型。

中间COCOMO模型

中间COCOMO模型区别于基本COCOMO模型的地方就是对于工作量的估算,计算公式是E=a*EAF*L^b,D=cE^d,其中EAF是指工作量调节因子。EAF是根据可能影响工作量的15个因素产生的,如下,计算公式是15个参数(不同项目的各因素值是不一样的,这个是自定义的)的乘积:

img

详细COCOMO模型

详细COCOMO模型是在中间模型的又一次细化。详细模型针对每一影响因素,按模块层、子系统层、系统层,有三张工作量因素分级表,供不同层次的估算使用,而每一张表中又按开发各个不同阶段给出。如软件可靠性在子系统层的工作量因素分级表如下: img

详细模型过于繁琐,适用于大型复杂项目的估算,我们不做过多解读,其中的参数项太多。

COCOMO和COCOMOII的区别

COCOMOII是顺应现代软件开发的变化而对COCOMO做出的改进版,把最新软件开发方法考虑在内。现在还在持续的开发中,目前是美国南加州大学的教师带领一个学生团队在开发。

COCOMOII实际上是三个不同的计算模型组成的:

  1. 应用组合模型:适用于使用现代GUI工具开发的项目。
  2. 早期开发模型:适用于在软件架构确定之前对软件进行粗略的成本和事件估算,包含了一系列新的成本和进度估算方法。基于功能点或者代码行。
  3. 结构化后期模型:这是COCOMOII中最详细的模型。它使用在在整体软件架构已确定之后。包含最新的成本估算、代码行计算方法。