趙 宇,祝 義,2,于 巧,陳小穎
1.江蘇師范大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,江蘇 徐州 221116
2.南京航空航天大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,南京 210016
軟件缺陷預(yù)測(cè)是當(dāng)前軟件測(cè)試和機(jī)器學(xué)習(xí)緊密結(jié)合的一個(gè)研究熱點(diǎn),目的是期望在項(xiàng)目開發(fā)的早期階段預(yù)測(cè)出某些模塊中是否含有缺陷,從而合理地分配測(cè)試資源,最大化資源利用率。目前大部分的學(xué)術(shù)研究都關(guān)注項(xiàng)目?jī)?nèi)缺陷預(yù)測(cè)(Within Project Defect Prediction,WPDP)[1],也就是選擇同一項(xiàng)目的部分?jǐn)?shù)據(jù)集作為訓(xùn)練數(shù)據(jù),剩下的部分作為測(cè)試數(shù)據(jù)來構(gòu)建模型。但是一方面這種模型的普適性太差,不能用于預(yù)測(cè)其他項(xiàng)目;另一方面就是實(shí)際開發(fā)中的項(xiàng)目可能是一個(gè)新啟動(dòng)的軟件項(xiàng)目,沒有歷史數(shù)據(jù)作為訓(xùn)練數(shù)據(jù),因此無法構(gòu)建缺陷預(yù)測(cè)模型。針對(duì)此實(shí)際問題有學(xué)者提出了跨項(xiàng)目缺陷預(yù)測(cè)(Cross Project Defect Prediction,CPDP)[2-3],從其他項(xiàng)目中選擇合適的數(shù)據(jù)集作為訓(xùn)練數(shù)據(jù)來訓(xùn)練缺陷預(yù)測(cè)模型,然后用于預(yù)測(cè)目標(biāo)項(xiàng)目是否含有缺陷。Herbold[4]提出了兩種基于距離相似性的源項(xiàng)目訓(xùn)練數(shù)據(jù)集選擇策略。但是他們的方法與項(xiàng)目?jī)?nèi)缺陷預(yù)測(cè)的性能存在差距。李勇等人[5]提出了一種基于目標(biāo)項(xiàng)目的兩階段篩選訓(xùn)練數(shù)據(jù)集的方法,但是訓(xùn)練出的模型與項(xiàng)目?jī)?nèi)預(yù)測(cè)相比性能提升有限。MA等人[6]從為源項(xiàng)目中的實(shí)例設(shè)置權(quán)重的角度出發(fā),提出一種新穎的跨項(xiàng)目缺陷預(yù)測(cè)方法TNB(Transfer Na?ve Bayes),該方法通過對(duì)目標(biāo)項(xiàng)目數(shù)據(jù)的分布進(jìn)行預(yù)測(cè),來為候選源項(xiàng)目中的實(shí)例設(shè)置權(quán)重,但該方法僅適用于樸素貝葉斯模型。針對(duì)現(xiàn)有研究的不足,本文對(duì)訓(xùn)練數(shù)據(jù)集的選擇方法進(jìn)行了改進(jìn),提出了一種基于分層數(shù)據(jù)篩選的跨項(xiàng)目缺陷預(yù)測(cè)方法。
跨項(xiàng)目缺陷預(yù)測(cè)是使用其他項(xiàng)目的數(shù)據(jù)來預(yù)測(cè)目標(biāo)項(xiàng)目中是否存在軟件缺陷,此前有大量工作證實(shí)了跨項(xiàng)目缺陷預(yù)測(cè)的可行性[7-8]。但是隨著公共數(shù)據(jù)集數(shù)量的增加,在如此龐大的數(shù)據(jù)存儲(chǔ)庫中找到與目標(biāo)項(xiàng)目中的實(shí)例相似的訓(xùn)練數(shù)據(jù)變得十分困難,因此有研究人員從訓(xùn)練數(shù)據(jù)集簡(jiǎn)化的角度來選擇與目標(biāo)項(xiàng)目最相似的源項(xiàng)目和最相似的實(shí)例。Zimmermann等人[8]從項(xiàng)目的上下文因素來計(jì)算項(xiàng)目的相似性,將622對(duì)跨項(xiàng)目預(yù)測(cè)結(jié)果與項(xiàng)目之間的相似性相關(guān)聯(lián),構(gòu)建出決策樹為候選源項(xiàng)目集的選擇提供了參考。He等人[9]探討了源項(xiàng)目數(shù)據(jù)集屬性的分布特征對(duì)于選擇合適的訓(xùn)練數(shù)據(jù)集進(jìn)行跨項(xiàng)目缺陷預(yù)測(cè)是否有價(jià)值,他們考慮了16種不同的分布特征,其中眾數(shù)、中位數(shù)、均值和調(diào)和平均數(shù)等分布特征可以描述屬性取值的中心度量趨勢(shì),而極差、異眾比率、四分位距、標(biāo)準(zhǔn)差和變異系數(shù)可以描述屬性取值的離散趨勢(shì)度量,偏度和峰度可以描述屬性取值的分布形態(tài)。Turhan等人[10]從實(shí)例級(jí)別為目標(biāo)項(xiàng)目里的每個(gè)實(shí)例從源項(xiàng)目中挑選距離最近的k個(gè)實(shí)例。從測(cè)試集角度出發(fā)選擇訓(xùn)練數(shù)據(jù),使用的是k-NN算法,如果目標(biāo)項(xiàng)目中有100個(gè)實(shí)例,則最終選出100×k個(gè)實(shí)例作為訓(xùn)練數(shù)據(jù)集。Peters等人[11]也是從實(shí)例級(jí)別考慮,但是他們認(rèn)為訓(xùn)練數(shù)據(jù)集會(huì)提供比測(cè)試數(shù)據(jù)集更多的有關(guān)缺陷的信息,因此針對(duì)源項(xiàng)目中的每個(gè)實(shí)例,從目標(biāo)項(xiàng)目中識(shí)別出與之距離最近的實(shí)例并進(jìn)行標(biāo)記,隨后對(duì)于目標(biāo)項(xiàng)目中已標(biāo)記的實(shí)例,從源項(xiàng)目中選出與之距離最近的實(shí)例并添加到最終的訓(xùn)練數(shù)據(jù)集中。Nam等人[12]和Panichella等人[13]通過對(duì)源項(xiàng)目數(shù)據(jù)和目標(biāo)項(xiàng)目數(shù)據(jù)同時(shí)進(jìn)行min-max標(biāo)準(zhǔn)化或z-score標(biāo)準(zhǔn)化,經(jīng)過標(biāo)準(zhǔn)化后的數(shù)據(jù)取值在保持原有取值分布特征不變的情況下處于同一量綱中,從而減小源項(xiàng)目和目標(biāo)項(xiàng)目數(shù)據(jù)集間的分布差異。文獻(xiàn)[14-17]也都是從度量元取值變換的角度出發(fā),分別對(duì)源項(xiàng)目和目標(biāo)項(xiàng)目的數(shù)據(jù)進(jìn)行l(wèi)og轉(zhuǎn)換、rank轉(zhuǎn)換、Box-Cox轉(zhuǎn)換和取值修正。通過這些方法可以使源項(xiàng)目數(shù)據(jù)和目標(biāo)項(xiàng)目數(shù)據(jù)都接近于正態(tài)分布,從而提高了源項(xiàng)目和目標(biāo)項(xiàng)目之間的相似度,最終達(dá)到提高缺陷預(yù)測(cè)性能的效果。He等人[18]提出了一種兩階段篩選方法,在第一階段從粗粒度角度入手,即先選擇最相似的源項(xiàng)目,第二階段在細(xì)粒度角度篩選,從已經(jīng)選好的源項(xiàng)目中選擇最相似的實(shí)例集合。在第一階段是根據(jù)項(xiàng)目屬性的5個(gè)分布特征:最大值、最小值、中值、均值和標(biāo)準(zhǔn)差,根據(jù)歐式距離計(jì)算出最相似的k個(gè)源項(xiàng)目,在第二階段從這k個(gè)源項(xiàng)目中采用Burak過濾法或者Peters過濾法選擇出最相似的實(shí)例集合。
本文假設(shè)源項(xiàng)目和目標(biāo)項(xiàng)目特征相同,基于該假設(shè)提出一種基于分層數(shù)據(jù)篩選的跨項(xiàng)目缺陷預(yù)測(cè)方法。該方法采用分層篩選的策略實(shí)現(xiàn)了訓(xùn)練數(shù)據(jù)的選擇,并給出了相應(yīng)的算法。
方法流程如下:(1)提取所有項(xiàng)目屬性的分布特征;(2)選擇與目標(biāo)項(xiàng)目最相似的源項(xiàng)目集得到候選源項(xiàng)目集;(3)在候選源項(xiàng)目集中選擇與目標(biāo)項(xiàng)目中實(shí)例最相似的實(shí)例集合得到候選實(shí)例集;(4)使用候選實(shí)例集訓(xùn)練缺陷預(yù)測(cè)模型。方法框架如圖1所示。
圖1 方法框架Fig.1 Method framework
基于分層數(shù)據(jù)篩選的跨項(xiàng)目缺陷預(yù)測(cè)方法的核心問題是如何選取與目標(biāo)項(xiàng)目最相似的源項(xiàng)目集以及如何從選定的源項(xiàng)目集中選取最相似的實(shí)例集。
接下來對(duì)方法中使用的數(shù)據(jù)結(jié)構(gòu)進(jìn)行簡(jiǎn)要的描述,符號(hào)S表示軟件項(xiàng)目集合,Ssource表示源項(xiàng)目集,Scandidate表示候選源項(xiàng)目集,Starget表示目標(biāo)項(xiàng)目集,S={R1,R2,…,R w}表示一共有w個(gè)軟件項(xiàng)目;符號(hào)I表示實(shí)例集合,Icandidate表示候選實(shí)例集,每一個(gè)軟件項(xiàng)目Ri={I1,I2,…,I n}表示每個(gè)軟件項(xiàng)目有n個(gè)實(shí)例,I i表示第i個(gè)實(shí)例;每一個(gè)實(shí)例I i={f i1,f i2,…,f im,y i}表示第i個(gè)實(shí)例有m個(gè)度量屬性f ij(j=1,2,…,m)和一個(gè)缺陷指標(biāo)yi,其中度量屬性符號(hào)f ij表示一個(gè)軟件項(xiàng)目中第i個(gè)實(shí)例的第j個(gè)度量屬性,缺陷指標(biāo)y i∈{Y,N},yi=N表示該項(xiàng)目中第i個(gè)實(shí)例沒有缺陷,yi=Y表示該項(xiàng)目中第i個(gè)實(shí)例有缺陷。與此同時(shí)定義一個(gè)度量屬性向量Fi={f1i,f2i,…,f ni}表示一個(gè)軟件項(xiàng)目中的所有n個(gè)實(shí)例的第i個(gè)度量屬性,定義一個(gè)屬性分布特征向量D j={mean(F j),median(F j),skew(F j),kurt(F j)},該項(xiàng)量表示一個(gè)軟件項(xiàng)目中所有n個(gè)實(shí)例的第j個(gè)度量屬性的分布特征,同時(shí)定義一個(gè)項(xiàng)目分布特征向量V={D1,D2,…,D m}表示一個(gè)項(xiàng)目中所有n個(gè)實(shí)例的所有m個(gè)度量屬性的分布特征。Vsource表示源項(xiàng)目集分布特征向量,Vtarget表示目標(biāo)項(xiàng)目集分布特征向量?;诜謱訑?shù)據(jù)篩選的跨項(xiàng)目缺陷預(yù)測(cè)方法的核心目標(biāo)是獲取Icandidate。方法描述的結(jié)構(gòu)特征如圖2所示。
圖2 方法結(jié)構(gòu)Fig.2 Method structure
使用的屬性的分布特征是均值(mean)、中值(median)、偏度(skew)和峰度(kurt)四個(gè)分布特征。He等人[9]的研究成果說明了項(xiàng)目屬性的分布特征對(duì)選擇相似的訓(xùn)練數(shù)據(jù)集是有價(jià)值的。之后Herbold等人[4]認(rèn)為屬性的分布特征不應(yīng)選取過多,所以選取了屬性的均值(mean)和標(biāo)準(zhǔn)差(std)兩個(gè)分布特征使用k-NN算法進(jìn)行了與目標(biāo)項(xiàng)目相似的源項(xiàng)目集合的選取,但是實(shí)驗(yàn)結(jié)果不是很理想。本文中在選取相似的源項(xiàng)目之前先對(duì)所有項(xiàng)目的屬性取值進(jìn)行l(wèi)og變換,log變換的目的是將屬性取值分布接近于正態(tài)分布。然后,選取了數(shù)據(jù)的中心趨勢(shì)度量統(tǒng)計(jì)量-中值和均值以及數(shù)據(jù)分布形態(tài)的度量-偏度和峰度。使用歐氏距離(Euclidean Distance,ED)公式計(jì)算項(xiàng)目層篩選階段中源項(xiàng)目與目標(biāo)項(xiàng)目之間所有屬性分布特征向量的距離來表征兩項(xiàng)目的數(shù)據(jù)分布相似性,然后選擇距離值最小的k個(gè)項(xiàng)目構(gòu)成候選源項(xiàng)目集(見算法1)。
算法1
輸入:初始源項(xiàng)目集Ssource和目標(biāo)項(xiàng)目Starget;
1.初始化集合Scandidate、距離列表ED_List和規(guī)模參數(shù)k;
2.使用log變換對(duì)所有數(shù)據(jù)進(jìn)行數(shù)據(jù)處理;
3.抽取所有項(xiàng)目的屬性分布特征向量D j={mean(F j),median(F j),skew(F j),kurt(F j)}并合并每個(gè)項(xiàng)目的屬性分布特征向量得到源項(xiàng)目集屬性分布特征向量Vsource和目標(biāo)項(xiàng)目的屬性分布特征向量Vtarget;
4.計(jì)算源項(xiàng)目集的屬性分布特征向量Vsource和目標(biāo)項(xiàng)目的屬性分布特征向量Vtarget的歐式距離,將距離值和對(duì)應(yīng)的源項(xiàng)目名稱保存在距離列表ED_List中;
5.對(duì)距離列表ED_List進(jìn)行排序,選出排序后的前k個(gè)源項(xiàng)目作為Scandidate;
輸出:候選源項(xiàng)目集Scandidate。
算法1的輸入是源項(xiàng)目集和目標(biāo)項(xiàng)目,輸出是與目標(biāo)項(xiàng)目相似的候選源項(xiàng)目集。第1步是初始化相關(guān)數(shù)據(jù)結(jié)構(gòu),Scandidate是最終輸出集合,ED_List是存放源項(xiàng)目集與目標(biāo)項(xiàng)目之間相似度的列表,k是要選擇的相似候選源項(xiàng)目集的規(guī)模;第2步是數(shù)據(jù)預(yù)處理過程,即對(duì)源項(xiàng)目集和目標(biāo)項(xiàng)目所有數(shù)據(jù)進(jìn)行數(shù)據(jù)轉(zhuǎn)換,這里使用的是log轉(zhuǎn)換,其實(shí)還有其他常用的數(shù)據(jù)預(yù)處理方法,比如最小最大化處理和均值方差標(biāo)準(zhǔn)化等等;第3步是提取所有項(xiàng)目的屬性分布特征向量D j={mean(F j),median(F j),skew(F j),kurt(F j)},然后合并項(xiàng)目的屬性分布特征向量,Vsource和Vtarget即是源項(xiàng)目集和目標(biāo)項(xiàng)目的所有屬性分布特征向量合并而成的項(xiàng)目分布特征向量;第4步是計(jì)算源項(xiàng)目集和目標(biāo)項(xiàng)目的相似度,源項(xiàng)目集和目標(biāo)項(xiàng)目的相似度值和對(duì)應(yīng)的源項(xiàng)目保存在ED_List列表中;第5步是對(duì)ED_List列表中的相似度值進(jìn)行升序排序,最后選出排序后的前k個(gè)源項(xiàng)目作為Scandidate。
在選出與目標(biāo)項(xiàng)目相似的源項(xiàng)目數(shù)據(jù)集Scandidate后,要從Scandidate中的所有實(shí)例中選擇出與目標(biāo)項(xiàng)目Starget中的實(shí)例最相似的實(shí)例子集。在這方面已有的研究分成兩種思路,Burak過濾法從目標(biāo)項(xiàng)目實(shí)例的角度出發(fā)來選擇訓(xùn)練實(shí)例,認(rèn)為目標(biāo)項(xiàng)目中的實(shí)例應(yīng)該主導(dǎo)訓(xùn)練實(shí)例的選擇過程。Peters過濾法則認(rèn)為候選源項(xiàng)目數(shù)據(jù)集中的實(shí)例的內(nèi)容豐富,會(huì)提供比目標(biāo)項(xiàng)目數(shù)據(jù)集中的實(shí)例更多的關(guān)于缺陷的信息,因此該方法是為每個(gè)訓(xùn)練實(shí)例找到最接近的測(cè)試實(shí)例。兩種思路如圖3所示。圖中紅色圓圈是目標(biāo)項(xiàng)目,黑色圓圈是候選訓(xùn)練項(xiàng)目。本文選用Burak過濾法的思路進(jìn)行訓(xùn)練實(shí)例的選擇,即針對(duì)目標(biāo)項(xiàng)目中的每個(gè)實(shí)例在候選源項(xiàng)目數(shù)據(jù)集的實(shí)例中選出與目標(biāo)項(xiàng)目中的每個(gè)實(shí)例相似度較高的一定數(shù)量的候選實(shí)例。
圖3 過濾法比較Fig.3 Comparison of filtering methods
由于余弦距離對(duì)特征向量絕對(duì)數(shù)值不敏感,更多是從方向上區(qū)分向量間的差異。為了修正不同項(xiàng)目間可能存在的度量標(biāo)準(zhǔn)不統(tǒng)一,李勇等人[5]在篩選相似項(xiàng)目時(shí)使用余弦距離計(jì)算出與目標(biāo)項(xiàng)目距離最近的源項(xiàng)目集合。然而在計(jì)算向量相似性的時(shí)候皮爾遜相關(guān)系數(shù)往往比余弦距離更精確[19]。余弦相似度會(huì)受到向量平移的影響,而皮爾遜相關(guān)系數(shù)具有平移不變性和尺度不變性。因此在使用Burak過濾法進(jìn)行實(shí)例篩選時(shí)使用皮爾遜相關(guān)系數(shù)作為衡量實(shí)例相似性的方法,然后比較相關(guān)系數(shù)值的大小得到候選實(shí)例集(見算法2)。
算法2
輸入:候選源項(xiàng)目集Scandidate和目標(biāo)項(xiàng)目Starget;
1.初始化集合Icandidate和相關(guān)系數(shù)列表Pcc_List和規(guī)模參數(shù)h;
2.合并所有輸入的候選源項(xiàng)目集得到合并后的項(xiàng)目集Smerge;
3.計(jì)算所有源項(xiàng)目集實(shí)例和目標(biāo)項(xiàng)目中實(shí)例的相關(guān)系數(shù);
4.將步驟3計(jì)算得到的相關(guān)系數(shù)和對(duì)應(yīng)的實(shí)例編號(hào)保存在列表Pcc_List中;
5.對(duì)列表Pcc_List進(jìn)行排序,選出排序后的前h個(gè)實(shí)例作為Icandidate;
輸出:候選訓(xùn)練實(shí)例集Icandidate。
算法2的輸入是候選源項(xiàng)目集和目標(biāo)項(xiàng)目,輸出是與目標(biāo)項(xiàng)目中實(shí)例最相似的候選實(shí)例集。第1步是初始化相關(guān)數(shù)據(jù)結(jié)構(gòu),Icandidate是最終輸出集合,h是要選擇的候選實(shí)例集的規(guī)模。Pcc_List是存放源項(xiàng)目集實(shí)例與目標(biāo)項(xiàng)目中實(shí)例間相關(guān)系數(shù)的列表;第2步是合并項(xiàng)目層輸出的所有候選源項(xiàng)目的集合,得到Smerge;第3步是計(jì)算所有源項(xiàng)目集實(shí)例和目標(biāo)項(xiàng)目中實(shí)例的相關(guān)系數(shù);第4步是將相關(guān)系數(shù)和實(shí)例編號(hào)放入Pcc_List列表中;第5步是對(duì)Pcc_List列表中的相關(guān)系數(shù)值進(jìn)行升序排序,最后選出排序后的前h個(gè)實(shí)例作為Icandidate。
經(jīng)過兩階段的數(shù)據(jù)篩選后,已經(jīng)得到了與目標(biāo)項(xiàng)目實(shí)例集最相似的候選訓(xùn)練實(shí)例集,接下來就是選擇合適的缺陷預(yù)測(cè)模型,本文選用樸素貝葉斯模型,樸素貝葉斯方法[20]是基于貝葉斯定理和屬性條件獨(dú)立性假設(shè)的分類方法,是基于軟件模塊中的屬性值X=(x1,x2,…,x n),得到軟件模塊的缺陷概率值是否最大。也就是計(jì)算:
由于樸素貝葉斯方法采用了屬性條件獨(dú)立性假設(shè),即對(duì)于軟件模塊中所有屬性,假設(shè)所有屬性相互獨(dú)立,那么公式可改寫為:
其中,Y∈{0,1},0表示該軟件模塊不存在缺陷,1則表示軟件模塊中有缺陷。
SMO[21]是一種實(shí)現(xiàn)支持向量機(jī)(Support Vector Machine,SVM)[22]的序列最小優(yōu)化(Sequential Minimal Optimization)算法,該算法將二次型求解問題轉(zhuǎn)化為多個(gè)優(yōu)化子問題,并采用啟發(fā)式搜索策略進(jìn)行迭代求解,加快了算法的收斂速度[23]。
本文從PROMISE數(shù)據(jù)集中選擇一部分軟件項(xiàng)目的缺陷數(shù)據(jù)進(jìn)行實(shí)驗(yàn)。實(shí)驗(yàn)所選數(shù)據(jù)是由Jureczko和Madeyski[24]收集。該數(shù)據(jù)集來自10個(gè)不同開源項(xiàng)目(例如ant、log4j、lucene、poi等)的多個(gè)版本。每個(gè)項(xiàng)目中實(shí)例的特征包括20種不同的度量元和一個(gè)缺陷數(shù)量標(biāo)記,這20種度量元均關(guān)注的是代碼復(fù)雜度,其中包括由Chidamber和Kemerer[25]提出的CK度量元。這些度量元綜合考慮了面向?qū)ο蟪绦蚬逃械姆庋b、繼承、多態(tài)等特性。由于實(shí)驗(yàn)關(guān)注的是缺陷的分類問題,即有缺陷和無缺陷問題,因此對(duì)于數(shù)據(jù)集中的缺陷數(shù)量標(biāo)記,需要把項(xiàng)目中缺陷數(shù)量大于0的實(shí)例標(biāo)記為有缺陷標(biāo)簽Y,缺陷數(shù)量為0的實(shí)例標(biāo)記為無缺陷標(biāo)簽N。所選項(xiàng)目數(shù)據(jù)如表1所示。
首先在所選的軟件項(xiàng)目中刪除了少于100個(gè)實(shí)例的軟件項(xiàng)目,目的是為了減少軟件項(xiàng)目規(guī)模對(duì)軟件缺陷預(yù)測(cè)的影響;其次需要從整理好的數(shù)據(jù)集中選擇目標(biāo)項(xiàng)目集和訓(xùn)練項(xiàng)目集。從表1中選擇15個(gè)軟件項(xiàng)目作為目標(biāo)項(xiàng)目,如表2所示,這些項(xiàng)目按缺陷比可以分成三類:第一類是缺陷比大于50%的高缺陷項(xiàng)目;第二類是缺陷比小于10%的低缺陷項(xiàng)目;第三類是缺陷比在10%~50%的缺陷適中的項(xiàng)目。使用這些項(xiàng)目版本的數(shù)據(jù)進(jìn)行15次跨項(xiàng)目缺陷預(yù)測(cè)的實(shí)驗(yàn),極大地保證了實(shí)驗(yàn)的充分性。
表1 PROMISE實(shí)驗(yàn)數(shù)據(jù)集Table 1 PROMISE experimental dataset
表2 目標(biāo)項(xiàng)目集Table 2 Target projects
同時(shí)需要注意如果某一個(gè)項(xiàng)目作為目標(biāo)項(xiàng)目,那么該項(xiàng)目同名稱的其他版本不能候選源項(xiàng)目參與篩選。即如果ant-1.3作為目標(biāo)項(xiàng)目,那么ant項(xiàng)目的其他版本不能作為候選源項(xiàng)目數(shù)據(jù)集,整個(gè)實(shí)驗(yàn)過程如圖4所示。在項(xiàng)目篩選階段為每個(gè)目標(biāo)項(xiàng)目分別篩選5個(gè)候選訓(xùn)練項(xiàng)目和10個(gè)候選訓(xùn)練項(xiàng)目,即參數(shù)k=5、10;在實(shí)例篩選階段,為目標(biāo)項(xiàng)目里的每個(gè)實(shí)例選擇5個(gè)候選實(shí)例,即參數(shù)h=5;這樣進(jìn)行兩組不同參數(shù)的對(duì)比實(shí)驗(yàn)。文獻(xiàn)[26-28]表明對(duì)于軟件項(xiàng)目的缺陷預(yù)測(cè),基于項(xiàng)目自身的歷史數(shù)據(jù)或是項(xiàng)目的部分?jǐn)?shù)據(jù)進(jìn)行缺陷預(yù)測(cè)模型的訓(xùn)練會(huì)取得最優(yōu)的性能,因此為了驗(yàn)證本文提出的方法的性能,在實(shí)驗(yàn)中選取項(xiàng)目?jī)?nèi)缺陷預(yù)測(cè)方法作為基準(zhǔn)方法。在進(jìn)行兩組對(duì)比實(shí)驗(yàn)后選擇效果好的一組與項(xiàng)目?jī)?nèi)十折交叉驗(yàn)證的實(shí)驗(yàn)結(jié)果進(jìn)行比較。實(shí)驗(yàn)中涉及到的樸素貝葉斯缺陷預(yù)測(cè)模型在Weka平臺(tái)中集成,在實(shí)驗(yàn)時(shí)使用默認(rèn)參數(shù)即可。
圖4 實(shí)驗(yàn)過程Fig.4 Experiment procedure
本文關(guān)注的是目標(biāo)軟件項(xiàng)目是否存在缺陷的二分類問題,即分類的結(jié)果是有缺陷還是無缺陷。而在實(shí)際的實(shí)驗(yàn)中則會(huì)存在四種情況:TP(True Positive)表示有缺陷的軟件項(xiàng)目被預(yù)測(cè)為有缺陷;FP(False Positive)表示無缺陷的軟件項(xiàng)目被預(yù)測(cè)為有缺陷;TN(True Negative)表示無缺陷的軟件項(xiàng)目被預(yù)測(cè)為有缺陷;FN(False Negative)表示有缺陷的軟件項(xiàng)目被預(yù)測(cè)為無缺陷。根據(jù)這些結(jié)果進(jìn)行組合產(chǎn)生了一些常用的性能評(píng)測(cè)指標(biāo),如準(zhǔn)確率Accuracy、精確度Precision、召回率Recall和ROC曲線覆蓋面積(Area Under Curve,AUC)等等。其中ROC曲線覆蓋面積即AUC值在軟件缺陷預(yù)測(cè)領(lǐng)域被廣泛使用,同時(shí)與其他性能指標(biāo)相比,AUC值更適合類分布不平衡情況下的預(yù)測(cè)的性能評(píng)價(jià)。
所以本文主要使用AUC值和Precision作為評(píng)價(jià)指標(biāo),Precision的計(jì)算如式(3)所示。由于實(shí)驗(yàn)是在Weka平臺(tái)上進(jìn)行的,所以AUC值和Precision可以直接在Weka軟件的實(shí)驗(yàn)結(jié)果中讀取,并且選取的是Weka自動(dòng)加權(quán)的結(jié)果。
根據(jù)實(shí)驗(yàn)設(shè)計(jì),首先對(duì)數(shù)據(jù)篩選算法和模型預(yù)測(cè)算法的結(jié)果進(jìn)行了實(shí)驗(yàn)驗(yàn)證,其次將所得的實(shí)驗(yàn)結(jié)果與項(xiàng)目?jī)?nèi)缺陷預(yù)測(cè)的實(shí)驗(yàn)結(jié)果進(jìn)行比較,然后對(duì)本文的實(shí)驗(yàn)結(jié)果進(jìn)行顯著性檢驗(yàn),進(jìn)而驗(yàn)證提出的方法的有效性。
圖5~8為不同實(shí)驗(yàn)參數(shù)設(shè)置下樸素貝葉斯算法和SMO算法構(gòu)建的缺陷預(yù)測(cè)模型的AUC值和Precision值的箱線圖對(duì)比,每個(gè)圖中第一列是項(xiàng)目?jī)?nèi)十折交叉驗(yàn)證的結(jié)果,第二列是實(shí)驗(yàn)參數(shù)設(shè)置為k=5,h=5的跨項(xiàng)目缺陷預(yù)測(cè)的結(jié)果,第三列是實(shí)驗(yàn)參數(shù)設(shè)置為k=10,h=5的跨項(xiàng)目缺陷預(yù)測(cè)的結(jié)果。
圖5 NB的AUC對(duì)比Fig.5 NB’s AUC comparison
圖6 SMO的AUC對(duì)比Fig.6 SMO’s AUC comparison
圖7 NB的Precision對(duì)比Fig.7 NB’s Precision comparison
圖8 SMO的Precision對(duì)比Fig.8 SMO’s Precision comparison
由箱線圖可以看出,實(shí)驗(yàn)參數(shù)設(shè)置為k=5,h=5和k=10,h=5的AUC值和Precision值的上下限、中間線和總體的分布比項(xiàng)目?jī)?nèi)十折交叉驗(yàn)證實(shí)驗(yàn)結(jié)果的箱線圖要好。所以本文的方法在實(shí)驗(yàn)參數(shù)設(shè)置為k=10,h=5時(shí)在樸素貝葉斯模型和SMO模型上都可以取得較好的性能。此時(shí)可以初步判斷出本文方法對(duì)跨項(xiàng)目缺陷預(yù)測(cè)的性能有提升。
為了直觀比較方法中的分層篩選的算法和項(xiàng)目?jī)?nèi)十折交叉驗(yàn)證軟件缺陷預(yù)測(cè)實(shí)驗(yàn)的結(jié)果,將樸素貝葉斯模型上兩種不同實(shí)驗(yàn)參數(shù)設(shè)置下模型的AUC值、Precision值和項(xiàng)目?jī)?nèi)十折交叉驗(yàn)證的軟件缺陷預(yù)測(cè)實(shí)驗(yàn)的AUC值、Precision值列于表3和表4中,最下面兩行是每組實(shí)驗(yàn)的平均值和中值。為了更加直觀地判斷出性能提升的程度,將實(shí)驗(yàn)的結(jié)果列于表3和表4中進(jìn)行對(duì)比。表中第二列是項(xiàng)目?jī)?nèi)十折交叉驗(yàn)證的預(yù)測(cè)性能,第三列是實(shí)驗(yàn)參數(shù)設(shè)置為k=5,h=5的跨項(xiàng)目缺陷預(yù)測(cè)的結(jié)果,第四列是實(shí)驗(yàn)參數(shù)設(shè)置為k=10,h=5的跨項(xiàng)目缺陷預(yù)測(cè)的結(jié)果。表中粗體數(shù)字是CPDP的性能值優(yōu)于WP的。最下面兩行是每組實(shí)驗(yàn)的平均值和中值。15組實(shí)驗(yàn)中,發(fā)現(xiàn)CPDP實(shí)驗(yàn)參數(shù)設(shè)置為k=5,h=5時(shí),有8組CPDP的AUC值優(yōu)于WP實(shí)驗(yàn),AUC平均值提升了0.2個(gè)百分點(diǎn),中值提升了0.8個(gè)百分點(diǎn);CPDP實(shí)驗(yàn)參數(shù)設(shè)置為k=10,h=5時(shí),有12組實(shí)驗(yàn)的AUC值優(yōu)于WP,此時(shí)AUC平均值提升了2.9個(gè)百分點(diǎn),中值提升了4.4個(gè)百分點(diǎn)。以Precision值超過0.7作為衡量實(shí)驗(yàn)成功的標(biāo)志[11],可以發(fā)現(xiàn)對(duì)于項(xiàng)目?jī)?nèi)缺陷預(yù)測(cè)實(shí)驗(yàn)成功率是73.3%,而對(duì)于參數(shù)設(shè)置為k=10,h=5的跨項(xiàng)目缺陷預(yù)測(cè)實(shí)驗(yàn)成功率是80%,實(shí)驗(yàn)成功率提升了6.7個(gè)百分點(diǎn)。
表3 NB-AUC實(shí)驗(yàn)結(jié)果Table 3 NB-AUC experimental results
表4 NB-Precision實(shí)驗(yàn)結(jié)果Table 4 NB-Precision experimental results
通過以上數(shù)據(jù)的直觀比較可以得出結(jié)論:本文方法提升了跨項(xiàng)目缺陷預(yù)測(cè)的性能,并且與項(xiàng)目?jī)?nèi)缺陷預(yù)測(cè)實(shí)驗(yàn)相比,實(shí)驗(yàn)參數(shù)設(shè)置為k=10,h=5的分層數(shù)據(jù)篩選的方法取得實(shí)驗(yàn)結(jié)果的AUC值在中值和均值上都有明顯的提高并且實(shí)驗(yàn)成功率同樣有大幅度提升。為了進(jìn)一步確定本文方法確實(shí)是優(yōu)于項(xiàng)目?jī)?nèi)預(yù)測(cè)的實(shí)驗(yàn),而不是實(shí)驗(yàn)產(chǎn)生的隨機(jī)值。對(duì)CPDP參數(shù)設(shè)置為k=10,h=5的AUC值和項(xiàng)目?jī)?nèi)十折交叉驗(yàn)證的AUC值進(jìn)行了Wilcoxcon符號(hào)秩檢驗(yàn)(顯著性水平α=0.05)。
Wilcoxcon符號(hào)秩檢驗(yàn)是非參數(shù)檢驗(yàn),對(duì)于總體分布沒有要求,因而適用范圍廣泛,對(duì)于實(shí)驗(yàn)中的兩兩配對(duì)樣本的顯著性檢驗(yàn),Wilcoxcon符號(hào)秩檢驗(yàn)是解決問題的首選,它與配對(duì)樣本T檢驗(yàn)相對(duì)應(yīng)。在這個(gè)實(shí)驗(yàn)里建立原假設(shè)H0:兩種方法的預(yù)測(cè)結(jié)果來自同一個(gè)分布,即它們之間沒有區(qū)別。備擇假設(shè)H1:兩種方法的預(yù)測(cè)結(jié)果來自不同分布,即它們之間存在顯著性差異。因此,在顯著性水平為0.05的情況下,如果檢測(cè)的p值大于0.05則表示假設(shè)成立,接受H0;否則假設(shè)不成立,需要拒絕H0,接受H1。在Matlab上進(jìn)行Wilcoxcon符號(hào)秩檢驗(yàn),結(jié)果輸出p=0.003 2,h=1,p<0.05且p<0.01。該檢驗(yàn)結(jié)果表明可以拒絕原假設(shè),即提出的跨項(xiàng)目缺陷預(yù)測(cè)方法的實(shí)驗(yàn)結(jié)果與項(xiàng)目?jī)?nèi)缺陷預(yù)測(cè)的實(shí)驗(yàn)結(jié)果不是來自同一個(gè)分布,二者之間存在顯著性差異。
本文提出了一種基于分層數(shù)據(jù)篩選的跨項(xiàng)目缺陷預(yù)測(cè)方法,該方法采用分層策略獲取軟件缺陷預(yù)測(cè)模型的訓(xùn)練數(shù)據(jù)并基于樸素貝葉斯算法構(gòu)建軟件缺陷預(yù)測(cè)模型。實(shí)驗(yàn)結(jié)果表明:此方法可以替代WPDP方法用于軟件缺陷預(yù)測(cè)的實(shí)踐,并且實(shí)驗(yàn)探明提出的分層數(shù)據(jù)篩選的方法在樸素貝葉斯預(yù)測(cè)模型性能最佳。
然而發(fā)現(xiàn)在實(shí)驗(yàn)過程中仍有一些地方可以繼續(xù)改進(jìn):一是如何選擇度量屬性的分布特征尚沒有統(tǒng)一的標(biāo)準(zhǔn),目前為止都是依據(jù)經(jīng)驗(yàn)選出合適的分布特征然后計(jì)算項(xiàng)目之間的相似性;二是在計(jì)算項(xiàng)目間和實(shí)例間的相似性時(shí),時(shí)間復(fù)雜度很高,一個(gè)實(shí)驗(yàn)要很長(zhǎng)時(shí)間才能得出結(jié)果;三是在衡量項(xiàng)目之間以及實(shí)例之間的相似性時(shí),基本上是依據(jù)經(jīng)驗(yàn)選用已有的相似度計(jì)算公式,在相似度計(jì)算方面還需要定義更好的計(jì)算方法;四是本文方法只在樸素貝葉斯模型和SMO模型上進(jìn)行了驗(yàn)證,之后還需進(jìn)一步在研究人員普遍使用的一些其他模型,例如線性回歸、決策樹和隨機(jī)森立等模型上進(jìn)行實(shí)驗(yàn)驗(yàn)證。以上這些實(shí)驗(yàn)中暴露出的問題是值得繼續(xù)研究的。