1. 引言
随着信息时代、知识经济时代的到来,计算机行业发展迅速,软件产品已经渗入到人们的生活、工作、学习当中。但随着软件规模越来越大,软件复杂度也不断增加,导致在上个世纪60年代中期,爆发了严重的软件危机。世界范围内大量软件项目不能按期完成或者被迫取消,很多项目虽然完成但严重超支。例如,2014年投资8.4亿美元的美国健康医保网站超支1.63亿美元且交付日期拖延半年后仍无法正常运行。出现如此严重问题的一个重要原因是对软件成本估算不足,或在项目早期所做的总成本预测随着项目的进展变得越来越不实际 [1] 。因此,为减少软件失败造成的巨大损失,除了要对项目总成本进行估算外,还需要在开发过程中对项目的阶段成本进行预测,使项目在规定的时间和预算内完成。
软件成本估算是指根据软件项目的计划以及其他影响因子的信息,进行估算和确定各项活动的成本以及总成本的软件项目管理活动 [2] 。软件阶段成本的估算是指对开发过程中每个阶段的成本进行估算。由于在软件实际开发过程中,项目经理一般是按周、月或季度等物理时间来记录工作量,管理软件开发过程。因此本文采用月作为阶段单位,例如,整个项目持续了10个月,则我们称该项目共有10个阶段。
科学合理的估算软件项目的阶段成本,有助于项目管理人员来决定每个活动阶段的成本,进而决定软件各开发阶段的人员分配及工作计划。在开发过程中动态地预测各阶段的成本,还可以使项目管理人员发现可能出现的成本进度方面的问题,提前采取措施,减少不必要的损失。
目前,大部分的研究者的关注点在总成本预测上,对总成本预测的方法和模型已经有很多研究成果 [3] - [9] ,但对于软件项目阶段成本的预测的研究非常少 [10] [11] [12] 。MacDonell等人通过建立线性回归模型,根据项目前期阶段的成本来预测后面开发阶段的成本,对16个类似软件项目的任意两个开发阶段成本做相关性检验,选择相关程度较大的两个开发阶段建立回归模型。例如,对计划和测试阶段建立了回归模型,根据前者的成本数据预测了后者的成本 [10] 。王勇等人提出GV(GM (1,1)和Verhulst相结合)方法用来预测软件阶段成本,根据软件项目阶段成本序列的凹凸性来动态构建模型,进而预测后续阶段的成本 [11] 。与本文研究不同的是,MacDonell的研究针对软件生命周期阶段,如设计、编码阶段等,而本文的阶段是以物理时间如月为单位。王勇等人的研究 [11] 使用了GM (1,1)和Verhulst的新陈代谢模型,但模型的初始条件始终是建模序列的第一个元素。本文对初始条件进行了改进,提出了一种新的软件阶段成本预测方法IGM,研究结果表明,IGM具有比对比方法更好的预测性能,显示出一定的潜力。
2. 改进的新陈代谢GM (1,1)模型
2.1. 新陈代谢GM (1,1)模型
GM (1,1)模型主要用来模拟准指数序列,其预测原理为:是将无规律或规律性不强的的原始数据进行累加,得到规律性较强的准指数序列后建模。将建模生成的模拟序列进行累减后得到原始序列的模拟值 [13] 。
在利用灰色模型建模的过程中,随着时间的推移,系统逐渐发生变化,老的数据已不能反映当前系统的特征。所以在建模时,引进新信息的同时要将老信息去除,这样得到的模型称为新陈代谢模型 [14] 。其概念为:
设原始序列
置入最新信息
,去掉最老信息
,称用
建立的模型为新陈代谢灰色模型。
具体的建模过程为:
步骤1:设原始序列
,通过一次累加运算之后生成的累加序列(1-AGO)为:
。
其中:
(1)
的均值生成序列为:
(2)
其中:
(3)
步骤2:建立灰微分方程:
(4)
其中,a为发展系数,b为灰色作用量。
式(4)的白化微分方程为
(5)
步骤3:求参数向量
对于式(5)中的参数向量
利用最小二乘法估计得
(6)
其中:
,![](//html.hanspub.org/file/1-2690258x24_hanspub.png)
步骤4:求解方程
继续求解微分方程(5),得到:
(7)
其中:C为待定常数。
为求解常数C,需要选定一个初始值,假定
,则有
![](//html.hanspub.org/file/1-2690258x27_hanspub.png)
(8)
代入式(7)得
(9)
则传统GM (1,1)模型的时间响应式为
(10)
步骤5:再求出模型的还原数据![](//html.hanspub.org/file/1-2690258x31_hanspub.png)
(11)
2.2. 改进的新陈代谢GM (1,1)模型
传统的GM (1,1)模型公式如式(10)中始终存在
,这就等于让拟合曲线必须过点(1,
)。最小二乘的原理并不要求拟合曲线过第一个数据点,针对初始条件的选取,党耀国等人按照灰色系统理论中新信息优先原理,选取最新点即
的最后一个分量
作为初始条件 [15] 。这个改进在一定的条件下可以提高预测精度,但由于最小二乘拟合的曲线理论上并不要求通过某一个点,所以本文提出了一种更全面的初始条件选择方法。依次选取累加序列
中的各元素作为初始条件,在训练集上建模,选择其中误差最小的元素
作为初始条件,在测试集上预测,这个元素所在的位置索引
记为I。
设
如传统GM (1,1)模型所定义,取误差最小的元素
作为初始条件,则灰微分方程
的白化方程
的时间响应式为:
(12)
还原值为:
(13)
称式(12)和(13)为改进的新陈代谢GM (1,1)模型,即IGM (1,1)模型。
3. 基于改进的新陈代谢GM (1,1)模型的软件阶段成本预测过程
本文中利用改进的新陈代谢GM (1,1)模型即IGM (1,1)模型来建模预测软件项目阶段成本,并使用误差补偿的技术来提高预测精度,并将该软件阶段成本的预测方法称为IGM方法。
利用IGM方法预测软件项目阶段性成本的基本过程为:
1) 选取建模子序列;
2) 对建模序列进行光滑性处理;
3) 在训练集上用IGM (1,1)模型建模预测,得到误差最小的I和误差补偿值;
4) 在测试集上,以I所在的元素为初始条件,建立IGM (1,1)模型并预测;
5) 用误差补偿值来修正预测结果,得到最优预测值和预测误差。
在本文真实的数据集上预测过程如图1所示:
下面将详细介绍建模子序列的选取、数据的光滑性处理、建模预测、求误差补偿值、测试集的建模预测及误差补偿、计算预测误差的过程。
![](//html.hanspub.org/file/1-2690258x46_hanspub.png)
Figure 1. The prediction process of IGM method
图1. IGM方法的预测过程
1) 选取建模子序列
在本文的软件项目月工作量预测中,由于在软件开发的前期工作量数据较少,所以我们只选择3个月的工作量数据建模。当有新数据加入时,就舍弃最老的一个数据,始终保持使用最近3个阶段的数据,形成滚动预测。
例如,某一个项目的规模为
个月,则需要对
个工作量数据转变成
的矩阵形式,对矩阵中每一行的前三个数据进行建模,利用第四个数据来验证误差大小。
假设一个持续时间为
个月的项目工作量序列为:
,将其转变成的
的矩阵为:
![](//html.hanspub.org/file/1-2690258x53_hanspub.png)
2) 建模序列的光滑性处理
原始数据序列是影响灰色模型预测精度的重要因素之一。过于离散的数据直接建模,一般不容易拟合而造成预测误差很大。所以要对建模序列进行光滑性处理,光滑性处理可以减少序列中的噪声波动。采用的方法为
阶移动加权平均,它对数据序列有修匀和平滑的作用。
假设原序列为
,经过光滑性处理后的序列为:
![](//html.hanspub.org/file/1-2690258x56_hanspub.png)
3) 建模预测
对经过光滑性处理的建模序列在训练集上运用IGM (1,1)模型进行建模预测,得到误差最小的I。
4) 求误差补偿值
对训练集中每个项目的每一个建模子序列进行建模预测,并计算出每一次预测的偏差,将训练集中所有的项目都按此过程操作一遍。最后,将所有的偏差值排序,为排除极值的影响,舍弃偏差序列头尾的10%,将中间的80%求出均值作为误差补偿值
。
5) 在测试集上建模预测及误差补偿
在测试集中,用I所在的元素作为初始条件建模预测并利用训练时得到误差补偿值
来修正预测结果,得到最优预测。
。
6) 计算预测误差
对测试集中的每个项目的每个建模序列求出预测误差,每个项目的预测误差是该项目中所有建模序列预测误差的平均值。该数据集的预测误差为所有项目预测误差的均值。
4. 实验与结果分析
为了检验IGM方法的实用性,本文将IGM方法应用在三个不同工业类型项目的数据集上进行了验证。
(1) 数据集。本文使用的数据集来自EDS公司,共包括14000多个真实的软件工程项目,是世界上最大的软件工程数据集之一。数据来自30多个国家和地区,包括美国(56.7%)、澳大利亚(7%)、瑞士(5%)、加拿大(4.6%)等,开发语言130多种,有COBOL (10.9%)、JCL (9.4%)、SQL (5.2%)、Visual Basic (4.5%)等,并涉及多个工业类型,有金融、制造、运输等。研究中我们把项目按工业类型分类,以其中最典型的3个数据集为代表进行实验。由于本实验需要用连续的3个月的成本数据建模,预测第4个月的成本,因此小于或等于3个月的项目因数据不足,将从数据集中删除。各实验数据集的项目数量如表1所示。
(2) 确认方法。本实验采用交叉验证中的Hold-Out方法。将每个数据集的项目随机均分为五份,选取其中的四份作为训练集,剩余的一份作为测试集。首先对训练集上的每个项目用IGM方法预测,并求出误差最小的I和误差补偿值,在测试集中,以I所在的元素作为初始条件,建立IGM (1,1)模型预测,并利用误差补偿值对预测结果进行修正,得到最优预测。
(3) 评估标准。本文为验证IGM方法的性能,使用在软件成本预测领域通常用到的MMRE、Bias两种指标作为评价标准。
表示预测值与真实值之间的偏离程度,对被预测值
,对应的
定义如下:
(14)
其中,
为真实值,
为预测值,
越接近0,表示预测的精度越高。
相对误差(Magnitude of Relative Error, MRE)定义如下:
(15)
多次预测的平均相对误差(Mean Magnitude of Relative Error, MMRE)定义如下:
(16)
(4) 基准方法。为了比较IGM方法的性能,在实验中采用其他三种方法作为基准方法进行相同的实验。基准方法一:采用传统的新陈代谢GM (1,1)模型,记为GM1;基准方法二:采用王勇等人提出的GV方法;基准方法三:采用MacDonell在 [10] 中用到的线性回归(LR)模型。四种方法均在相同的数据集上进行实验。
(5) 实验结果。四种方法所得到的MMRE和Bias两项指标的值,分别列在表2,表3中。
![](Images/Table_Tmp.jpg)
Table 1. The number of items per data set
表1. 各数据集的项目数量
![](Images/Table_Tmp.jpg)
Table 2. The MMRE of four methods on different data sets
表2. 四种方法在不同数据集上的MMRE
![](Images/Table_Tmp.jpg)
Table 3. The Bias of four methods on different data sets
表3. 四种方法在不同的数据集上的Bias
实验结果显示,在3个数据集上,IGM方法相比其他三种方法取得了更好的预测精度。从表2的MMRE指标来看,IGM方法在3个数据集上都表现出一定的优势,表现全部优于其余三种方法。相比其他三种方法,MMRE最少降低了20.96%,2.11%,10.35%。其中数据集2上四种方法得到的MMRE都比较大,检查数据发现原始数据序列有异常波动,导致预测误差偏大。从表3的Bias指标来看,IGM方法在数据集2上优势明显,均优于其他三种方法。在数据集1上,IGM方法的Bias值比GM1略差,但相差不多,只有0.06%。在数据集3中,GV与IGM两种方法的Bias指标取值接近,GV比IGM低0.22%,略占优势。
总体来看,在本文的3个数据集上,IGM方法在MMRE和Bias两个指标上都取得了较好的成果,均超过了传统的新陈代谢GM (1,1)模型,GV方法,LR模型,有较大的潜力。
5. 结论
本文对传统新陈代谢GM (1,1)模型进行了改进,动态选择模型初始条件,并提出了一种软件项目阶段成本的预测方法IGM。在3个大规模软件工程数据集上进行了验证,实验证明IGM方法优于传统的新陈代谢GM (1,1)模型、GV方法、LR模型,显示出较好的预测性能,可作为软件阶段成本预测的一种可选方法。
基金项目
本论文得到国家自然科学基金面上项目(61170312)及软件工程国家重点实验室开发基金项目(SKLSE2012-09-14)的支持。