基于敏捷开发项目工作量的估计方法研究
2014-09-08沈春元
沈春元 ,陆 峻
(1.海军驻南京地区雷达系统军事代表室,南京210003; 2.中国船舶重工集团公司第七二四研究所,南京211153)
基于敏捷开发项目工作量的估计方法研究
沈春元1,陆 峻2
(1.海军驻南京地区雷达系统军事代表室,南京210003; 2.中国船舶重工集团公司第七二四研究所,南京211153)
敏捷开发是当前非常流行的一种软件开发方法,而常用的软件工作量估计方法针对敏捷开发项目效果并不好。为能准确估算出敏捷开发项目的工作量,研究一种基于神经网络工作量估算模型,以适用于敏捷开发项目的工作量估计。
敏捷开发;工作量估计;神经网络
0 引 言
“软件危机”是在上世纪60年代末在第一届北大西洋公约组织软件工程会议上首次出现的。产生“软件危机”的主要原因之一是:对软件开发成本、所耗费的资源以及软件开发所需时间的估算准确程度不能满足实际的需要。经过近半世纪的岁月,“软件危机”这个术语所蕴涵的软件项目超时、超支等问题依然困扰着软件行业[1],究其原因,软件项目估算不准确与需求不稳定是最普遍的两个原因[2]。
软件估算是对软件项目成本、开发时间以及工作量等的估测,其活动贯穿于软件项目开发的各个阶段。软件估算是软件项目管理的关键组成部分。软件项目估算的准确与否事关软件项目的成败。尤其是在软件项目的早期,准确可信的软件估算显得尤为重要。比如,软件项目的可行性、接下来项目的总体规划和计划以及各种资源的分配等都离不开对项目的估算。由于软件开发是个渐进的过程,在软件项目的早期对该软件认识还比较模糊,加上影响软件开发的因素也比较多,只有随着项目的进展对软件项目的认识才逐渐清晰,对其影响因素才逐渐明确。因此,影响软件准确估算的参数也是由不确定变动大到确定变动小的逐渐明确的过程[3]。
软件项目工作量估计从项目的功能需求定义开始,首先对软件规模进行估计,估计源代码行数(SLOC)和文档页数,再以软件规模估计为基础估计项目的工作量和成本,最后安排进度。对项目来说,工作量是项目中主要的成本内容,所以大部分情况下不必再额外估计成本。在软件开发过程中,一直存在软件的不可知性、工作量难以量化、需求难以确定等诸多问题。这些问题导致了难以对软件的工作量进行精确的估计。所以,软件开发项目的工作量估计问题也成为了软件工程中非常重要且亟须解决的问题。在开发之前,如果对软件的开发工作量有一个可靠而精确的估计,可以帮助软件开发管理者更有效地控制开发时间和预算。而没有进行估计或者估计偏差较大,将会导致项目的延期,甚至是失败。那么,软件工作量估计作为软件项目开发计划编制的依据也就变得越来越重要。
1 早期基于算法模型的软件工作量估计
1.1 Putnam 模型
1978年Putnam提出了一种动态多变量模型,假定在软件开发的整个生存期中工作量有特定的分布。这种模型是依据在一些大型项目(总工作量达到或超过30人年)中收集到的工作量分布情况而推导出来的,但也可以应用在一些较小的软件项目中。
L=Ck*K1/3*td4/3
其中,L为源代码行数(以LOC计) ,K为整个开发过程所花费的工作量(以人年计),td为开发持续时间(以年计),Ck为技术状态常数,它反映了“妨碍开发进展的限制”,取值因开发环境而异。Ck典型取值见表1。
表1 技术状态常数Ck典型取值
从上述方程加以变换,可以得到估算工作量的公式:
K=L3/(Ck3*td4)
还可以估算开发时间:
td=[L3/(Ck3*K)]1/4
1.2COCOMO模型(constructivecostmodel)
COCOMO模型又为构造性成本模型。它是由巴里·勃姆(Barry Boehm)提出的一种基本的回归分析公式,使用从项目历史和现状中的某些特征作为参数来进行计算。
COCOMO由3个不断深入和详细的层次组成。第一层,“基本COCOMO”,适用对软件开发进行快速、早期地对重要的方面进行粗略的成本估计,但因其缺少不同的项目属性(“成本驱动者”)的因素,所以准确性有一定的局限性。“中级COCOMO”中考虑进了这些成本驱动者。“详细COCOMO”加入了对不同软件开发阶段影响的考量。
COCOMO这3 个等级的模型也都满足下列公式,即
Effort=a×(KDSI)b×F
其中,Effort为工作量,表示为人月;a和b为系数,具体的值取决于建模等级(即基本、中等或详细)以及项目的模式(即组织型、半独立型或嵌入型)。这个系数的取值先由专家意见来决定,然后用COCOMO数据库的项目数据来对专家给出的取值再进一步求精。KDSI为软件项目开发中交付的源指令(delivered source instruction,简称DSI)千行数,也有用代码行(line of codes,简称LOC)表示,代表着软件规模。F是调整因子,基本COCOMO模型中,F=1,后两个模型中F为15 个成本因子对应的工作量乘数的乘积。
1.3 早期算法模型的缺点
Putnam 模型和COCOMO 模型属于比较早期的模型,适合于瀑布式生存周期的软件开发方法。随着面向对象开发方法和敏捷开发方法等的出现,早期的模型已不再适合于软件工作量估计和过程管理的需要。于是,针对目前主流开发方法的估计模型的研究日益迫切。
2 基于敏捷开发的软件工作量估计模型
敏捷开发是当前非常流行的一种开发方法,而目前对敏捷开发项目的工作量估计主要存在以下两个问题:第一,工作量估计的重视程度不够。在制定开发计划之前只是作粗糙的估计,或者根本不作估计,以合同给定的时间来制定软件产品的开发计划;第二,没有针对敏捷开发项目的工作量估计工具。目前,对软件工作量的估计主要有Wideband Delphi估计法、类比估计法、功能点估计方法等。而针对敏捷开发项目,使用这些估计方法的效果并不好。所以,往往凭项目管理者的经验进行估计,估计结果也根据管理者的不同而不同,并不能为项目计划的制定提供准确有效的数据支持。
由于常用的工作量估计方法对敏捷开发项目的估计效果不好,且没有一个针对敏捷开发项目的工作量估计工具,所以本文提出了一种基于人工神经网络的工作量估计模型来解决这一问题,将使用敏捷开发方法的项目进行工作量估计,并获得工作量估计服务。
利用软件估算模型进行高度准确性的估算,离不开历史数据的支持。从早期基于算法模型的工作量估算来看,都需要利用历史数据对其中的因子参数进行校正调整;基于类比的估算是对新项目和历史项目进行比较,以此找出和新项目特征最匹配的历史项目,进而对新项目进行估算。而基于人工神经网络的工作量估计模型同样也需要历史数据的支撑,好在国际软件基准组织ISBSG (International Software Benchmarking Standards Group)提供的数据集是从各个国家收集的真实软件开发项目数据,可为估计模型提供数据支撑。
2.1 ISBSG 数据集
ISBSG数据集是行业内比较著名的公开数据集,其中包括了由国际软件基准组织收集的3000多个项目。但是,由于该数据集并不完整,许多项目的属性缺失,因此采用其中属性值完整的502个项目组成的子集进行研究。通过对ISBSG 数据集的研究,并结合实际软件项目特点选取软件开发过程中影响工作量估计的9个因子作为基础数据,即功能点、生产率、开发类型、组织类型、团队规模、应用领域、开发平台、编程语言和开发技术等。
2.2 基于 BP 神经网络的工作量估算模型
工作量估算模型选取三层BP 神经网络,其拓扑结构包括输入层、隐藏层和输出层。在本模型中输入层的神经元的个数为 9 个,而只有一个工作量的输出,所以输出层的神经元个数为 1 个。图1所示为面向敏捷开发项目的工作量估算模型的三层结构图。
图1 工作量估算模型
图1中,X1~ X9 分别代表功能点、生产率、开发类型、组织类型、团队规模、应用领域、开发平台、编程语言和开发技术9 个因子的输入数据,经权值矩阵W加权求和后传入隐藏层,通过sigmoid 函数的作用的输出数据,经权值矩阵V加权求和后,同样通过sigmoid 函数的作用输出工作量估算数据effort,然后与真实工作量进行比较,根据最小均方误差方法不断调整权值矩阵W和V的值,直到满足停止条件。
(1) 网络初始权值的设计
网络权值的初始化决定了人工神经网络的训练初始状态,为避免网络训练不会从误差曲面上某个局部极小点开始,权值矩阵的初始值使用(0,1) 之间的随机值赋值。
(2) 网络训练算法的设计
训练算法选择最小均方误差,输入数据为影响因子与工作量成对提供到网络,所以根据网络计算输出的实际工作量与期望输出的工作量之间误差信号,通过逐层向后传播调整权值,使得实际工作量与期望输出的工作量之间误差越来越小。权值的调整算法通常采用梯度下降算法,即沿着误差曲面下降最快的方向调整权值。
(3) 网络终止训练条件的设计
设置两个可以停止训练的条件,首先是模型的精度,也就是误差的大小,在本模型中最大误差设置为 0.05,即当模型的误差总和小于 0.05 时即可停止训练网络。
2.3 工作量估算模型的训练
根据以上对工作量估算模型的设计,首先对输入、输出数据进行处理,然后将整个样本数据集输入到网络中去,保证神经网络是从整个样本数据集中学习知识,而不是逐个学习单个样本的知识。采用最小均方误差方法调整网络的权值参数,当总误差满足精度要求时,停止训练,得到神经网络模型的各个参数,也就确定了该工作量估算模型。 图 2 所示为整个模型的实现算法流程图。
该模型的算法实现步骤如下所述:
(1) 权值初始化,输入层与隐藏层之间的权值矩阵用V表示,而隐藏层到输出层之间的取值矩阵用W表示,对权值矩阵W、V初始化为0~1之间的随机数,样本计数器p=1,样本总个数P,样本总误差E赋为0,网络学习率赋值为0~1之间的小数,网络的训练精度Emin设置为0.05;
(2) 首先对训练样本集进行归一化处理,然后输入待训练的样本对,并计算各层的输出;
图2 实现算法流程图
(3) 计算网络的输出误差,根据每个样本的实际输出与期望输出,可以得出网络的输出误差;
(4) 计算网络隐藏层和输出层误差信号;
(5) 调整网络隐藏层和输出层权值;
(6) 检查是否所有样本完成一轮训练。若p
(7) 检查网络是否满足精度要求。当满足精度要求时,即E 当训练结束后即可确定神经网络的各部分信息,包括各层的神经元节点,输入层到隐藏层之间的权值矩阵,以及隐藏层与输出层之间的权值矩阵,然后利用该神经网络对其他输入数据进行计算。 本模型与几种常用估算方法的优缺点对比表如表2所示。 表2 本模型与常用估算方法优缺点对比 本文研究了基于敏捷开发的软件工作量估计模型,通过对敏捷开发项目数据集的分析和训练学习,得出对应敏捷开发项目的影响因子和工作量估算模型,针对性强,估算精度高。分析认为可大大提高了敏捷开发项目工作量估算的准确性。 [1] Hughes Bob,Cotterell Mike.软件项目管理 [M].廖彬山,王慧译.4版.北京:机械工业出版社,2007. [2] Swapna Kishore,Rajesh Naik.软件需求与估算[M].姜路,柳剑锋,丁一夫,译.北京:机械工业出版社,2004. [3] Little Todd.Schedule estimation and uncertainty surrounding the cone of uncertainty[J].Ieee Software,2006,23(3):48-54. Research on effort estimation method based on agile development projects SHEN Chun-yuan1,LU Jun2 (1.Military Representatives Office of Radar System of the Chinese PLA Navy in Nanjing, Nanjing 210003; 2.No.724 Research Institute of CSIC, Nanjing 211153) Agile development is currently a very popular software development method, but commonly-used software effort estimation methods for agile development projects are not good. In order to accurately estimate the workload of agile development projects, an effort estimation model based on neural networks is studied for agile development project applications. agile development; effort estimation; neural networks 2013-11-12; 2013-12-10 沈春元(1965-),男,高级工程师,研究方向:雷达及指挥控制系统;陆峻(1976-),女,高级工程师,研究方向:计算 机软件工程化。 TP306 A 1009-0401(2014)01-0065-043 估算方法比较
4 结束语