一种面向软件缺陷个数预测的特征选择方法与流程

文档序号:11216959阅读:659来源:国知局
一种面向软件缺陷个数预测的特征选择方法与流程

本发明属于特征选择领域,特别是涉及一种面向软件缺陷个数预测的特征选择方法。



背景技术:

(1)软件缺陷预测技术:软件缺陷是计算机软件或程序中存在的某个破坏正常运行能力的问题、错误以及隐藏的功能缺陷。随着软件系统在工程应用中的不断扩大,软件缺陷导致的经济损失日益增加。据美国国家标准与技术所的一项研究表明,软件缺陷给美国每年造成的损失高达几百亿元,而其中超过三分之一的损失,如果提前稍加测试,即可避免。除了经济领域,还有一些软件是飞行控制系统软件和医疗设备软件,这些和人命相关的软件,一旦出现软件缺陷问题,就会给人民生命财产安全带来无端灾难,因此软件缺陷预测技术意义重大。软件缺陷预测技术是软件质量保证中的一项重要技术。软件缺陷预测通过分析软件历史仓库,建立缺陷预测模型,对新的软件模块进行缺陷预测。对预测出潜在缺陷的新的软件模块分配更多的测试资源,可以达到合理分配测试和维护资源的目的。目前为止,已有很多高效的软件缺陷方法被提出。

但这些预测通常只给出有缺陷或无缺陷的二分类结果。现有技术表明,如果只按照有无缺陷来分配有限的测试资源,可能会造成资源分配的浪费。如果我们能够准确的预测出缺陷个数,使软件测试人员主要关注那些拥有更多缺陷的软件模块,就可使软件测试工作更为有效。因此,预测软件缺陷个数相比于单纯的预测软件模块是否有缺陷更利于优化软件测试资源的分配。

软件缺陷个数预测过程分为四个阶段:(a)挖掘软件历史仓库,从中抽取出有用的程序模块。程序模块粒度可根据实际应用场景,可设置为文件、包、类或函数等。(b)提取出与软件缺陷有关的特征,并构建出软件缺陷个数训练集。(c)借助特定的建模方法在软件缺陷个数训练集上构建出软件缺陷个数预测模型。不同于单纯的预测新的软件模块是否存在缺陷时采用的是分类模型,软件缺陷个数建模方法采用的是回归模型。(d)在对新的软件模块提取出特征后,利用步骤(d)中训练出的软件缺陷个数预测模型,预测该模块存在多少个缺陷。

在构建软件缺陷预测模型时,与提取出与软件缺陷有关的特征中不可避免会产生冗余特征和不相关特征。冗余特征指的是该特征所包含的信息能从其他特征中推演出来的特征。无关特征则是对采用的机器学习算法不能提供任何的帮助。这些特征的存在会严重影响软件缺陷个数预测模型的准确率,因此,使用特征选择方法去除这类特征是十分必要的。

(2)特征选择技术:特征选择是指从原始特征中选取最小数量的特征子集,特征子集内的属性应与样本类别具有最大相关度,而属性与属性之间又具有最小相关度。之所以需要对特征进行选择,一方面是因为往往大量的原始特征会导致处理的时间和空间复杂度过高,另一方面则是大量不相关特征或冗余特征反而会降低分析方法的性能。因此,有效的特征选择对于缺陷预测技术是非常必要的。目前已有一些研究者将特征选择的方法应用到软件缺陷预测中。现有技术有针对软件度量中穷举搜索的不可行性,提出了一种混合属性选择方法,并减少了特征子集的搜索空间。还有研究构建了一种新的软件缺陷预测框架,并将基于过滤式的特征选择方法应用到了软件缺陷预测中。还有研究提出了一种混合特征选择方法,首先基于特征子集评估器移除软件缺陷数据集中的无关特征和冗余特征,随后基于特征排序评估器进一步移除其中的无关特征,实验结果表明该方法能有效提高缺陷预测模型的性能。但这些特征选择方法都只是针对预测软件模块是否有缺陷的问题。



技术实现要素:

相对于国内外已有的只是针对预测软件模块是否有缺陷的特征选择方法,本发明针对软件缺陷数据集中不相关特征和冗余特征会降低软件缺陷个数预测模型的性能的问题,提出了一种面向软件缺陷个数预测的特征选择方法。

本发明提供的技术方案是一种面向软件缺陷个数预测的特征选择方法,包括以下步骤:

步骤1,挖掘软件历史数据库,从中抽取出有用的软件模块。软件模块粒度可根据实际应用场景,可设置为文件、包、类或函数。然后标记这些软件模块的缺陷数目。

步骤2,提取软件模块中与软件缺陷有关的特征,提取了20个度量属性:加权方法数(wmc),继承树深度(dit),孩子数(noc),对象类之间的耦合度(cbo),类的响应(rfc),内聚缺乏度(lcom),传入耦合(ca),传出耦合(ce),公开方法数(npm),代码行数(loc),数据访问度量(dam),聚合度量(moa),功能抽象度量(mfa),方法间的内聚度(cam),继承耦合(ic),方法间耦合(cbm),平均方法复杂度(amc),最大mccabe环形复杂度(max_cc),平均mccabe环形复杂度(avg_cc)。这20个特征形成了原始的特征集。

步骤3,利用线性pearson系数计算特征之间的关联性,两个特征之间的冗余度越大,它们的关联性就越强,关联性计算公式为:其中,xik,xjk分别表示第k个软件模块xk上特征fi的值和特征fj的值,分别表示在所有软件模块数据上特征fi的均值和fj的均值。rij表示特征fi和特征fj之间的关联度,取值介于-1和1之间。其越接近1或-1,关联性越强,越接近于0,关联性越弱。

步骤4,利用谱聚类算法根据特征之间的关联性对这些特征进行聚类,形成k个簇,具体包括:

步骤4.1,构造特征关联性矩阵w,其中wij表示特征fi与特征fj的关联性;两个特征的负相关性强,他们之间的冗余度也很高,由于特征关联性矩阵需要每个值都为正数,因此需要把步骤3中求得的特征关联性为负值的转换为绝对值。

步骤4.2,根据特征关联性矩阵w计算归一化对角矩阵

步骤4.3,根据归一化对角矩阵d计算归一化拉普拉斯图矩阵l=d1/2wd1/2

步骤4.4,计算普拉斯图矩阵l的特征向量,将前m个特征值最大的向量按列放置成一个矩阵x,即x=[v1,v2,…,vm],其中v1,v2,…,vm依次为前m个特征值最大的特征向量。

步骤4.5,归一化矩阵x形成矩阵y。

步骤4.6,对矩阵y按每行为一个数据,采用k-means算法对所有模块数据进行聚类,矩阵y中第i行的数据就是原来的第i个软件模块xi,将特征集划分为k个簇。

步骤5,利用线性pearson系数衡量计算每个特征与这些模块数据的缺陷数目之间的关联性ri,其计算公式为:其中,xki,yk分别表示第k个软件模块xk上特征fi和缺陷个数的取值,分别表示在所有软件模块数据上特征fi和缺陷个数的均值。ri表示特征fi和缺陷数目间的关联度,取值介于-1和1之间。其越接近1或-1,关联性越强,越接近于0,关联性越弱。缺陷数目表示的是实施例中表示的10个模块数据的缺陷数据这一个向量。

步骤6,根据特征相关性对每个簇中的特征进行排序,从步骤5中获得的每个簇中选取相关性最高的n个特征构成最终的特征子集。

本发明设计了合理的特征选择策略,首先利用特征与特征之间的关联性,对特征集进行谱聚类,将相互之间冗余度高的特征聚类到同一个簇中。在聚类的结果中,利用特征与软件缺陷个数之间的相关性,从每个簇中选出相关性最强的几个特征,这样既降低了特征之间的冗余度,又排除了不相关特征,得到最终的有益于缺陷个数预测模型性能的特征子集。本发明的技术方案具有简单、快速的特点,得到的特征子集有助于提高软件缺陷个数预测模型的性能。

附图说明

图1本发明的流程图。

图2本发明实施例的结果图。

具体实施方式

为了便于本领域普通技术人员理解和实施本发明,下面结合附图及实施例对本发明作进一步的详细描述,应当理解,此处所描述的实施示例仅用于说明和解释本发明,并不用于限定本发明。

本发明设计的面向软件缺陷个数的特征选择方法的流程见附图1,所有步骤可由本领域技术人员采用计算机软件技术实现流程自动运行。实施例具体实现过程如下:

本发明设计的一种面向软件缺陷个数预测的特征选择方法具体实现过程如下:

步骤1,挖掘软件历史数据,从中抽取出有用的软件模块。软件模块粒度可根据实际应用场景,可设置为文件、包、类或函数。然后标记这些软件模块的缺陷数目。

步骤2,提取软件模块中与软件缺陷有关的特征,这些特征形成原始的特征集。为了方便阐述,本实施例假设只提取了10个特征{f0,f1,f2,f3,f4,f5,f6,f7,f8,f9}。

在经过了步骤1-2后,本实施例假设在提取模块特征和标记软件模块的缺陷数目后形成了10个软件模块数据(最后一位为该模块的缺陷个数):

x1={3.0,1.0,0.0,8.0,14.0,3.0,3.0,5.0,3.0,2.0,‘2’},

x2={13.0,1.0,0.0,1.0,17.0,64.0,0.0,1.0,12.0,0.917,‘0’},

x3={4.0,1.0,0.0,4.0,4.0,6.0,2.0,2.0,4.0,2.0,‘0’},

x4={10.0,1.0,0.0,6.0,31.0,1.0,0.0,6.0,9.0,0.5,‘3’},

x5={7.0,1.0,0.0,6.0,19.0,7.0,0.0,6.0,6.0,0.75,‘0’},

x6={38.0,1.0,0.0,30.0,155.0,485.0,0.0,30.0,34.0,0.9,‘4’},

x7={25.0,1.0,0.0,13.0,74.0,0.0,0.0,13.0,23.0,0.444,‘1’},

x8={13.0,1.0,0.0,19.0,56.0,54.0,0.0,19.0,11.0,0.9,‘3’},

x9={7.0,4.0,4.0,48.0,12.0,19.0,47.0,1.0,6.0,0.94,‘0’},

x10={7.0,1.0,0.0,4.0,7.0,21.0,2.0,2.0,7.0,2.0,‘3’}。

步骤3,利用线性pearson系数计算特征之间的关联性,两个特征之间的冗余度越大,它们的关联性就越强,关联性计算公式为:其中,xik,xjk分别表示第k个软件模块xk上特征fi的值和特征fj的值,分别表示在所有软件模块数据上特征fi的均值和fj的均值。rij表示特征fi和特征fj之间的关联度,取值介于-1和1之间。其越接近1或-1,关联性越强,越接近于0,关联性越弱。本实施例中经计算得:r01=-0.18,r02=-0.18,r03=0.32,r04=0.96,r05=0.82,r06=-0.23,r07=0.85,r08=1.00,r09=-0.50,r12=1.00,r13=0.81,r14=0.20,r15=-0.11,r16=1.00,r17=-0.23,r18=-0.20,r19=-0.11,r23=0.81,r24=-0.20,r25=-0.11,r26=1.00,r27=-0.28,r28=-0.20,r29=-0.11,r34=0.37,r35=0.38,r36=0.79,r37=0.34,r38=0.30,r39=-0.27,r45=0.87,r46=-0.24,r47=0.95r48=0.95,r49=-0.43,r56=-0.13,r57=0.80,r58=0.81,r59=-0.15,r67=-0.31,r68=-0.24,r69=-0.04,r78=-0.83,r79=-0.36,r89=-0.48。

步骤4,利用谱聚类算法根据特征之间的关联性对这些特征进行聚类,形成k个簇,具体包括:

步骤4.1,构造特征关联性矩阵w,其中wij表示特征fi与特征fj的关联性。两个特征的负相关性强,他们之间的冗余度也很高,由于特征关联性矩阵需要每个值都为正数,因此需要把步骤3中求得的特征关联性为负值的转换为绝对值。本实施例得到特征关联性矩阵:

步骤4.2,根据特征关联性矩阵w计算归一化对角矩阵本实施例得到归一化对角矩阵:

步骤4.3,根据归一化对角矩阵d计算归一化拉普拉斯图矩阵l=d1/2wd1/2。本实施例得到拉普拉斯图矩阵:

步骤4.4,计算普拉斯图矩阵l的特征向量,将前m个特征值最大的向量按列放置成一个矩阵x,即x=[v1,v2,…,vm],其中v1,v2,…,vm依次为前m个特征值最大的特征向量;本实施例设置m=4,求得矩阵

步骤4.5,归一化矩阵x形成矩阵y。本实施例中求得

步骤4.6,对矩阵y按每行为一个数据,采用k-means算法对所有模块数据进行聚类,矩阵y中第i行的数据就是原来的第i个软件模块xi,将特征集划分为k个簇。本实施例中设置k=4,将10个特征划分为4个簇:c1={f3,f5},c2={f0,f4,f7,f8},c3={f1,f2,f6},c4={f9}。

步骤5,利用线性pearson系数衡量计算每个特征与这些模块数据的缺陷数目之间的关联性ri,其计算公式为:其中,xki,yk分别表示第k个软件模块xk上特征fi和缺陷个数的取值,分别表示在所有软件模块数据上特征fi和缺陷数目的均值。ri表示特征fi和缺陷个数间的关联度,取值介于-1和1之间。其越接近1或-1,关联性越强,越接近于0,关联性越弱。本实施例中计算得到r0=0.452,r1=-0.356,r2=-0.356,r3=0.065,r4=0.577,r5=0.529,r6=-0.357,r7=0.651,r8=0.448,r9=0.009。

步骤6,根据特征相关性对每个簇中的特征进行排序,从步骤5中获得的每个簇中选取相关性最高的n个特征构成最终的特征子集。本实施例中设置n=1。本实施例中对簇c1中的两个特征依照相关性进行排序,得到特征f5排列在第一位,特征f3排列在第二位,选取相关性最高的一个特征即f5。同理,簇c2中选取相关性最高的特征f7,簇c3中选取相关性最高的特征f6,簇4中选取相关性最高的特征f9。最终,f5、f6、f7和f9构成了最终的特征子集。

本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1