王养廷
(华北科技学院计算机学院,北京东燕郊 101601)
软件项目工作量估算是计算项目费用的基础,也是制定项目开发计划的依据。为了能够更加准确地估计项目工作量,许多机构和学者对这一领域进行了多年的研究,提出了许多方法。目前常用的项目工作量估算方法有专家法、类比法、COCOMO(Constructive Cost Model)模型以及功能点分析方法(Function Point Analysis)等[1-3]。在实际的项目开发中应该选择哪种方法进行项目工作量估算,应该如何进行选择。实际上每一种方法都很难对项目工作量做出准确的评估[4],特别是对于相同的项目使用不同的工作量估算方法,得到的结果可能相差甚多[5-6]。为了能够有效估计项目工作量,需要考虑项目特点和公司开发能力,综合使用各种方法来进行估算。
通过对合作公司的多个项目工作量估算结果进行分析和总结,提出了简单的三步法来估算项目工作量。第一步选择一个相对简单的模型,简化复杂的项目参数,作为估算模型;第二步选取历史项目数据作为样本数据来修改模型参数;第三步采用类比法根据修改后的模型来估算项目工作量。
在模型选择上应该考虑比较常见和通用的估算模型。可以选择基本COCOMO模型作为工作量估算模型[7-8],模型工作量估算公式见式(1):
E表示估算的工作量,单位人月;Size表示项目的规模,使用千行源代码(KLOC)表示;EAF是一个工作量调节因子。a和b是两个调节常数,基本的COCOMO给出了两个常数的取值见表1。
表1 COCOMO模型常数
表中的方式是三种开发模式,有机表示相对简单的小项目组内使用熟悉的环境进行开发;嵌入是指项目在严格约束条件下开发,需要解决的问题很少见,没有经验可以借鉴;半有机介于有机和嵌入之间。
合作公司作为一个中小软件企业,多数的开发项目都是相同类型或者是相似类型的,因此选择有机模式进行项目估算。
选择好模型后,在企业找出三个典型的、有代表性的项目作为样本项目。所选的项目是合作公司主要业务领域项目,同时也是正常执行的项目,有基本的项目数据记录。使用样本项目的数据来修正公式中的参数a和b。三个项目的代码行数和工作量见表2所示。
首先来分析常数b,这个常数代表规模的经济型是非经济,当b>1时表示规模非经济,当b<1时表示规模经济。简单说就是随着规模的增加工作量是否高于线性增加,三个项目的每个人月平均代码行数如图1所示。
从图1可以看出项目的规模增加对每个人月的平均代码数影响不大,随着代码规模的增加开发效率略下降。基本上符合基本COCOMO模型给定的常数1.05。在修正模型阶段不考虑工作量调节因子,EAF设置为1。
图1 项目规模与效率关系
使用三个项目的平均的项目规模和平均工作量可以计算出常数a,数值为0.76。修正后的工作量估算模型为式(2)
在实际项目工作量估算时,如果项目的类型与样本项目类型相似,则可以使用式(2)进行工作量估算。影响项目工作量的主要因素是规模,除此之外还有人员、技术和环境的因素。首先对项目的规模进行估算,使用式(2)计算出标准的项目工作量。接下来从人员、技术和环境三个方面分析当前项目与样本项目的不同,表3列出了这些不同的量化数据。
表3 类比系数表
表3中人员从高到低代表熟练、正常、新手;技术由高到低代表技术难度大、一般、简单;环境由高到低表示环境复杂、一般、简单。在新的项目工作量估算时把人员、技术和环境的变化作为EAF调节因子,这样与标准的项目数据进行比较,使用公式(3)进行类比就可以得到新项目的工作量估算数据。
Es是样本项目的平均工作量,Sizes是样本项目的规模,EAFs是样本项目的调节因子,我们设定样本的人员、技术和环境都是中,这样EAFs的数值取1。E是需要估算项目的工作量,Size是需要估算项目的规模,EAF需要估算项目的调节因子。使用表3提供的数据,可以计算出需要估算项目的调节因子EAF,使用式(3)计算出项目工作量。
合作公司已经在多个项目中应用该方法进行项目工作量估算。例如近期开发的一个项目,所使用的开发环境、框架以及部署环境与样本项目基本相同,不同的是项目组的人员发生了变化。按照上面方法进行工作量估算,首先估算出项目规模约为18KLOC,根据式(2)计算出估算工作量为15.8人月。
假设样本项目组都是正常的项目组成员,对应系数为1。与样本项目组相比5成员中1个是熟练,2个正常,2个新手。项目组平均系数使用公式(4)进行计算,结果为1.2。
M是项目组平均人员系数,Mi是每个项目组成员的人员系数,n是项目组人数。由于项目组的技术和环境因素基本相同,使用M作为公式(3)中的EAF,得到公式(5)。
Es是上面公式(2)的计算结果,M是公式(4)的结果,作为工作量调节因子,带入式(5)进行后计算得到新项目工作量估算数值为19人月。按照这个估算数据制定项目开发计划,项目实际的开发工作量与估算的相近,并基本上按照计划完成的项目开发工作。
如果项目组的人员、技术和环境因素都存在不同,可以使用表3中的数据,参考式(4)可以计算出样本项目调节因子EAF,计算方法如式(6)所示。
EAF项目调节因子,M是人员系数,使用公式(4)进行计算;T是技术系数,取值见表3;Env是环境系数,取值见表3。
本文提出的工作量估算方法是在分析和总结实际项目工作基础上提出的,并在合作公司软件项目中得到了应用,比较准确地估计了开发项目的工作量;该方法简单易行,客户易于理解和接受,得到了公司和客户的认可。但是该方法有一个限制条件,要求估算工作量的项目与样本项目是相同或相似类型的项目。对于多数的公司或项目组,一段时间内所开发的项目基本上都是相同类型的,因此该方法对其他公司的项目工作量估算也有参考价值和借鉴意义。
[1] Yeong-Seok Seo,Doo-Hwan Bae,Ross Jeffery.AREION: Software effort estimation based on multiple regressions with adaptive recursive data partitioning.Information and Software Technology[J].2013,55(10):1710-1725.
[2] Nan-Hsing Chiu,Sun-Jen Huang.The adjusted analogybased software effort estimation based on similarity distances. Journal of Systems and Software[J].2007,80(4):628-640.
[3] 付雅芳,杨任农,刘晓东,王琳.基于灰色关联分析的软件工作量估算方法[J].系统工程与电子技术,2012,34(11): 2384-2389.
[4] Ashish Sharma,Dharmender Singh Kushwaha.Estimation of Software Development Effort from Requirements Based Complexity.Procedia Technology[J].2012,4:716-722.
[5] 唐林燕.COCOMO估算模型改进研究[J].微电子学与计算机,2006,23(12):58-60.
[6] 马剑.软件开发工作量估算模型研究及其在项目管理的应用[D].华北电力大学,2011.
[7] Barry W.Boehm.Software Engineering Economics[M].Englewood Cliffs,NJ:Prentice-Hall,1981.
[8] 赵玮.软件工程经济学[M].西安:西安电子科技大学出版社,2008.