一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于多层迭代的软件维护规模预测方法与流程

2022-03-09 06:48:14 来源:中国专利 TAG:


1.本发明属于软件工程领域,具体涉及到一种基于多层迭代的软件系统的维护规模的预测方法。


背景技术:

2.软件维护是任何软件开发生命周期中不可或缺的阶段,该阶段在软件交付给客户后即开始。软件维护是成本最高的软件开发阶段,有时甚至会消耗总开发成本的近60-70%,具体取决于所考虑系统的复杂性。软件维护规模是指软件维护过程中代码修改规模,如纠正错误、删除过时代码、添加新代码等,是评估软件质量的最重要属性之一。软件质量可以通过在开发的早期阶段预测维护规模来提高。然而,在早期阶段预测软件维护规模非常困难,并且由于软件系统维护行为的复杂性,该领域的研究仍然未得到很好的结果。
3.近年来,在该领域的研究者已经研究并开发了许多软件维护规模的预测模型,包括使用传统的机器学习方法如决策树、贝叶斯网络、svm等,以及各种深度神经网络的算法如循环神经网络、模糊神经网络等,一般对于提高模型的精确度使用了10-fold交叉验证的方式,并使用mre、mmre、pred(25)(mre的值小于25%的概率)等来对模型的精确度进行评估。这些方法对维护规模的预测并没有产生很好的效果,其中包括数据集的获取以及预处理都不是很理想,对于不平衡的数据没有很好的处理方法。


技术实现要素:

4.为了克服上述现有技术的不足,本发明提出了一种基于多层迭代的软件维护规模的预测方法,结合归一化数据预处理技术,可以很好的提高模型的软件维护规模的预测能力。
5.本发明具体采用的技术方案如下:
6.一种基于多层迭代的软件维护规模预测方法,包括如下步骤:
7.s1.数据获取:获取一个现有公开软件系统中所有可用的类,记为训练数据集tr;
8.s2.度量因子选择:获取训练数据集tr中的各类的原始度量值,
9.s3.度量归一化处理:
10.s4.训练数据采样:将归一化后的训练数据集lm

train
的数据随机均分为10份,取其中1份作为验证集剩余9份作为训练集
11.s5.构建并训练多层迭代的预测模型:
12.构建基于gmdh方法的多层迭代的预测模型,在训练预测模型的过程中将其每一层的输出通过择优后,作为下一层的输入,不断迭代,根据终止准则停止训练,得到最终训练好的预测模型;
13.s6.通过训练好的多层迭代的预测模型完成软件维护规模的预测。
14.进一步的,度量包括:wmc、noc、lcom、dit、rfc、mpc、nom、dac、size1、size2,并选择各类不同版本之间的代码修改行数change(包括增加、删除和更改的行数)作为软件维护规
模的指标,其中各个度量含义如下:
15.wmc:类中所有方法的圈复杂度总和;
16.noc:类直接子类的数量;
17.lcom:类中不相交的方法集数量;
18.dit:类在继承层次结构中的位置;
19.rfc:类方法数与类调用方法数之和;
20.mpc:类中定义的方法被其他类调用的次数;
21.nom:类中方法的数量;
22.dac:类中定义的抽象数据类型数;
23.size1:类中纯代码的行数;
24.size2:类中属性数和方法数的总和;
25.change:类两个版本之间更改代码行数,包括新增、删除和修改的代码行数;
26.记训练数据集tr的类度量集合lm
train
={m1,m2,...,m
l
,..,mn},n代表类的数量,m
l
=<wmc,noc,lcom,dit,rfc,mpc,nom,dac,size1,size2,change>;
27.进一步的,s3具体方法如下:
28.对训练数据集tr的类度量集合lm
train
进行归一化处理,得到归一化后的训练数据集lm

train
=[m1′
,m2′
,...,m
l

,...,mn′
],其中],其中不失一般性,记是度量值xj归一化后的值,归一化处理的公式如下:
[0029][0030]
其中xj代表原始度量值,x
max
、x
min
分别是xj对应的lm
train
中该类度量值中的最大值和最小值;
[0031]
进一步的,s5具体步骤如下:
[0032]
s5-1.第1层预测模型训练:
[0033]
将归一化后的训练集的每一个m
l

中元素作为自变量,将作为因变量软件维护规模(即change)的实际值;其训练方式为:将进行两两组合,将每一种组合的两个元素和代入以下的预测公式,并将作为实际值代入预测公式中的y,使用widrow-hoff学习规则计算得到组权值:
[0034][0035]
其中y是输出值,表示软件维护规模(即change),a0,a1,a2,a3,a4,a5是权值;
[0036]
再将组权值代入上述预测公式,得到个候选中间模型;
[0037]
s5-2.第1层预测模型验证:
[0038]
将验证集输入由s5-1得出的候选中间模型,输出软件维护规模(即
change)的预测值,将其与对应的输出软件维护规模(即change)的真实值计算出每一个候选中间模型的平均相对误差值mae,获得mae集合e,并将当前层最小mae作为当前层准则值w1,每一个候选中间模型的平均相对误差值mae的计算公式如下:
[0039][0040]
其中,m为验证集类的数目,yi′
为验证集软件维护规模(即change)真实值,为对应的模型预测值;
[0041]
s5-3.第1层预测模型择优:从mae集合e中选取10个最小mae值对应的候选中间模型作为择优模型,连接到预测模型的下一层;
[0042]
s5-4.多层迭代训练预测模型:根据步骤s5-1~s5-3的方法不断地重复进行训练,即在第k(k=2,3...,表示当前训练的层数)层预测模型的训练中,取第k-1层输出的择优模型作为输入,按照s5-1将输入两两组合,计算出每一种组合的权值,将权值代入预测公式得出候选中间模型;按照步骤s5-2将验证集输入候选中间模型,得到相应的预测值,根据s5-2的公式计算每一个候选中间模型的mae,并将当前层最小mae值作为当前层准则值wk;对候选中间模型进行模型择优,若在第k层候选中间模型中,候选中间模型的mae值小于w
k-1
的数量多于10个,则选取mae值最小的10个候选中间模型作为择优模型连接到预测模型的下一层,反之将mae值小于w
k-1
的所有候选中间模型作为择优模型连接到预测模型的下一层;
[0043]
s5-5.预测模型的训练终止准则:
[0044]
当当前层候选中间模型的最小mae值大于前一层准则值,停止训练过程,选取前一层择优模型中准则值对应的模型作为预测模型的最终层;
[0045]
当当前层仅有一个候选中间模型且该候选中间模型mae值小于等于前一层准则值时,停止训练过程,选取当前候选中间模型作为预测模型的最终层;
[0046]
s5-6.训练得到最终的多层迭代的预测模型;
[0047]
进一步的,s6具体方法如下:
[0048]
对于一个新的软件系统,按步骤s2获得类度量集合lm
test
,按步骤s3进行归一化处理获得归一化后的训练数据集lm

test
,再将归一化后的训练数据集lm

test
输入由s5训练得到的预测模型中,得到软件维护规模的预测值,并根据s3的归一化公式反推预测值的原始值,获得的原始值即为该软件系统包含的各个类的下一个版本的代码修改行数的预测值。
[0049]
本发明的有益效果:
[0050]
本发明通过设计多层迭代模型不断排除预测效果不好的中间层模型,最终获得比较精确的软件维护规模的预测模型。使用本发明提出的方法预测软件维护规模,最终得到了较好结果。其中对于同一属性类与类之间、类的各个属性之间数据的不平衡问题,本发明使用归一化来减小差距,对训练集使用10-fold交叉验证。最终该方法较准确地预测了软件的维护规模,即获得预测结果的mmre值较小,pred(25)值较大。
附图说明
[0051]
图1为本发明实施例流程图;
[0052]
图2为基于多层迭代软件维护规模预测模型网络具体示例图;
[0053]
图3为本发明预测与真实结果对比图;
[0054]
图4为本发明与其他方法对比图;
具体实施方式
[0055]
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图对本发明进行进一步详细说明。
[0056]
如图1所示,一种基于多层迭代的软件维护规模预测方法,包括如下步骤:
[0057]
s1.数据获取:使用ckjm-extended工具获取一个现有公开java软件系统中所有可用的类,记为训练数据集tr;
[0058]
s2.度量因子选择:使用ckjm-extended工具获取各类中的原始度量值,度量包括:wmc、noc、lcom、dit、rfc、mpc、nom、dac、size1、
[0059]
size2,并使用beyond compare工获取不同版本之间的代码修改行数change(包括增加、删除和更改的行数)作为软件维护规模的指标,其中各个度量含义如下:
[0060]
wmc:类中所有方法的圈复杂度总和,将方法绘制成控制流图,圈复杂度为图中线性无关的路径条数,计算公式为
[0061]
v(g)=e-n 2p
[0062]
其中e表示控制流图中边的数量,n表示控制流图中节点的数量,p表示控制流图中连通图个数,因为控制流图都是连通的,所以p为1;
[0063]
noc:类直接子类的数量;
[0064]
lcom:类中不相交的方法集数量。此处同一方法集中任意两个方法至少共用一个变量;
[0065]
dit:类在继承层次结构中的位置。将软件中所有类映射成类的树形结构,根节点类无父类,其dit值为1,处于第n层类的dit值为n;
[0066]
rfc:类方法数与类调用方法数之和;
[0067]
mpc:类中定义的方法被其他类调用的次数;
[0068]
nom:类中方法的数量;
[0069]
dac:类中定义的抽象数据类型数;
[0070]
size1:类中纯代码的行数,由于一行代码用分号作为结尾,所以使用非注释中的分号个数来计算代码行数;
[0071]
size2:类中属性数和方法数的总和;
[0072]
change:类两个版本之间更改代码行数,包括新增、删除和修改的代码行数,其中删除或者增加操作都计算为1,修改操作由于包含删除和增加操作,计算为2;
[0073]
记训练数据集tr的类度量集合lm
train
={m1,m2,...,m
l
,...,mn},n代表类的数量,m
l
=<wmc,noc,lcom,dit,rfc,mpc,nom,dac,size1,size2,change>;
[0074]
s3.度量归一化处理:
[0075]
对训练数据集tr的类度量集合lm
train
进行归一化处理,得到归一化后的训练数据集lm

train
=[m1′
,m2′
,...,m
l

,...,mn′
],其中],其中不失一般
性,记是度量值xj归一化后的值,归一化处理的公式如下:
[0076][0077]
其中xj代表原始度量值,x
max
、x
min
分别是xj对应的lm
train
中该类度量值中的最大值和最小值;
[0078]
s4.训练数据采样:使用10-fold交叉验证方法,将训练数据集lm

train
的数据随机均分为10份,每次取其中1份作为验证集,剩余9份作为训练集
[0079]
s5.训练预测模型:构建多层迭代的预测模型,在训练预测模型的过程中将其每一层的输出通过择优后,作为下一层的输入,不断迭代,根据终止准则停止训练,得到最终训练好的预测模型,其详细过程包括以下子步骤:
[0080]
s5-1.第1层预测模型训练:
[0081]
将归一化后的训练集的每一个m
l

中元素作为自变量,将作为因变量软件维护规模(即change)的实际值;其训练方式为:将进行两两组合,将每一种组合的两个元素和代入以下的预测公式,并将作为实际值代入预测公式中的y,使用widrow-hoff学习规则计算得到组权值:
[0082][0083]
其中y是输出值,表示软件维护规模(即change),a0,a1,a2,a3,a4,a5是权值;
[0084]
再将组权值代入上述预测公式,得到个候选中间模型;
[0085]
s5-2.第1层预测模型验证:
[0086]
将验证集输入由s5-1得出的候选中间模型,输出软件维护规模(即change)的预测值,将其与对应的输出软件维护规模(即change)的真实值计算出每一个候选中间模型的平均相对误差值mae,获得mae集合e,并将当前层最小mae作为当前层准则值w1,每一个候选中间模型的平均相对误差值mae的计算公式如下:
[0087][0088]
其中,m为验证集类的数目,yi′
为验证集软件维护规模(即change)真实值,为对应的模型预测值;
[0089]
s5-3.第1层预测模型择优:从mae集合e中选取10个最小mae值对应的候选中间模型作为择优模型,连接到预测模型的下一层;
[0090]
s5-4.多层迭代训练预测模型:根据步骤s5-1~s5-3的方法不断地重复进行训练,即在第k(k=2,3...,表示当前训练的层数)层预测模型的训练中,取第k-1层输出的择优模
型作为输入,按照s5-1将输入两两组合,计算出每一种组合的权值,将权值代入预测公式得出候选中间模型;按照步骤s5-2将验证集输入候选中间模型,得到相应的预测值,根据s5-2的公式计算每一个候选中间模型的mae,并将当前层最小mae值作为当前层准则值wk;对候选中间模型进行模型择优,若在第k层候选中间模型中,候选中间模型的mae值小于w
k-1
的数量多于10个,则选取mae值最小的10个候选中间模型作为择优模型连接到预测模型的下一层,反之将mae值小于w
k-1
的所有候选中间模型作为择优模型连接到预测模型的下一层;
[0091]
s5-5.预测模型的训练终止准则:
[0092]
当当前层候选中间模型的最小mae值大于前一层准则值,停止训练过程,选取前一层择优模型中准则值对应的模型作为预测模型的最终层;
[0093]
当当前层仅有一个候选中间模型且该候选中间模型mae值小于等于前一层准则值时,停止训练过程,选取当前候选中间模型作为预测模型的最终层;
[0094]
s5-6.训练得到最终的多层迭代的预测模型;
[0095]
s6.对于一个新的软件系统,按步骤s2获得类度量集合lm
test
,按步骤s3进行归一化处理获得归一化后的训练数据集lm

test
,再将归一化后的训练数据集lm

test
输入由s5训练得到的预测模型中,得到软件维护规模的预测值,并将其根据s3的归一化公式反推预测值的原始值,获得的原始值即为该软件系统包含的各个类的下一个版本的代码修改行数的预测值。
[0096]
下面基于上述方法流程,通过实施例进一步展示其技术效果。
[0097]
实施例
[0098]
本实施例步骤与具体实施方式相同,在此不再进行赘述。下面就部分实施过程和实施结果进行展示:
[0099]
数据源的获取:从某软件系统中一共获取了313个类,对每一个类使用ckjm-extended工具获取wmc、noc、lcom、dit、rfc、mpc、nom、dac、size1、size2这十个度量,使用beyond compare工具收集每个类两个版本之间的代码新增、删除和修改的行数change,得到训练数据集。将这些数据按照步骤s2-s4进行预处理。
[0100]
第一层预测模型训练:将训练数据集按照10-fold交叉验证的划分方式,以9∶1划分为训练集和验证集。如图2所示为训练一个多层迭代的软件维护规模预测模型的完整过程,即先使用训练集数据训练第一层的模型,将自变量作为输入,作为实际软件维护规模(即change)值,代入s51的公式,并根据s5-1的权值计算方法计算每一个候选中间模型的权值,得到45个不同权值的第一层中间模型
[0101]
第一层预测模型验证和择优:将验证集分别输入上述得出的中间模型中,得出软件维护规模(即change)预测值,并根据其对应的实际值使用平均相对误差公式计算每一个候选中间模型的mae值,留下了mae最小的十个候选中间模型作为择优模型,将其命名为w1~w
10
作为第二层的输入,并将最小mae值赋予w1,即第一层准则值。
[0102]
迭代训练过程:将第二层的输入w1~w
10
根据s5-4进行训练得到第二层候选中间模型,选取mae最小的十个候选中间模型最为择优模型,命名为z1~z
10
作为第三层的输入,不断地重复模型训练择优的过程。按照s5-5模型终止准则,由于最后只有一个候选中
间模型f,且它的mae值小于前一层的准则值,则将f作为预测模型的最后一层,结束训练,得到最终的多层迭代的软件维护规模的预测模型。
[0103]
模型使用评估:将一个新的软件系统使用预测模型进行预测,得出的软件维护规模(即change)预测值和实际值y对比及精确度如图3所示。使用指标是mre、mmre和pred(25)值进行预测结果的评估。公式如下:
[0104][0105][0106][0107]
其中y是实际值,是预测值;m是测试数据集类的数目;k为mre小于或等于25%的观测数。
[0108]
其中mre表示相对误差,mmre代表相对误差的平均值,pred(25)代表相对误差<=25%的比率。从图3可以看出,模型的拟合度较好,结果为mmre达到了15.23%,相较于其他方法降低了13.2%,pred(25)达到了95.13%,即相对误差mre的值大部分在25%以下。图4为与其他四种模型grnn、svm、decision-tree、bayesian预测准确性的对比图,在以上三种指标mre、mmre、pred(25)的评估下,该模型表现了更高的性能。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献