潘春霞,楊秋輝,譚武坤,鄧惠心,伍 佳
(四川大學(xué)計(jì)算機(jī)學(xué)院,成都 610065)
(?通信作者電子郵箱yangqiuhui@scu.edu.cn)
軟件缺陷預(yù)測(cè)通過(guò)分析與缺陷有關(guān)的歷史數(shù)據(jù),比如源代碼、缺陷報(bào)告、測(cè)試記錄、缺陷修復(fù)記錄等,發(fā)現(xiàn)缺陷在軟件中的分布規(guī)律,構(gòu)建缺陷預(yù)測(cè)模型,對(duì)新提交的軟件版本進(jìn)行缺陷分布的預(yù)測(cè),以幫助軟件測(cè)試人員有的放矢地進(jìn)行軟件測(cè)試,降低軟件的測(cè)試成本。軟件資源庫(kù)中存儲(chǔ)了與缺陷有關(guān)的歷史數(shù)據(jù),但從軟件資源庫(kù)里收集的數(shù)據(jù)集往往具有多維度的問(wèn)題,數(shù)據(jù)特征很多;對(duì)于缺陷數(shù)據(jù),還有不平衡問(wèn)題,即有缺陷的數(shù)據(jù)是少數(shù)。數(shù)據(jù)特征的選擇和數(shù)據(jù)的平衡處理問(wèn)題是缺陷預(yù)測(cè)中數(shù)據(jù)預(yù)處理的關(guān)鍵。近年來(lái),一些學(xué)者針對(duì)缺陷預(yù)測(cè)問(wèn)題進(jìn)行了相應(yīng)的研究,如Ibrahim 等[1]、Wang等[2],但他們?cè)谔卣鬟x擇后,僅使用隨機(jī)過(guò)采樣方法處理不平衡數(shù)據(jù),隨機(jī)復(fù)制有缺陷樣本,易導(dǎo)致模型的過(guò)擬合問(wèn)題。因此本文將特征選擇算法和其他的不平衡處理算法結(jié)合,對(duì)缺陷類進(jìn)行分析后再合成新缺陷樣本,以更加有效提升模型的訓(xùn)練數(shù)據(jù)質(zhì)量。
軟件缺陷數(shù)據(jù)特征主要分為兩大類:軟件的靜態(tài)特征和基于開發(fā)過(guò)程的軟件動(dòng)態(tài)特征。文獻(xiàn)[3-5]表明:基于開發(fā)過(guò)程特征構(gòu)建的軟件缺陷預(yù)測(cè)模型的性能優(yōu)于基于軟件靜態(tài)特征構(gòu)建的軟件缺陷預(yù)測(cè)模型。本文為提高缺陷預(yù)測(cè)模型訓(xùn)練數(shù)據(jù)的質(zhì)量,提出在數(shù)據(jù)特征選取上采用軟件開發(fā)過(guò)程特征數(shù)據(jù),同時(shí)創(chuàng)新性地提出擴(kuò)展過(guò)程特征,即軟件演化版本間靜態(tài)特征的變化值,將靜態(tài)特征的變化值作為擴(kuò)展過(guò)程特征,豐富了過(guò)程特征內(nèi)涵;采用聚類分析的特征選擇方法,去掉數(shù)據(jù)集中的非關(guān)鍵特征和冗余特征;針對(duì)缺陷數(shù)據(jù)類的不平衡問(wèn)題,提出改進(jìn)的Borderline-SMOTE(Borderline-Synthetic Minority Oversampling Technique),使訓(xùn)練數(shù)據(jù)集的數(shù)據(jù)相對(duì)平衡。
軟件缺陷預(yù)測(cè)中,使用哪些特征建立預(yù)測(cè)模型,對(duì)預(yù)測(cè)結(jié)果的質(zhì)量有很大影響。文獻(xiàn)[3-5]對(duì)使用過(guò)程特征和靜態(tài)特征分別建立的缺陷預(yù)測(cè)模型的預(yù)測(cè)能力進(jìn)行了對(duì)比,得到相同的結(jié)論:使用過(guò)程特征比使用靜態(tài)特征建立的預(yù)測(cè)模型效率更高;文獻(xiàn)[6-7]中也提到:用靜態(tài)特征結(jié)合開發(fā)過(guò)程特征建立的缺陷預(yù)測(cè)模型具有更好的缺陷預(yù)測(cè)性能;文獻(xiàn)[8]通過(guò)調(diào)查過(guò)程特征在缺陷預(yù)測(cè)中的作用,總結(jié)了部分常被一些文獻(xiàn)使用的過(guò)程特征,其中包括不同提交者數(shù)量、修改行數(shù)、先前版本中修復(fù)缺陷個(gè)數(shù)等。本文參考上述工作,使用常規(guī)開發(fā)過(guò)程特征和擴(kuò)展過(guò)程特征作為備選訓(xùn)練特征,將具有這些特征的數(shù)據(jù)構(gòu)成了原始的高維數(shù)據(jù)。
特征選擇是降低特征空間維數(shù)的重要手段。文獻(xiàn)[9]通過(guò)對(duì)高維數(shù)據(jù)集使用不同的特征選擇算法進(jìn)行實(shí)驗(yàn)發(fā)現(xiàn):大部分時(shí)候,缺陷預(yù)測(cè)模型只需要使用到原數(shù)據(jù)集的10%的特征;文獻(xiàn)[10]使用了一種混合特征選擇方法,通過(guò)考慮不同的特征排序評(píng)估方法和特征子集評(píng)估方法發(fā)現(xiàn):移除85%的特征并不會(huì)大幅度降低預(yù)測(cè)性能;文獻(xiàn)[11]提出了特征選擇方法FECAR(FEature Clustering And feature Ranking),該方法通過(guò)對(duì)特征進(jìn)行聚類和排序,能有效去除冗余特征和非關(guān)鍵特征。本文參考以上結(jié)論,使用基于聚類分析的特征選擇算法,實(shí)現(xiàn)數(shù)據(jù)降維處理。
在解決數(shù)據(jù)類不平衡方面,文獻(xiàn)[12]總結(jié)了一些常用的過(guò)采樣方法:ADASYN(ADAptive SYNthetic sampling approach)、Borderline-SMOTE 和Safe Level SMOTE。對(duì)于每個(gè)少數(shù)類,ADASYN[13]使用密度分布來(lái)自動(dòng)確定需要合成的樣本數(shù)量,不同的少數(shù)類樣本采用不同的權(quán)重分布;Borderline-SMOTE 算法[14]則關(guān)注少數(shù)類中處于邊界的樣本,針對(duì)這些樣本進(jìn)行重采樣,從而合成新的樣本;Safe Level SMOTE[15]則通過(guò)給每個(gè)少數(shù)類實(shí)例分配一個(gè)安全級(jí)別值,讓合成新樣本的安全級(jí)別更接近安全級(jí)別的最大值,從而達(dá)到合成新樣本的目的;文獻(xiàn)[16]通過(guò)在7 個(gè)數(shù)據(jù)集上分別使用SMOTE、Borderline-SMOTE 和ADASYN 過(guò)采樣方法,發(fā)現(xiàn)Borderline-SMOTE 方法比其他方法具有更好的表現(xiàn);文獻(xiàn)[17]認(rèn)為在Borderline-SMOTE 方法中,非邊界少數(shù)類樣本無(wú)法得到充分考慮,因此提出了基于局部自適應(yīng)距離的過(guò)采樣方法LADSMOTE (Locally Adaptive Distance-Synthetic Minority Oversampling Technique),該方法建立的模型比Borderline-SMOTE 方法建立的模型在F-measure 值上平均提升了2.17個(gè)百分點(diǎn)。本文參考上述結(jié)論,采用Borderline-SMOTE 算法,并對(duì)其提出改進(jìn),用以解決類不平衡問(wèn)題。
首先,以軟件項(xiàng)目中的源代碼文件為單位,從軟件版本控制庫(kù)中開發(fā)人員提交的日志文件中收集源代碼文件的過(guò)程特征;然后,根據(jù)缺陷追蹤系統(tǒng)的缺陷數(shù)據(jù),對(duì)有缺陷的源代碼文件進(jìn)行缺陷標(biāo)記;最后,在得到的原始數(shù)據(jù)集上,使用基于聚類分析的特征選擇算法,去除原始數(shù)據(jù)集中的非關(guān)鍵特征和冗余特征,得到有效訓(xùn)練數(shù)據(jù)集。
數(shù)據(jù)來(lái)源是軟件資源庫(kù)、軟件版本控制庫(kù)等記錄軟件開發(fā)過(guò)程的數(shù)據(jù)庫(kù)。利用軟件項(xiàng)目開發(fā)的日志信息,獲取軟件開發(fā)的過(guò)程特征數(shù)據(jù)。根據(jù)相關(guān)文獻(xiàn)[3-8],軟件缺陷的產(chǎn)生與軟件代碼的修改、開發(fā)者數(shù)量、功能的增加、原缺陷數(shù)、代碼的復(fù)雜度、操作符的變化等因素相關(guān),本文共收集了55 個(gè)與這些因素有關(guān)的過(guò)程特征(包含擴(kuò)展過(guò)程特征),表1 列出了部分收集的開發(fā)過(guò)程特征。
表1 與軟件缺陷相關(guān)的部分軟件開發(fā)過(guò)程特征Tab.1 Some software development process features related to software defects
這些特征中,部分特征需要根據(jù)日志文件中的信息,通過(guò)編寫統(tǒng)計(jì)分析程序獲得,比如:平均添加行數(shù)(Average Lines of Code Added,ALCA)、先前版本bug 出現(xiàn)概率(Historical Bug Rate,HBR)等。式(1)和式(2)分別是ALCA、HBR 特征的計(jì)算公式:
擴(kuò)展過(guò)程特征表示了某些靜態(tài)特征的變化情況,可通過(guò)Understand 工具獲取每個(gè)文件不同版本的靜態(tài)特征值,再通過(guò)式(3)計(jì)算獲得擴(kuò)展過(guò)程特征,fs1和fs2分別為同一個(gè)文件相鄰版本前后的靜態(tài)特征值。
最后,再以軟件源代碼文件為單位,匹配日志中文件的缺陷信息和軟件缺陷跟蹤系統(tǒng)的歷史缺陷信息,確定文件是否含有缺陷,并對(duì)文件進(jìn)行人工缺陷標(biāo)記,得到原始數(shù)據(jù)集。
上述方式構(gòu)建的原始數(shù)據(jù)集中過(guò)程特征總數(shù)(包含擴(kuò)展過(guò)程特征)為55,數(shù)量較多,因此需要使用特征選擇算法去除其中存在的非關(guān)鍵特征和冗余特征。Hall[18]證明了:好的特征子集由與類標(biāo)高度相關(guān)但特征之間不相關(guān)的特征組成。例如:操作符的數(shù)量和操作數(shù)的數(shù)量?jī)蓚€(gè)特征都與類標(biāo)高度相關(guān),但二者成正比例關(guān)系,關(guān)聯(lián)度較高,存在一定的冗余,故二者組成的子集不是質(zhì)量好的子集。本文采用基于聚類分析的特征選擇方法[11],主要分為2步:特征聚類和特征排序。
特征聚類 利用對(duì)稱不確定性(Symmetric Uncertainty,SU)計(jì)算特征之間的關(guān)聯(lián)度,對(duì)特征進(jìn)行聚類,使類中特征的關(guān)聯(lián)度高,類間特征的關(guān)聯(lián)度低。在選取類的初始代表特征時(shí),使用信息增益(Information Gain,IG)最高的前K個(gè)特征。
特征排序 使用信息增益IG 計(jì)算每個(gè)特征與類標(biāo)相關(guān)度,并對(duì)結(jié)果排序,選取每類中相關(guān)度最高的幾個(gè)特征。圖1描述了其流程。
圖1 基于聚類分析的特征選擇算法流程Fig.1 Flowchart of feature selection algorithm based on clustering analysis
原始數(shù)據(jù)集經(jīng)過(guò)基于聚類分析的特征選擇后,能去除其中的非關(guān)鍵特征和冗余特征,縮減數(shù)據(jù)規(guī)模,減少模型的訓(xùn)練時(shí)間。
在收集的數(shù)據(jù)集上,無(wú)缺陷的數(shù)據(jù)集一般都遠(yuǎn)大于有缺陷的數(shù)據(jù)集,存在數(shù)據(jù)不平衡問(wèn)題,會(huì)嚴(yán)重影響缺陷分類器的性能。目前在機(jī)器學(xué)習(xí)領(lǐng)域,調(diào)整類不平衡問(wèn)題可以從數(shù)據(jù)層面和算法層面入手。從數(shù)據(jù)層面解決包含過(guò)采樣和欠采樣方法。在一些小型項(xiàng)目和版本數(shù)量較少的項(xiàng)目中,缺陷樣本數(shù)量很少,如果使用欠采樣方法,將導(dǎo)致最后的訓(xùn)練樣本數(shù)據(jù)量較少,不能得到好的預(yù)測(cè)模型。經(jīng)過(guò)作者實(shí)驗(yàn),在本文的數(shù)據(jù)集上使用過(guò)采樣方法比使用欠采樣方法建立的模型具有更好的性能表現(xiàn),因此本文采用過(guò)采樣方法。Borderline-SMOTE 方法是一種常用的過(guò)采樣方法,其主要實(shí)現(xiàn)流程是:首先,確定位于少數(shù)類和多數(shù)類之間的邊界少數(shù)類樣本,其樣本數(shù)為dnum;然后,在每個(gè)邊界少數(shù)類樣本的knum 個(gè)近鄰少數(shù)類樣本中隨機(jī)選取snum(snum≤knum)個(gè)少數(shù)類樣本,以合成新的少數(shù)類樣本;最終,少數(shù)類的個(gè)數(shù)=原始少數(shù)類個(gè)數(shù)+dnum*snum,大部分情況下,不與多數(shù)類個(gè)數(shù)一致。
合成新樣本時(shí),首先計(jì)算邊界缺陷樣本q 和它鄰近缺陷樣本之間的差dif,新樣本s 合成公式為:s=q+random(0,1)*dif,random(0,1)表示(0,1)的隨機(jī)數(shù)。假設(shè)樣本特征集是(修改頻率,開發(fā)人員經(jīng)驗(yàn),…),其中一個(gè)有缺陷實(shí)例q1=(10,100,…),q1的近鄰有缺陷實(shí)例q2=(18,80,…),則dif=q1-q2=(-8,20,…),假設(shè)random(0,1)是0.5,則新的有缺陷實(shí)例s=q1+0.5*dif=(6,110,…)。在實(shí)際中,修改頻率越大,文件出現(xiàn)缺陷的可能性應(yīng)該越大,但新合成的實(shí)例s 的修改頻率比q1和q2都小,更符合無(wú)缺陷情況。同時(shí),s 的開發(fā)人員經(jīng)驗(yàn)比q1和q2都高,也更符合無(wú)缺陷情況。因此,該方法合成的樣本值不符合真實(shí)情況。
為解決上述問(wèn)題,本文對(duì)Borderline-SMOTE 方法做出改進(jìn),根據(jù)每個(gè)特征的具體特點(diǎn),做如下修改:首先,對(duì)dif 中所有元素取絕對(duì)值;然后,對(duì)于每個(gè)特征,如果該特征的值越小,樣本出現(xiàn)缺陷的概率越大,則該特征對(duì)應(yīng)的dif中的元素值取負(fù)值,否則保持對(duì)應(yīng)特征值為正值,如:開發(fā)人員經(jīng)驗(yàn)、類連續(xù)不含有缺陷的周期等特征對(duì)應(yīng)的dif中的元素值應(yīng)取負(fù)值,修改次數(shù)、類中方法個(gè)數(shù)變化等特征對(duì)應(yīng)值應(yīng)取正值。通過(guò)分析具體特征和缺陷出現(xiàn)的關(guān)系,修改dif以使其更加合理。改進(jìn)的Borderline-SMOTE算法描述如算法1所示。
算法1 改進(jìn)的Borderline-SMOTE算法。
輸入 缺陷樣本集P={p1,p2,…,ppnum},無(wú)缺陷樣本集N={n1,n2,…,nnnum},有缺陷邊界樣本DRANGER={},缺陷樣本的鄰近樣本個(gè)數(shù)mnum,DRANGER 中邊界缺陷樣本的鄰近缺陷樣本個(gè)數(shù)knum,每個(gè)邊界缺陷樣本合成新的樣本數(shù)snum(1 ≤snum ≤knum),判斷dif元素值取正/負(fù)的數(shù)組 A={a[1],a[2],…,a[m]}(m為特征個(gè)數(shù),a[m]=0或1)。
輸出 新合成的缺陷類樣本OS。
使用改進(jìn)的Borderline-SMOTE 算法對(duì)數(shù)據(jù)集進(jìn)行處理,能增加更符合實(shí)際樣本特征的缺陷類樣本實(shí)例,解決類不平衡問(wèn)題,提升數(shù)據(jù)集質(zhì)量。
本文采用隨機(jī)森林算法訓(xùn)練分類模型,使用精確率(Precision)、召回率(Recall)等指標(biāo)評(píng)價(jià)模型性能,并設(shè)計(jì)了4個(gè)實(shí)驗(yàn)來(lái)驗(yàn)證本文數(shù)據(jù)預(yù)處理方法的有效性。
4.1.1 分類模型
目前,軟件缺陷預(yù)測(cè)領(lǐng)域較常用的分類算法為:樸素貝葉斯分類、決策樹、隨機(jī)森林、邏輯回歸等[3,10,19]。通過(guò)作者的大量實(shí)驗(yàn),發(fā)現(xiàn)隨機(jī)森林分類算法在大多數(shù)數(shù)據(jù)集上有較好的表現(xiàn)。本文從bugzilla 等項(xiàng)目的日志信息中獲取原始數(shù)據(jù)集,進(jìn)行數(shù)據(jù)預(yù)處理后,使用Weka 機(jī)器學(xué)習(xí)庫(kù),選擇隨機(jī)森林分類算法,將預(yù)處理后的數(shù)據(jù)作為訓(xùn)練樣本輸入訓(xùn)練模型。
4.1.2 評(píng)價(jià)指標(biāo)
數(shù)據(jù)的質(zhì)量直接影響分類模型的性能。通過(guò)測(cè)評(píng)模型性能,可間接測(cè)評(píng)數(shù)據(jù)質(zhì)量,若數(shù)據(jù)質(zhì)量較好,則對(duì)應(yīng)的模型性能表現(xiàn)也應(yīng)更好?;煜仃囀窃u(píng)價(jià)模型好壞的展示工具,對(duì)應(yīng)缺陷預(yù)測(cè)主題,其內(nèi)容見表2。
表2 混淆矩陣Tab.2 Confusion matrix
根據(jù)混淆矩陣衍生了各種評(píng)價(jià)指標(biāo),本文采用的評(píng)價(jià)指標(biāo) 為Precision、Recall、F-measure 和ROC(Receiver Operating Characteristics)曲線下面積AUC(Area Under the Curve)。精確率表征預(yù)測(cè)模型識(shí)別的正類樣本中正確的比率,其定義見式(4)。召回率表征預(yù)測(cè)模型對(duì)正類樣本的識(shí)別程度,其定義見式(5)。F-measure是Precision和Recall的調(diào)和平均數(shù),更能整體性地反映模型性能的好壞,其定義見式(6)。ROC曲線橫坐標(biāo)為假陽(yáng)性率FPR(False Positive Rate),縱坐標(biāo)為Recall,假陽(yáng)性率表征無(wú)缺陷實(shí)例被預(yù)測(cè)成有缺陷的概率,其定義見式(7),ROC 曲線越靠近左上方,面積AUC 值越大,模型的性能越好。
4.1.3 實(shí)驗(yàn)內(nèi)容
為了證明本文使用的數(shù)據(jù)預(yù)處理方法的有效性,本文設(shè)計(jì)了以下4 個(gè)實(shí)驗(yàn):1)基于聚類分析的特征選擇算法的有效性驗(yàn)證;2)改進(jìn)的Borderline-SMOTE 算法的有效性驗(yàn)證;3)引入擴(kuò)展過(guò)程特征有效性驗(yàn)證;4)本文方案與文獻(xiàn)[19]方案的對(duì)比。
4.2.1 基于聚類分析的特征選擇算法的有效性驗(yàn)證
為了證明特征選擇算法的有效性,本實(shí)驗(yàn)分別使用原始數(shù)據(jù)和特征選擇后的數(shù)據(jù)建立缺陷預(yù)測(cè)模型。使用的項(xiàng)目數(shù)據(jù)源是:bugzilla、columba、jdt、mozilla、platform、postgres。
在特征收集階段,本文共得到初始過(guò)程特征55 個(gè),其中常用過(guò)程特征為29個(gè),擴(kuò)展過(guò)程特征為26個(gè)。經(jīng)過(guò)多種m(m為最終選擇的特征子集個(gè)數(shù))、K(K 為劃分的簇?cái)?shù))值組合實(shí)驗(yàn)發(fā)現(xiàn):當(dāng)設(shè)置m=30、K=10 時(shí),能夠保證使用選擇的特征訓(xùn)練出的模型性能基本不變;當(dāng)m<30 時(shí),訓(xùn)練出的預(yù)測(cè)模型的F-measure 值開始明顯降低。因此,使用特征選擇算法后,共篩選出30 個(gè)過(guò)程特征,其中常用過(guò)程特征為17 個(gè),擴(kuò)展過(guò)程特征為13個(gè)。篩選出的30個(gè)特征如表3所示。
表3 特征選擇算法篩選出的特征Tab.3 Features selected by feature selection algorithm
實(shí)驗(yàn)結(jié)果顯示,在多數(shù)情況下特征選擇后建立的模型的F-measure值與選擇前模型的F-measure值相差不大,如表4所示。實(shí)驗(yàn)結(jié)果說(shuō)明了非關(guān)鍵特征和冗余特征的存在。
特征選擇降低了訓(xùn)練模型時(shí)間,特征選擇前,使用隨機(jī)森林算法在多個(gè)項(xiàng)目上訓(xùn)練模型的平均時(shí)間為79.63 s,而特征選擇后,訓(xùn)練平均時(shí)間僅為33.49 s,時(shí)間縮短效率為57.94%。在保證模型F-measure 值的同時(shí),極大地縮短了模型的訓(xùn)練時(shí)間。
表4 特征選擇前后模型的F-measure值對(duì)比Tab.4 Comparison of F-measure values of models before and after feature selection
4.2.2 改進(jìn)的Borderline-SMOTE算法的有效性驗(yàn)證
為了證明本文提出的改進(jìn)的Borderline-SMOTE 算法的有效性,本實(shí)驗(yàn)分別使用原始和改進(jìn)的Borderline-SMOTE 方法進(jìn)行數(shù)據(jù)不平衡處理,實(shí)驗(yàn)使用的項(xiàng)目分別是:bugzilla、columba、jdt,mozilla、platform、postgres,處理前后的樣本數(shù)量見表5。改進(jìn)的Borderline-SMOTE方法與原始方法相比,只會(huì)更改新合成樣本的特征值,使特征值更符合真實(shí)情況,并不會(huì)改變新合成樣本的數(shù)量,因此使用兩種方法處理后的缺陷樣本數(shù)量一致。
表5 數(shù)據(jù)不平衡處理前后樣本數(shù)量Tab.5 Samples before and after data imbalance processing
圖2 比較了在采用隨機(jī)森林分類算法時(shí),不同項(xiàng)目在不平衡處理前后對(duì)應(yīng)模型的精確率、召回率、F-measure 和AUC。從圖2 可以看出使用原Borderline-SMOTE 方法和改進(jìn)后的Borderline-SMOTE 方法處理不平衡樣本,都能明顯提升各項(xiàng)模型評(píng)價(jià)指標(biāo),但改進(jìn)后的Borderline-SMOTE 方法在各項(xiàng)指標(biāo)上的表現(xiàn)都優(yōu)于原始方法。相比原始Borderline-SMOTE 方法,使用改進(jìn)后的Borderline-SMOTE 方法進(jìn)行數(shù)據(jù)不平衡處理后,所建立的模型在Precision、Recall、F-measure、AUC 上都有所提升,平均分別提高了2.36、1.8、2.13、2.36 個(gè)百分點(diǎn),證明了改進(jìn)的Borderline-SMOTE 算法處理數(shù)據(jù)不平衡問(wèn)題的有效性。
圖2 樣本不平衡處理前后預(yù)測(cè)效果對(duì)比Fig.2 Comparison of prediction effects before and after sample imbalance processing
4.2.3 引入擴(kuò)展過(guò)程特征有效性驗(yàn)證
為了驗(yàn)證本文提出的擴(kuò)展過(guò)程特征的有效性,本實(shí)驗(yàn)在完成了特征選擇和不平衡處理的6 個(gè)數(shù)據(jù)集上,對(duì)比了在特征集中是否引入擴(kuò)展過(guò)程特征所建立的模型的F-measure值,表6是對(duì)比結(jié)果。
表6 引入擴(kuò)展過(guò)程特征前后模型的F-measure值對(duì)比Tab.6 Comparison of F-measure values of models before and after the introduction of extended process features
由表6 可以看出:在所有項(xiàng)目中,引入了擴(kuò)展過(guò)程特征后所建立的模型都比未引入擴(kuò)展過(guò)程特征所建立的模型性能表現(xiàn)更好,F(xiàn)-measure 值平均提高了3.79%。其中,bugzilla 和columba兩個(gè)項(xiàng)目的提升效果最為明顯,提升率分別為6.19%和6.93%,證明了本文提出的擴(kuò)展過(guò)程特征的有效性。
4.2.4 本文方案與文獻(xiàn)[19]方案的對(duì)比
為了證明本文方案的有效性,將本文提出方案與文獻(xiàn)[19]提出方案進(jìn)行對(duì)比。文獻(xiàn)[19]方案為:使用混合特征,即靜態(tài)特征和動(dòng)態(tài)特征,不對(duì)原始特征集進(jìn)行降維處理,使用隨機(jī)欠采樣方法進(jìn)行類不平衡處理。實(shí)驗(yàn)采用文獻(xiàn)[19]中的項(xiàng)目:Android Universal I.L、ANTLR v4、Elasticsearch、jUnit 等。文獻(xiàn)[19]比較了不同的分類算法構(gòu)建的模型,其中隨機(jī)森林算法構(gòu)建的模型在F-measure指標(biāo)上表現(xiàn)最好,因此本實(shí)驗(yàn)只與其隨機(jī)森林算法建立模型結(jié)果進(jìn)行比較。文獻(xiàn)[19]給出了預(yù)測(cè)模型結(jié)果的F-measure 值和bug 覆蓋率,在bug 覆蓋率指標(biāo)上,文獻(xiàn)[19]方案和本文方案都取得了較好的結(jié)果,因此本文僅展示兩種方案模型的F-measure值對(duì)比結(jié)果,見圖3。
可以看到:所有項(xiàng)目中,本文方案的模型具有更高的F-measure 值,平均提高率為15.79%,其中jUnit 項(xiàng)目提升最大,本文模型的F-measure 值為0.890 9,而文獻(xiàn)[19]模型的F-measure 值為0.659 1,提高了35.17%。在MapDB 項(xiàng)目上,兩者F-measure 值相差不大,本文模型僅提高了0.88%。查看樣本數(shù)據(jù)發(fā)現(xiàn)jUnit 項(xiàng)目的有缺陷樣本和無(wú)缺陷樣本數(shù)量相差較大,而MapDB 項(xiàng)目的有缺陷樣本和無(wú)缺陷樣本數(shù)量之差比其他項(xiàng)目更小,本文數(shù)據(jù)不平衡處理方案在類不平衡明顯的樣本上表現(xiàn)較好。對(duì)于原始數(shù)據(jù)基本平衡情況,經(jīng)過(guò)本文不平衡處理方法后,對(duì)應(yīng)的預(yù)測(cè)模型性能可能僅微小提高,此時(shí)可以不再使用不平衡處理方法。
圖3 文獻(xiàn)[19]方案和本文方案建立模型的F-measure對(duì)比Fig.3 Comparison of F-measure of the models established by the solution in literature[19]and the solution in this paper
本文使用過(guò)程特征作為缺陷預(yù)測(cè)模型的訓(xùn)練特征,分別對(duì)特征選擇和類不平衡處理方法進(jìn)行了研究。通過(guò)軟件資源庫(kù)獲取開發(fā)常用過(guò)程特征和擴(kuò)展過(guò)程特征,構(gòu)建原始數(shù)據(jù)集,采用基于聚類分析的特征選擇方法刪除非關(guān)鍵特征和冗余特征,使用改進(jìn)的Borderline-SMOTE 過(guò)采樣方法合成新的缺陷樣本,以解決數(shù)據(jù)分類不平衡問(wèn)題。實(shí)驗(yàn)采用隨機(jī)森林分類算法構(gòu)建缺陷預(yù)測(cè)模型。通過(guò)實(shí)驗(yàn),證明了本文數(shù)據(jù)預(yù)處理方法的有效性。
本文旨在解決軟件缺陷預(yù)測(cè)中數(shù)據(jù)質(zhì)量問(wèn)題,但還存在諸多不足之處。比如:本文采用的數(shù)據(jù)集擁有大量與缺陷有關(guān)的歷史數(shù)據(jù),對(duì)于某些新的項(xiàng)目或者歷史信息很少的項(xiàng)目,本文方法并不適用,未來(lái)可考慮將本文方法與跨項(xiàng)目缺陷預(yù)測(cè)進(jìn)行結(jié)合。另外,研究收集的缺陷樣本中可能會(huì)存在噪聲數(shù)據(jù),比如開發(fā)人員忘記聲明修復(fù)bugid,將會(huì)導(dǎo)致該樣本被標(biāo)記為無(wú)缺陷。如何有效地發(fā)現(xiàn)并去除噪聲數(shù)據(jù)也是未來(lái)的研究工作之一。