使用EBIC的软件故障特征选择方法*

涂吉屏,钱 晔,王 炜,2,范道远,张涵宇

1.云南大学 软件学院,昆明 650500

2.云南省软件工程重点实验室,昆明 650500

3.云南农业大学 大数据学院(信息工程学院),昆明 650201

1 引言

软件故障预测通过设计与代码或软件开发过程相关的度量指标(metrics),并挖掘软件历史仓库中的缺陷数据来建立预测模型,以确定待评估软件模块是否具有易发生故障的倾向[1-3]。故障预测中度量指标即为特征,以一组代码的特征xi及其类标yi作为输入构建预测模型,并以新代码模块的特征xi预测其yi的倾向性,即预测该代码模块是否可能存在潜在的故障。实现高效的软件故障预测帮助开发及维护人员将有限资源集中分配到有发生故障倾向性的软件模块[4-5],但由于构建预测模型的数据种类较多,若采用大量度量指标建立预测模型,容易造成维度灾难,且因其中含有无关特征,可能使预测模型性能受到不良影响[6-7],因此特征选择方法是建立故障预测模型前的重要步骤[8]。特征选择旨在选取一个特征子集xi来代替原始特征集xi,以压缩特征维数,提高模型预测精度,减少计算资源消耗,建立预测模型之前对特征进行选择具有研究意义。

现有用于故障预测的特征选择方法可分为特征排序和特征子集选择两类。特征排序方法单独计算每个特征对结果的影响值,并根据影响值将特征降排列,常见的特征排序方法有卡方检验[9]、相关性[10]、信息增益[11]、信息增益率[12]等;特征子集选择方法评估各特征对结果的影响值,并基于搜索方法建立特征子集,部分特征子集选择方法评估特征间的相关性[13]、一致性[14-15]来确定最终子集,属过滤器方法;部分方法采用学习器的结果反馈调整所选特征个数,属包装器方法。现有方法主要存在以下不足:(1)特征排序方法仅考虑了单个特征对结果的影响,无法确定采用几个排名靠前的特征建立预测模型,有效性不高;(2)特征子集选择方法需搜索所有可能子集,消耗大量计算资源,且倾向于选择较多特征建立模型,无法有效减少特征维度,算法复杂度较高,增加故障预测过程的复杂性。

针对以上问题,本文提出基于拓展贝叶斯信息准则的特征选择方法(extended Bayesian information criteria based feature selection technique,EBIC-FS)。本文方法属特征排序方法,在排序的基础上评估采用多少个排名靠前的特征建立故障预测模型,具体为利用拓展贝叶斯信息准则[16]对特征进行排序,再在特征排名列表的基础上用该准则评估前k个特征构成的特征子集,选择EBIC值最小的k个特征所构成子集建立预测模型,所选特征子集维数较低且提高特征子集预测性能。本文主要贡献如下:

(1)运用拓展贝叶斯信息准则对故障特征排序,并对排名前k的特征构成的软件故障特征子集进行评估。该方法选择的特征子集对类标具有较好的解释能力,即其对真实数据的拟合程度较高,克服了传统特征排序方法有效性低的缺点。

(2)待评估特征子集个数较少,且所选特征子集维数较低,与特征子集选择穷尽搜索方法相比,资源消耗小,且有效压缩特征维度,降低了故障预测模型复杂度。

2 相关工作

软件故障预测以预测程序模块故障数量或故障倾向性为目标,可分为从软件历史仓库中产生实例、对产生的程序模块[17]进行度量并标记、数据预处理、建立预测模型几个步骤。其中,特征选择属数据预处理步骤。

软件故障预测研究关注度量指标及故障数据集[4],以n个软件模块的度量指标及类标(xi,yi)为输入训练预测模型,并用于预测新模块yi的错误倾向性。软件故障度量指标xi是建立预测模型的基础,xi=(mi1,mi2,…,mik)是对软件质量评估的量化,为一组从代码、软件存储库中获取的与表征软件故障有关的度量指标及其取值。故障预测的度量指标可分为代码指标、过程指标和其他指标,代码指标及过程指标在相关研究中被广泛使用。

(1)代码指标

代码指标收集于现存源代码,用于度量源代码的复杂度,并认为复杂度高的程序模块更容易存在潜在的故障。Size指标[18]是最为常用的软件复杂度度量指标,最具代表性的Size指标为代码行数LOC(lines of code);Halstead指标[19]以操作符和操作数的数量计算程序的长度、容量、程序语言等级等;McCabe指标[20]根据源代码的控制流程图中的节点、弧和连接组件的数量计算,常用指标有圈复杂度、基本复杂度、模块设计复杂度;为使度量指标适用于面向对象程序,Chidamber和Kemerer提出了CK指标[21],度量面向对象程序的耦合、内聚、继承及每个类的复杂度;OO指标[22]也是适用于面向对象程序的度量指标,计算软件模块的方法、属性等数量。

(2)过程指标

过程指标收集于软件存储库中的历史信息,它反映代码的变更程度,认为代码的变更容易导致故障发生:Change指标[23]运用版本控制系统中的历史更改记录,衡量文件的重构、错误修改、重构次数;Bacchelli等人[24]认为在开发人员往来电子邮件中常被讨论的软件模块更易于发生故障,设计了Popularity指标;Bird等人[25]提出了Ownership and Authorship指标,包含次要贡献者的数量、主要贡献者的数量、贡献者总数等,认为所有权高的错误倾向性低;Lee等人[5]提出了Microinteraction指标,认为某个源代码文件错误与编写时间有关。

由于各类指标从不同角度衡量代码的故障倾向性,单一种类的度量指标无法全面反映源代码综合性能及其故障倾向性,因此进行故障预测需考虑多种指标;但采用多种度量指标建立预测模型易造成维度灾难,且其中可能存在某些指标对预测效果有负影响,故对故障特征进行选择是建立故障预测模型的重要步骤。

特征选择是软件故障预测中数据预处理的方法之一,分为特征排序和特征子集选择两大类[26],又可进一步划分为过滤器特征排序方法、过滤器特征子集选择方法以及包装器特征子集选择方法[8]。除此之外,还有部分聚类的方法[4,27-28]及特征提取方法[29-30]。文献[1,8]研究了大量特征选择方法对故障预测的影响;Shivaji等人[6]将卡方检验、信息增益、信息增益率方法运用在故障预测特征选择中,预测模型的综合性能提高;Turhan等人在文献[31]中运用信息增益进行特征选择。文献[4,7,28]分别提出两种特征选择方法,运用聚类选择各类中信息量较大的特征组成故障预测数据集。

以下对部分特征选择方法进行简要介绍。

(1)特征排序方法

特征排序方法单独给每个特征评分,根据单个指标对分类结果的影响值对特征进行排序。

①卡方检验公式描述如下:

图片[1]-使用EBIC的软件故障特征选择方法*-游戏花园

该方法计算各度量指标xi与类标y的卡方值,选择卡方值低于阈值的特征建立预测模型。

②相关系数公式描述如下:

图片[2]-使用EBIC的软件故障特征选择方法*-游戏花园

该方法单独计算每一度量指标xi与类标y的相关系数来度量特征与类标间的线性关系,选择相关系数较高的特征建立预测模型。

③信息增益公式描述如下:

图片[3]-使用EBIC的软件故障特征选择方法*-游戏花园

信息增益方法基于信息熵,数据集D有无某一特征mik时信息量发生改变,其差值即为特征mik所含信息量。

④信息增益率公式描述如下:

图片[4]-使用EBIC的软件故障特征选择方法*-游戏花园

信息增益有一缺陷,即倾向于选择值较多的特征;信息增益率可通过惩罚多值特征解决信息增益方法的缺陷,其中分子为信息增益,分母为特征mik的固有值。

以上过滤器特征排序方法易于理解,耗时较短,被广泛运用于现有研究中[1,8,26,32-33]。但基于排序的特征选择方法彼此间差异较小且对提高模型预测性能无显著有效性,在减少特征个数的同时易发生信息损失,虽降低了软件故障预测模型复杂度,但对提高预测模型精度作用较小[1,26,34]。

(2)特征子集选择方法

特征子集选择方法查找具有良好预测能力的特征子集,计算各特征重要性并选择一组特征建立预测模型。

①基于相关的特征子集选择(correlation-based feature subset selection,CFS)

基于相关性的特征子集选择方法不仅考虑了单个特征与类标间的相关性,还考虑各特征间的相关性,选择与类标相关性高且彼此间相关性低的特征构成特征子集。

②基于一致性的特征子集选择(consistencybased feature subset selection,CBS)

基于一致性的特征子集选择方法搜索该方法与原特征集一致性相等的最小特征子集建立预测模型。

特征子集选择方法需结合贪心搜索方法实现特征子集选择,所选特征子集训练的模型预测准确度高。特征子集选择方法可提高模型准确度及预测能力[1,8,35-38]。但此类方法待选特征子集个数随特征个数增多呈指数级增长,穷尽搜索耗费大量时间;且特征子集选择方法选择特征个数较多,无法有效减少特征维度,预测模型复杂度高,耗费计算资源[39-41]。

与上述方法不同,本文提出了EBIC特征选择方法。该方法先运用拓展贝叶斯信息准则[16]对各个特征进行排序,再根据特征排名列表,以最佳属性——最佳属性+次佳属性——最佳属性+次加属性+再次佳属性的次序评估大小递增的由前k个特征构成的特征子集的EBIC值,从中选出最佳特征子集。该方法综合了特征排序及特征子集选择的优点,与传统特征排序方法相比对采用几个排序靠前的特征进行了评估,所建立的预测模型有效性较高,且与特征子集选择方法相比耗费计算资源少,特征集压缩程度高。

3 本文研究方法

本文研究过程包含获取故障数据、EBIC-FS特征选择、建立预测模型三部分,其方法框架如图1所示,本章重点阐述EBIC-FS特征选择方法,对故障数据及训练预测模型部分进行简要概述。

图片[5]-使用EBIC的软件故障特征选择方法*-游戏花园

Fig.1 Proposed method framework图1 本文方法框架

3.1 软件故障预测数据

软件故障数据集Dn={(x1,y1),(x2,y2),…,(xn,yn)},包含n条程序模块故障信息;xi为第i个模块的特征向量,xi=(mi1,mi2,…,mik),每个特征向量包含k个度量指标(即特征);yi表示第i个程序模块的类标,yi∈{0,1},“yi=0”表示该模块无故障,“yi=1”表示该模块有故障。故障特征选择旨在减少特征维度,挑选部分特征构成特征子集中含特征个数为。故障特征选择工作选择复杂度低、解释能力强的最佳故障特征子集,以使后续预测模型有较强预测能力。表1为一个软件故障数据集示例。

图片[6]-使用EBIC的软件故障特征选择方法*-游戏花园

Table 1 Example of software defect dataset表1 软件故障数据集示例

3.2 EBIC-FS特征选择方法

3.2.1 拓展贝叶斯信息准则及其特征选择应用

本文利用EBIC准则,选择在特征维度上及对数据集的描述能力之间达到最佳平衡的特征子集,以降低模型复杂度,提高预测模型性能。拓展贝叶斯信息准则(EBIC)[16]是对传统贝叶斯信息准则(Bayesian information criteria,BIC)[42]的改进,二者均是模型选择方法,可在特定的模型空间内选择一个有合适复杂度的最佳模型。BIC准则及EBIC准则公式如下:

图片[7]-使用EBIC的软件故障特征选择方法*-游戏花园

BIC倾向于在特征较多的子集中选择最佳特征集,不利于压缩特征维度;为解决该问题,EBIC准则在BIC的基础上增加了一个惩罚项。EBIC公式第一项用于拟合数据,因在故障数据集中,无法获取各度量指标与类标之间的具体关系,可对其进行参数估计,即可对数据进行线性回归,其中RSS(residual sum of squares)为残差平方和,用于衡量模型拟合程度:

图片[8]-使用EBIC的软件故障特征选择方法*-游戏花园

RSS计算原始数据与其相对应的拟合数据点之间的误差的平方和,RSS越小表明该组特征对类标yi的解释能力越强,即数据拟合程度越高。

当x的维度增加,即故障特征个数增多时,特征子集的解释能力随之增强,即数据拟合程度增加,RSS随特征维数增加而降低,但同时也无法有效减少特征个数,增加了故障预测模型的复杂度。因此,两个惩罚项用以解决该问题,选择较少数量的故障特征构成最佳特征子集。其中,公式第二项k为当前子集特征维数,n为故障数据样本量。

公式第三项解决传统BIC所选特征维数较多的问题,其中为含k个变量的模型空间。例如,当k=1时,模型空间为包含所有仅含1个故障特征的特征子集模型:

图片[9]-使用EBIC的软件故障特征选择方法*-游戏花园

参数γ平滑了在不同维度的模型空间内选择最佳模型的概率,使得在故障特征个数较多时,所选择的模型复杂度得以控制,以选择较少数量特征并使后续预测模型达到较优性能,当γ=0时,EBIC即等于BIC。

3.2.2 EBIC-FS方法流程

EBIC-FS特征选择方法采用特征排序方法实现,并在特征排序基础上选择一组模型拟合程度较高且特征维数较低的特征。假设原数据集含k个特征,其可能的特征子集共有2k-1个,穷尽搜索耗费大量计算资源,而特征排序共需计算k次,子集评估阶段将特征排名列表中各特征依次加入特征向量并评估其EBIC值也仅需计算k次。

EBIC-FS特征选择方法分为特征排序和特征子集评估两个阶段,其中特征排序阶段通过评估单个特征解释能力,将所有含1个特征的模型按EBIC值递增排序,形成特征排名列表;特征子集评估阶段按第一阶段特征排名列表将特征依次加入特征向量,组成k个待选模型,从中选出最佳模型,最佳模型所对应的特征向量中所含特征即为所选特征子集。图2为EBIC-FS特征选择过程,以一条故障数据实例表明,实际特征选择过程包含n条故障数据。3.2.3小节特征排序阶段及3.2.4小节特征子集评估均根据图2进行说明。

图片[10]-使用EBIC的软件故障特征选择方法*-游戏花园

Fig.2 Flowchart of EBIC-FS method图2 EBIC-FS方法流程图

3.2.3 特征排序阶段

第一阶段为特征排序,该阶段的实现可获得与类标相关程度的降序排名列表,是后续评估采用多少个排名靠前的特征建立预测模型的基础。图2中故障数据Di=(mi1,mi2,mi3,…,mik,yi),原始特征集xi=(mi1,mi2,mi3,…,mik),每个白色方块为一个特征,代表一个度量指标mik;每组度量指标有一个类标yi,用灰底方块表示。将每个特征与类标组成k个仅含单个度量指标的模型,可评估每个度量指标导致是否发生故障的影响参数,即计算模型空间X1中所有模型(mi1,yi),(mi2,yi),(mi3,yi),…,(mik,yi)的EBIC值。计算X1中所有模型的EBIC值,按升序排列,即按每个特征对类标解释能力降序排列,图2中以方块颜色渐浅表示。最终,形成该故障数据集的特征排名列表mi4,mi13,mi10,…,mik。因特征排序阶段各模型EBIC公式第2、3项参数相同,其本质为计算该度量指标对类标影响值。特征排序阶段伪代码如算法1所示。

算法1特征排序

输入:故障数据Di,包括原特征向量xi及类标yi,xi=(mi1,mi2,mi3,…,mik)。

输出:特征排名列表。

1./*计算每个单特征模型EBIC值*/

2.forj=1 tok

3.组合mij及类标yi,构成单变量模型

4.计算模型(mij,yi)的EBIC值

5.end for

6./*排序*/

7.forj=0;j <k;j++

8.找最小EBIC值模型,与第j个模型交换位置

9.end for

10.得到特征排名列表

特征排序阶段输入故障数据,包含原特征向量xi及类标yi,输出特征排名列表,是后续特征子集评估的基础。

3.2.4 特征子集评估阶段

第二阶段为特征子集评估,以确定采用多少个排名靠前的特征组成所选特征子集。第一阶段得到特征排名列表mi4,mi13,mi10,…,mik,本阶段对排名前k的特征组成的特征子集进行评估。首先,将最佳属性mi4加入特征向量,构成第一个待选特征子集,与类标yi构成待选模型1。其次,将排名列表中第二个特征mi13加入特征向量,=(mi4,mi13),构成待选模型2。再次,将第三个特征mi10加入特征向量,此时=(mi4,mi13,mi10),构成待选模型3。以此类推,直至将特征排名列表中最后一个特征mik加入特征向量,此时得到k个待选模型,第k个模型即为原特征集。计算每个待选特征子集的EBIC值,结果最小的模型为最佳模型,所对应即为EBIC-FS方法选出的特征子集。如图2所示,待选模型3为最佳模型,对应=(mi4,mi13,mi10) 为所选特征子集,EBIC-FS方法选出特征mi4、mi13、mi10,将特征个数由k个减少至3个。特征子集评估阶段伪代码如算法2所示。

算法2EBIC-FS特征子集评估

输入:特征排名列表及类标。

1.将类标yi放入模型

3./*根据排名列表组建待选特征子集并计算EBIC值*/

4.令m为特征列表序号

5.form=1 tok

6.将第m个特征mik加入特征向量

7.计算当前模型EBIC值

8.end for

特征子集评估阶段输入特征排名列表及类标,输出最佳模型及其特征向量中所包含特征即为所选度量指标。因特征子集评估采用排名列表确定前k个特征构成的特征子集,待评估特征子集共k个,消耗计算资源小。

3.3 软件故障预测模型

本文采用5个分类器分别训练预测模型,分别为逻辑回归(logistic regression,LR)、朴素贝叶斯(naive Bayesian,NB)、决策树(decision tree,DT)、K近邻(K-nearest neighbor,KNN)和随机森林(random forest,RF)。训练预测模型输入进行特征选择后的故障特征数据集,即输入n条,包含特征向量及类标yi。输出待测软件模块是否有故障,即待测模块预测后被标记为“0”或“1”。

4 证实研究

本章讨论对EBIC-FS方法有效性的证实研究,需回答以下几个研究问题:

RQ1:EBIC-FS方法是否有效,能否提升预测模型性能?

RQ2:与特征排序方法相比,EBIC-FS方法有效性是否有提升?

RQ3:与特征子集选择方法相比,EBIC-FS方法能否压缩特征维度,用其建立的预测模型性能如何?

证实研究部分介绍所用故障数据集、对实验结果的评价方法、实验设计以及对实验结果的分析。

4.1 实验数据

本文采用DAmbros等人[43]发表的基准数据集(http://bug.inf.usi.ch/)M&R中Mylyn插件的故障数据M&R-Mylyn、Promise公开数据集[44](http://openscience.us/repo/defect/ck/)中Promise-ant1.7、Promisexalan2.6作为本文的实验数据,数据集中各度量指标及其含义如表2所示。

M&R-Mylyn包含类标bug及6个CK指标(表2:1~6),1个Size指标(表2:11),10个OO指标(表2:14~23),15个Change指标(表2:30~44),共计度量指标32个,即 特征个数k=32 。Promise-ant1.7及Promise-xalan2.6包含类标bug及10个CK指标(表2:1~10),1个Size指标(表2:11),2个McCabe指标(表2:12~13),7个OO指标(表2:23~29),共计度量指标20个,即特征个数k=20。

本文预测模型均为分类模型,故将各故障数据集中类标为“0”的数据保留,将类标>0数据的类标更改为“1”。由于以上数据集中正样本(类标为1)占整个数据集的比例分别为13.5%、22.3%、46.4%,类不平衡问题易导致模型不准确[45-46],故本文根据文献[45]建议进行下采样,通过均匀抽样减少负样本个数,具体抽样方法如下:(1)将数据集中正样本取出,计数m个;(2)原数据集中负样本为n个,将负样本减少至m个;(3)将负样本等距划分,间距为,随机设置起点a,则抽取a共m个作为数据集的负样本;(4)原数据集中所有正样本与所抽负样本组成本文实验的数据集,并打乱数据样本顺序。

最终M&R-Mylyn采用245条正样本数据及245条负样本数据构成故障数据集Dn,n=n1+n0=490,即490个类的故障数据;Promise-ant1.7采用166条正样本数据及166条负样本数据构成故障数据集Dn,n=n1+n0=332,即332个类的故障数据;Promisexalan2.6采用411条正样本数据及411条负样本数据构成故障数据集Dn,n=n1+n0=822,即822个类的故障数据。

4.2 评价方法

本文用5种分类器训练故障预测模型,实验结果将采用5种常见机器学习评价指标:Accuracy(准确率)、Precision(精确度)、Recall(召回率)、F-measure(F值)、FPR(假阳率)对实验结果进行评价。

计算以上5种评价指标需考虑真实值与预测值之间的关系。

如表3所示,故障预测研究中TN、FN、FP、TP含义如下。

TN:没有故障的程序模块被预测为没有故障。

FN:有故障的程序模块被预测为没有故障。

FP:没有故障的程序模块被预测为有故障。

TP:有故障的程序模块被预测为有故障。

图片[11]-使用EBIC的软件故障特征选择方法*-游戏花园

Table 3 Relationship between real and predicted value表3 真实值与预测值关系

已知真实值与预测值的关系,可定义以下评价指标:

(1)准确率(Accuracy)

图片[12]-使用EBIC的软件故障特征选择方法*-游戏花园

准确率评价指标简单直观,表征预测结果为正确分类所占比例,即true negative和true positive在所有结果中所占比例。

(2)精确度(Precision)

图片[13]-使用EBIC的软件故障特征选择方法*-游戏花园

精确度表示所有在预测过程中被标记为“1”的程序模块中,有多少故障模块。

(3)召回率(Recall)

图片[14]-使用EBIC的软件故障特征选择方法*-游戏花园

召回率也叫真阳率,表示在所有真实值为1(即有故障)的程序模块中,有多少模块在预测过程中被标记为“1”。

(4)F值(F-measure)

图片[15]-使用EBIC的软件故障特征选择方法*-游戏花园

F值是一个综合评价指标,是召回率和精确度的一个加权调和平均值。由于召回率和精确度有时是矛盾的,故F-measure更能准确反映预测模型的性能,F-measure较高的模型更为健壮可靠。

(5)假阳率(false positive rate,FPR)

图片[16]-使用EBIC的软件故障特征选择方法*-游戏花园

假阳率也被称为误报率,表示在所有真实值为“0”(即无故障)的程序模块中,有多少模块在预测过程中被错误标记为“1”。

4.3 实验设计

为验证EBIC-FS方法有效性,回答上述3个研究问题,本文进行3组对照实验,分别与原特征集、特征排序方法、特征子集选择方法进行对比:

(1)为回答RQ1,本文方法与不进行特征选择的原数据集CompleteSet建立的预测模型进行对比,以验证EBIC-FS方法的有效性,能否提升预测模型性能。

(2)为回答RQ2,本文方法与卡方检验Chi-Square、相关性Correlation、ReliefF方法进行对比,以验证EBIC-FS方法能否解决基于排序的特征选择方法有效性低的问题。

(3)文献[8]验证了30种特征选择方法,包括6种特征子集选择方法,结果表明结合BestFirst搜索方法的基于相关性过滤器特征子集选择方法CFS效果最优。为回答RQ3,本文方法与该方法进行对比,以验证EBIC-FS方法能否以较少特征建立性能较优的预测模型。

为使Chi-Square、Correlation、ReliefF方法与CFS方法有对比性,上述3种方法选择与CFS方法相同数量的特征。

本文采用5种分类器,其实现运用scikit-learn第三方库[47]。分别以EBIC-FS方法、原特征集Complete-Set、Chi-Square方法、Correlation方法、ReliefF方法及CFS方法所选特征子集作为数据集建立预测模型,各方法分别进行特征选择,以减少特征维数后的数据集作为训练及测试数据,并进行10次十折交叉验证(10×10-fold cross-validation),每次十折交叉验证前对数据进行打乱重排(shuffle),取10次十折交叉验证的平均值作为最终结果,即:(1)将数据集划分10份,编号a~j;(2)将第a~j份数据轮流作为测试集,剩余9份数据为训练集进行实验;(3)得出10次预测相应准确率等评价指标并求其均值。10次十折交叉验证即为打乱数据顺序后将以上步骤重复10次,并求其平均值。

所用分类器分别为逻辑回归、朴素贝叶斯、决策树、K近邻、随机森林;为客观对比各特征选择方法有效性,各分类器的参数均设置为默认值,即采用如下参数设置:

(1)逻辑回归

惩罚项penalty=L2,采用L2正则项;正则化参数C=1.0;停止准则tol=1E-4。

(2)朴素贝叶斯

假设特征符合高斯分布。

(3)决策树

拆分内部节点最小样本数min_samples_split=2;叶子节点最小样本数min_samples_leaf=1。

(4)K近邻

K=5;叶子数leaf_size=30;p=2,使用欧几里德距离。

(5)随机森林

树的棵数n_estimators=10 ;bootstrap=TRUE,进行有放回的抽样。

4.4 实验结果与分析

本文包含3个数据集实验结果,每个数据集的实验结果分为两部分,分别为特征选择结果及预测模型性能结果。其中,特征选择结果为EBIC-FS方法选出的特征子集,是中间结果;预测模型性能结果将验证EBIC-FS方法有效性。

4.4.1 特征选择结果

EBIC-FS方法分为特征排序和特征子集评估两个阶段。

(1)特征排序阶段

表4~表6为特征排序阶段各单特征子集模型的EBIC值。

第一阶段结果显示,M&R-Mylyn数据集特征排序后的递增特征排名列表为FanOut、NOPRM、NOM、RFC、CBO、WMC、LOC、CHURN(Max)、NOPR、NR、NOPRA、CHURN(Sum)、LINES(SumAdded)、NAUTH、LCOM、NFIX、LINES(SumRemoved)、CHURN(Avg)、NREF、FanIn、LINES(MaxAdded)、NOA、Age、LINES(MaxRemoved)、DIT、NOMI、LINES(AvgAdded)、NOC、NOAI、LINES(AvgRemoved)、NOPA、Age(Weighted);Promise-ant1.7数据集递增特征排名列表为RFC、CE、WMC、LOC、CAM、NOPM、CC(max)、MOA、CC(avg)、DAM、LCOM、IC、CBM、LCOM3、CBO、NOC、CA、DIT、MFA、AMC;Promise-xalan2.6数据集递增特征排名列表为LOC、AMC、LCOM3、RFC、WMC、NOPM、CC(max)、LCOM、MOA、CAM、CBO、MFA、CE、CC(avg)、DAM、CA、DIT、CBM、NOC、IC。

图片[17]-使用EBIC的软件故障特征选择方法*-游戏花园

Table 4 EBIC values of single-metric models under M&R-Mylyn dataset表4 在M&R-Mylyn数据集下单特征模型EBIC值

图片[18]-使用EBIC的软件故障特征选择方法*-游戏花园

Table 5 EBIC values of single-metric models under Promise-ant1.7 dataset表5 在Promise-ant1.7数据集下单特征模型EBIC值

图片[19]-使用EBIC的软件故障特征选择方法*-游戏花园

Table 6 EBIC values of single-metric models under Promise-xalan2.6 dataset表6 在Promise-xalan2.6数据集下单特征模型EBIC值

(2)特征子集评估阶段

M&R-Mylyn数据集特征子集评估阶段包含32个待选模型,Promise数据集包含20个待选模型。Model-1包含1个特征,Model-2包含2个特征,以此类推,其中M&R-Mylyn第32个模型为原特征集,Promise第20个模型为原特征集。表7~表9为特征子集评估阶段各待选模型EBIC值。

特征子集评估阶段显示:M&R-Mylyn数据集Model-4取得待选特征子集中的EBIC最小值,即Model-4为最佳模型,对应特征排名列表中前4个特征FanOut、NOPRM、NOM、RFC;Promise-ant1.7数据集Model-7取得待选特征子集中的EBIC最小值,即Model-7为最佳模型,对应特征排名列表中前7个特征RFC、CE、WMC、LOC、CAM、NOPM、CC(max);Promise-xalan2.6数据集Model-4取得待选特征子集中的EBIC最小值,即Model-4为最佳模型,对应特征排名列表中前4个特征LOC、AMC、LCOM3、RFC。以上3个特征子集为用EBIC-FS方法进行特征选择后建立预测模型的数据集。

图片[20]-使用EBIC的软件故障特征选择方法*-游戏花园

Table 7 EBIC values of candidate models under M&R-Mylyn dataset表7 在M&R-Mylyn数据集下待选模型EBIC值

图片[21]-使用EBIC的软件故障特征选择方法*-游戏花园

Table 8 EBIC values of candidate models under Promise-ant1.7 dataset表8 在Promise-ant1.7数据集下待选模型EBIC值

图片[22]-使用EBIC的软件故障特征选择方法*-游戏花园

Table 9 EBIC values of candidate models under Promise-xalan2.6 dataset表9 在Promise-xalan2.6数据集下待选模型EBIC值

4.4.2 预测模型性能结果

为验证本文方法有效性,在基准数据集上进行故障预测实验,本文方法与基线方法所对应特征集均采用逻辑回归(LR)、朴素贝叶斯(NB)、决策树(DT)、K近邻(KNN)、随机森林(RF)预测器进行模型建立及故障预测,记录其10×10折交叉验证平均预测结果并进行比较。表10~表12记录了3个数据集各分类器预测结果,图3~图5分别显示了3个数据集上,不同方法取得的综合性能指标F-measure的对比情况。

从表10~表12可简单看出,本文EBIC-FS方法在M&R-Mylyn数据集上5种分类器均取得较优结果,与CompleteSet、Chi-Square、Correlation、ReliefF、CFS方法相比,各项指标均有提升;在Promise-ant1.7数据集上,除部分分类器Recall值略低于基线方法、部分FPR高于基线方法外,其余指标均有所提升,其中本文方法综合性能F-measure均优于基线方法;在Promise-xalan2.6数据集上,本文方法NB分类器的FPR较高,其余各指标均优于CompleteSet、Chi-Square、Correlation、ReliefF、CFS方法。

在3个数据集上,本文方法准确率Accuracy较高,表征正确分类所占比例高,表明本文方法所选特征子集建立的预测模型将大部分模块正确标记,预测能力较强;精确度Precision提升表明在被标记为“1”的模块中,真实值为“1”即有故障的模块比例提升,表明本文方法对建立的故障预测模型预测性能有正向影响;Recall指标表明真实值为“1”的程序模块在预测过程中被标记为“1”,该指标提升是一个较为理想的状态,表明正确预测出有故障程序模块的比例提升;由于Recall和Precision之间存在一定矛盾,故F-measure为一个更好、更可靠的评价指标,F值的大幅提升证明了本文方法建立的预测模型有较为良好的综合性能,其预测能力较佳;FPR的降低表征误报率的降低,可减少软件开发和维护人员不必要的检查。

图片[23]-使用EBIC的软件故障特征选择方法*-游戏花园

Table 10 Results of defect prediction under M&R-Mylyn dataset表10 在M&R-Mylyn数据集下故障预测结果

图片[24]-使用EBIC的软件故障特征选择方法*-游戏花园

Table 11 Results of defect prediction under Promise-ant1.7 dataset表11 在Promise-ant1.7数据集下故障预测结果

4.4.3 结果分析

4.4.3.1 RQ1分析

本小节对比EBIC-FS方法所选特征子集与原特征集建立的预测模型性能,针对RQ1进行回答与分析。表13~表15显示了用EBIC-FS方法选择特征比不进行特征选择即进行故障预测在5个指标Accuracy、Precision、Recall、F-measure、FPR上的提升情况;图6~图8为各数据集EBIC-FS方法与CompleteSet建立预测的模型的综合性能F-measure对比。

图片[25]-使用EBIC的软件故障特征选择方法*-游戏花园

Table 12 Results of defect prediction under Promise-xalan2.6 dataset表12 在Promise-xalan2.6数据集下故障预测结果

对比EBIC-FS方法与不进行特征选择的故障预测实验结果可看出:

(1)在M&R-Mylyn上,用本文方法EBIC-FS以5个分类器LR、NB、DT、KNN、RF建立的预测模型相比不进行特征选择即建立预测模型Accuracy平均提升33.1%,Precision平均提升33.9%,Recall平均提升37.7%,F-measure指标平均提升38.9%,FPR平均降低86.6%。在Promise-ant1.7上,Accuracy平均提升12.6%,Precision平均提升17.0%,Recall平均提升16.3%,在LR上略有降低,F-measure指标平均提升17.3%,FPR在LR、DT、RF上降低,在NB、KNN上升高。在Promise-xalan2.6上,Accuracy平均提升21.4%,Precision平均提升15.9%,Recall平均提升29.3%,Fmeasure指标平均提升23.9%,FPR平均降低40.7%,在NB上有升高。

图片[26]-使用EBIC的软件故障特征选择方法*-游戏花园

Fig.3 Comparison of F-measure of each model under M&R-Mylyn dataset图3 在M&R-Mylyn数据集下各模型F-measure指标对比

图片[27]-使用EBIC的软件故障特征选择方法*-游戏花园

Fig.4 Comparison of F-measure of each model under Promise-ant1.7 dataset图4 在Promise-ant1.7数据集下各模型F-measure指标对比

图片[28]-使用EBIC的软件故障特征选择方法*-游戏花园

Fig.5 Comparison of F-measure of each model under Promise-xalan2.6 dataset图5 在Promise-xalan2.6数据集下各模型F-measure指标对比

图片[29]-使用EBIC的软件故障特征选择方法*-游戏花园

Table 13 Improvement of each indicator under M&R-Mylyn dataset:RQ1表13 在M&R-Mylyn数据集下各指标提升情况:RQ1 %

图片[30]-使用EBIC的软件故障特征选择方法*-游戏花园

Table 14 Improvement of each indicator under Promise-ant1.7 dataset:RQ1表14 在Promise-ant1.7数据集下各指标提升情况:RQ1 %

图片[31]-使用EBIC的软件故障特征选择方法*-游戏花园

Table 15 Improvement of each indicator under Promise-xalan2.6 dataset:RQ1表15 在Promise-xalan2.6数据集下各指标提升情况:RQ1 %

图片[32]-使用EBIC的软件故障特征选择方法*-游戏花园

Fig.6 Comparison of F-measure of each model under M&R-Mylyn dataset:RQ1图6 在M&R-Mylyn数据集下各模型F-measure指标对比:RQ1

图片[33]-使用EBIC的软件故障特征选择方法*-游戏花园

Fig.7 Comparison of F-measure of each model under Promise-ant1.7 dataset:RQ1图7 在Promise-ant1.7数据集下各模型F-measure指标对比:RQ1

图片[34]-使用EBIC的软件故障特征选择方法*-游戏花园

Fig.8 Comparison of F-measure of each model under Promise-xalan2.6 dataset:RQ1图8 在Promise-xalan2.6数据集下各模型F-measure指标对比:RQ1

(2)在3个数据集上,与基线方法相比,均为NB模型的故障预测性能提升幅度最大,综合性能Fmeasure相比基线方法在M&R-Mylyn上提升了78.1%,在Promise-ant1.7上提升了30.2%,在Promisexalan2.6上提升了35.9%。

(3)在M&R-Mylyn上,EBIC-FS方法在DT模型上取得最佳预测性能,F-measure值达0.923;在Promise-ant1.7上,EBIC-FS方法在NB模型上取得最佳预测性能,F-measure值达0.874;在Promisexalan2.6上,EBIC-FS方法在KNN模型上取得最佳预测性能,F-measure值达0.911。

(4)实验结果验证了本文方法的有效性,能提升预测模型性能。

4.4.3.2 RQ2分析

本小节分别对比EBIC-FS方法与Chi-Square方法、Correlation方法、ReliefF方法所选特征子集建立的预测模型性能,针对RQ2进行回答与分析。表16~表24分别显示了EBIC-FS方法比Chi-Square、Correlation、ReliefF方法所选特征子集建立的预测模型在5个指标Accuracy、Precision、Recall、F-measure、FPR上的提升情况;图9~图11为EBIC-FS方法与Chi-Square、Correlation、ReliefF方法建立的预测模型的综合性能F-measure对比。

图片[35]-使用EBIC的软件故障特征选择方法*-游戏花园

Table 16 Improvement of each indicator under M&R-Mylyn dataset:RQ2-Chi-Square表16 在M&R-Mylyn数据集下各指标提升情况:RQ2-Chi-Square %

图片[36]-使用EBIC的软件故障特征选择方法*-游戏花园

Table 17 Improvement of each indicator under Promise-ant1.7 dataset:RQ2-Chi-Square表17 在Promise-ant1.7数据集下各指标提升情况:RQ2-Chi-Square %

图片[37]-使用EBIC的软件故障特征选择方法*-游戏花园

Table 18 Improvement of each indicator under Promise-xalan2.6 dataset:RQ2-Chi-Square表18 在Promise-xalan2.6数据集下各指标提升情况:RQ2-Chi-Square %

图片[38]-使用EBIC的软件故障特征选择方法*-游戏花园

Table 20 Improvement of each indicator under Promise-ant1.7 dataset:RQ2-Correlation表20 在Promise-ant1.7数据集下各指标提升情况:RQ2-Correlation %

图片[39]-使用EBIC的软件故障特征选择方法*-游戏花园

Table 19 Improvement of each indicator under M&R-Mylyn dataset:RQ2-Correlation表19 在M&R-Mylyn数据集下各指标提升情况:RQ2-Correlation %

图片[40]-使用EBIC的软件故障特征选择方法*-游戏花园

Table 21 Improvement of each indicator under Promise-xalan2.6 dataset:RQ2-Correlation表21 在Promise-xalan2.6数据集下各指标提升情况:RQ2-Correlation %

图片[41]-使用EBIC的软件故障特征选择方法*-游戏花园

Table 22 Improvement of each indicator under M&R-Mylyn dataset:RQ2-ReliefF表22 在M&R-Mylyn数据集下各指标提升情况:RQ2-ReliefF %

图片[42]-使用EBIC的软件故障特征选择方法*-游戏花园

Table 23 Improvement of each indicator under Promise-ant1.7 dataset:RQ2-ReliefF表23 在Promise-ant1.7数据集下各指标提升情况:RQ2-ReliefF %

对比本文方法EBIC-FS与三种特征排序方法Chi-square、Correlation、ReliefF所选特征子集建立的预测模型性能的实验结果可看出:

(1)在M&R-Mylyn上,本文方法与Chi-Square相比,所选特征子集建立的预测模型在Accuracy平均提升45.9%,Precision平均提升40.4%,Recall平均提升66.6%,F-measure指标平均提升61.0%,FPR平均降低87.0%。与Correlation相比,Accuracy平均提升40.3%,Precision平均提升38.3%,Recall平均提升49.5%,F-measure指标平均提升48.2%,FPR平均降低89.2%。与ReliefF相比,Accuracy平均提升46.9%,Precision平均提升48.8%,Recall平均提升53.7%,Fmeasure指标平均提升55.1%,FPR平均降低89.2%。

图片[43]-使用EBIC的软件故障特征选择方法*-游戏花园

Table 24 Improvement of each indicator under Promise-xalan2.6 dataset:RQ2-ReliefF表24 在Promise-xalan2.6数据集下各指标提升情况:RQ2-ReliefF %

图片[44]-使用EBIC的软件故障特征选择方法*-游戏花园

Fig.9 Comparison of F-measure of each model under M&R-Mylyn dataset:RQ2图9 在M&R-Mylyn数据集下各模型F-measure指标对比:RQ2

图片[45]-使用EBIC的软件故障特征选择方法*-游戏花园

Fig.10 Comparison of F-measure of each model under Promise-ant1.7 dataset:RQ2图10 在Promise-ant1.7数据集下各模型F-measure指标对比:RQ2

图片[46]-使用EBIC的软件故障特征选择方法*-游戏花园

Fig.11 Comparison of F-measure of each model under Promise-xalan2.6 dataset:RQ2图11 在Promise-xalan2.6数据集下各模型F-measure指标对比:RQ2

(2)在Promise-ant1.7上,本文方法与Chi-Square相比,所选特征子集建立的预测模型在Accuracy平均提升14.8%,Precision平均提升18.1%,Recall平均提升22.1%,在LR上略有降低,F-measure指标平均提升21.7%,FPR在LR、DT、RF上降低,在NB、KNN上升高。与Correlation相比,Accuracy平均提升14.0%,Precision平均提升18.6%,Recall平均提升19.6%,在LR上略有降低,F-measure指标平均提升20.1%,FPR在LR、DT、RF上降低,在NB、KNN上升高。与ReliefF相比,Accuracy平均提升22.3%,Precision平均提升34.3%,Recall平均提升6.5%,在LR、NB上略有降低,F-measure指标平均提升21.4%,FPR平均降低49.1%。

(3)在Promise-xalan2.6上,本文方法与Chi-Square相比,所选特征子集建立的预测模型在Accuracy平均提升20.9%,Precision平均提升13.9%,Recall平均提升29.2%,F-measure指标平均提升23.2%,FPR平均降低37.7%,在NB上升高。与Correlation相比,Accuracy平均提升26.7%,Precision平均提升21.3%,Recall平均提升35.6%,F-measure指标平均提升32.9%,FPR平均降低48.2%,在NB上升高。与ReliefF相比,Accuracy平均提升26.2%,Precision平均提升21.9%,Recall平均提升34.1%,F-measure指标平均提升32.4%,FPR平均降低47.9%,在NB上升高。

(4)相较于特征排序方法Chi-Square、Correlation、ReliefF,EBIC-FS方法有效性较高,所选特征子集建立的预测模型综合性能有较大提升。

4.4.3.3 RQ3分析

本小节对比EBIC-FS方法与CFS方法所选特征数量及对应特征子集建立的预测模型性能,针对RQ3进行回答与分析。表25~表27为不同特征选择方法所选特征数量及占原数据集特征个数的百分比,表28~表30显示了EBIC-FS方法比CFS方法所选特征子集建立的预测模型在5个指标Accuracy、Precision、Recall、F-measure、FPR上的提升情况;图12~图14为EBIC-FS方法与CFS方法建立的预测模型的综合性能F-measure对比。

图片[47]-使用EBIC的软件故障特征选择方法*-游戏花园

Table 25 Number and proportion of features of each dataset under M&R-Mylyn dataset表25 在M&R-Mylyn数据集下各特征集特征数量及占比

图片[48]-使用EBIC的软件故障特征选择方法*-游戏花园

Table 26 Number and proportion of features of each dataset under Promise-ant1.7 dataset表26 在Promise-ant1.7数据集下各特征集特征数量及占比

图片[49]-使用EBIC的软件故障特征选择方法*-游戏花园

Table 27 Number and proportion of features of each dataset under Promise-xalan2.6 dataset表27 在Promise-xalan2.6数据集下各特征集特征数量及占比

图片[50]-使用EBIC的软件故障特征选择方法*-游戏花园

Table 28 Improvement of each indicator under M&R-Mylyn dataset:RQ3表28 在M&R-Mylyn数据集下各指标提升情况:RQ3 %

图片[51]-使用EBIC的软件故障特征选择方法*-游戏花园

Table 29 Improvement of each indicator under Promise-ant1.7 dataset:RQ3表29 在Promise-ant1.7数据集下各指标提升情况:RQ3 %

图片[52]-使用EBIC的软件故障特征选择方法*-游戏花园

Table 30 Improvement of each indicator under Promise-xalan2.6 dataset:RQ3表30 在Promise-xalan2.6数据集下各指标提升情况:RQ3 %

图片[53]-使用EBIC的软件故障特征选择方法*-游戏花园

Fig.12 Comparison of F-measure of each model under M&R-Mylyn dataset:RQ3图12 在M&R-Mylyn数据集下各模型F-measure指标对比:RQ3

图片[54]-使用EBIC的软件故障特征选择方法*-游戏花园

Fig.13 Comparison of F-measure of each model under Promise-ant1.7 dataset:RQ3图13 在Promise-ant1.7数据集下各模型F-measure指标对比:RQ3

对比EBIC-FS方法与特征子集选择方法CFS所选特征个数及对应特征子集建立的预测模型性能的实验结果可看出:

图片[55]-使用EBIC的软件故障特征选择方法*-游戏花园

Fig.14 Comparison of F-measure of each model under Promise-xalan2.6 dataset:RQ3图14 在Promise-xalan2.6数据集下各模型F-measure指标对比:RQ3

(1)在M&R-Mylyn上,用本文方法所选特征子集建立的预测模型比CFS方法所选特征子集建立的预测模型Accuracy平均提升31.8%,Precision平均提升31.8%,Recall平均提升40.1%,F-measure平均提升39.3%,FPR平均降低86.0%。

(2)在Promise-ant1.7上,用本文方法所选特征子集建立的预测模型比CFS方法所选特征子集建立的预测模型Accuracy平均提升14.0%,Precision平均提升22.2%,Recall平均提升9.9%,F-measure平均提升16.2%,FPR平均降低26.7%,在KNN上升高。

(3)在Promise-xalan2.6上,用本文方法所选特征子集建立的预测模型比CFS方法所选特征子集建立的预测模型Accuracy平均提升20.3%,Precision平均提升15.6%,Recall平均提升24.8%,F-measure平均提升21.7%,FPR平均降低42.9%,在NB上有升高。

(4)EBIC-FS方法有效压缩了特征维度。在M&R-Mylyn上,相比CFS方法所选特征占原特征集的21.9%,本文方法所选特征仅为原特征集的12.5%;在Promise-ant1.7上,相比CFS方法所选特征占原特征集的50.0%,本文方法所选特征为原特征集的35.0%;在Promise-xalan2.6上,相比CFS方法所选特征占原特征集的55.0%,本文方法所选特征为原特征集的20.0%。

(5)特征子集选择方法CFS压缩了特征维度,降低预测模型复杂性;与之相比,EBIC-FS方法在压缩了特征维度的同时提升了预测模型的综合性能。

5 存在的局限性及不足

本文方法存在局限性及不足,本章对其进行讨论,具体如下:

(1)为在各数据集上方便对比本文方法及不同基线特征选择方法,本文用5个分类器训练故障预测模型时均使用默认参数,未来可通过调参使训练后的故障预测模型取得更优预测结果。

(2)本文方法令EBIC公式中的参数γ=1,为最大程度压缩待选特征子集中的特征个数,但所选特征子集未必是能在特征维度上与对数据集的描述能力之间达到最佳平衡的特征子集,未来可根据数据集情况调整γ取值,以选出最佳特征子集。

(3)本文方法未评估所有特征子集的EBIC值,所选特征子集并非最佳特征子集,是一部分特征子集中的“最佳”特征子集。

(4)本文使用公开数据集M&R-Mylyn、Promiseant1.7、Promise-xalan2.6的故障数据进行实验,仅与三种特征排序方法和一种特征子集选择方法进行对比,一般性有一定局限,未来可使用其他公开数据集进行实验,与更多特征排序、特征子集选择及其他数据预处理方法进行对比。

6 结束语

软件故障预测通过软件历史数据建立预测模型,帮助开发人员及质量保证人员集中关注易发生故障的软件模块;特征选择等数据预处理方法能提高故障预测模型的性能。本文提出EBIC-FS特征选择方法,先将故障数据集中各特征进行排序,并根据特征排名列表对待选特征子集用EBIC准则进行评估,以确定“最佳特征子集”。本文在公开数据集上验证了EBIC-FS方法的有效性,与特征全集、Chi-Square、Correlation、ReliefF特征排序方法、CFS特征子集选择方法进行对比,取得了较好的实验结果,表明EBIC-FS方法能有效提高故障预测模型的综合性能。未来可进一步对故障预测中的特征选择工作进行扩展:(1)调整预测模型参数以获得更好的模型性能;(2)调整EBIC参数γ取值以获得更好的实验结果;(3)采用不同数据集进行实验,与更多其他特征选择方法进行对比,验证本文方法的一般性。

THE END
喜欢就支持一下吧
点赞199 分享