劉雅新+吳高艷+何鵬



摘 要:針對跨項目缺陷預測(Cross-Project Defect Prediction,CPDP)中為目標項目選擇合適的訓練數(shù)據(jù)問題,在已有相似度匹配方法的基礎上,引入項目情境信息,從而提出一種改進的CPDP預測模型。實驗結果表明:引入項目的情境信息,有助于提高CPDP性能;所提方法的F-measure值比已有方法提高了15.04%和6.57%,但相比WPDP方法,仍有待提高。
關鍵詞:軟件質量保證;缺陷預測;相似度匹配;訓練數(shù)據(jù)選擇
DOIDOI:10.11907/rjdk.171465
中圖分類號:TP301
文獻標識碼:A 文章編號文章編號:1672-7800(2017)008-0009-03
0 引言
軟件缺陷預測研究一直是軟件工程領域中的熱門方向,最早可以追溯到上世紀70年代。常規(guī)的方法是利用項目自身已有歷史數(shù)據(jù)訓練預測模型后,再用于后續(xù)版本的缺陷預測,即項目內缺陷預測(Within-Project Defect Prediction,簡稱WPDP),如圖1(a)所示。然而,已有研究表明訓練高質量的WPDP模型要求有充足的歷史數(shù)據(jù),這對一些新項目或還不活躍的軟件項目便難以滿足。
近些年來隨著互聯(lián)網(wǎng)的蓬勃發(fā)展,尤其是開源社區(qū)如 Github的興起,互聯(lián)網(wǎng)上可供獲取的公開缺陷數(shù)據(jù)集越來越多,而且數(shù)量仍在不斷增長。為有效利用互聯(lián)網(wǎng)上已有的豐富數(shù)據(jù)資源,一些研究者提出利用其它軟件項目的數(shù)據(jù)來訓練,構建跨項目的缺陷預測模型(Cross-Project Defect Prediction, 簡稱CPDP),用于解決WPDP中訓練數(shù)據(jù)受限的瓶頸[1-5],如圖1(b)所示,為軟件缺陷預測研究開辟了一條嶄新的途徑。
在CPDP早期研究中,都是將來自其它軟件項目的所有數(shù)據(jù)作為訓練集,并不涉及訓練集的精簡。常常出現(xiàn)因訓練數(shù)據(jù)包含過多噪聲,從而降低了模型準確性[5]。在某種程度上,數(shù)據(jù)的質量遠比數(shù)量對CPDP性能的影響更大。然而,如何才能從大量的可供使用的缺陷數(shù)據(jù)中挑選出質量更高的部分用于預測模型訓練,仍然是CPDP研究中急需解決的一個問題[6]。
針對以上問題,目前主要有兩種思路。一種是通過特征降維的方法減少冗余指標信息,從而減少數(shù)據(jù)噪音來改善缺陷預測的性能和效率[7]。另一種方法則是本文將考慮的通過減少數(shù)據(jù)量來減少重復的無價值的實例[8]。在訓練數(shù)據(jù)總量的精簡方面,以往研究都只是根據(jù)數(shù)據(jù)的度量指標信息進行相似度匹配,再返回top-k個最相關的實例構成新的訓練數(shù)據(jù)集,但它們并沒有充分考慮項目的情境信息。實踐中,每個項目的情境信息存在差異,例如項目的主題、服務對象、編程語言等。
本文在為CPDP預測選擇合適跨項目訓練數(shù)據(jù)集時,通過考慮項目的5個常規(guī)屬性信息(包括項目主題、目標受眾、編程語言、運行環(huán)境、開源認證),并利用自然語言處理中的TF-IDF技術將它們量化,從而得到每個項目的情境信息向量。最后,結合項目的情境信息與項目中實例特征值計算數(shù)據(jù)集的相似度。本文的主要貢獻可歸納為:
(1)引入項目的情境信息,提出一種改進的基于相似度匹配的CPDP預測方法,并使CPDP預測性能得到改進。
(2)驗證本文方法的CPDP預測模型在樸素貝葉斯分類器下效果最好。
1 跨項目缺陷預測(CPDP)
CPDP形象表示為利用其它項目組成的缺陷數(shù)據(jù)集S={P1,P2,…,Ps}對目標項目Pt作缺陷預測。假設一個項目P由n實例(類文件)組成,即P={I1,I2,…,Ii,…,In},實例Ii表示為Ii={fi1,fi2,…,fij,…,fim},fij為實例Ii在第j個度量指標上的值,m為用于度量實例的指標個數(shù)。一個項目數(shù)據(jù)集P中度量指標Fi對應的向量可表示為Fi={f1i,f2i,…,fji,…,fni},fji為第j個實例在該度量指標上的值,各實例指標值的分布特性可表示為Ci={SCi1,SCi2,…,SCik},SC為對應的度量指標值的分布特性(最大值、最小值、中位數(shù)、均值和標準方差)。因此,項目P可根據(jù)度量指標量化為V={C1,C2,…,Ck,…,Cm}。 這樣,項目A和B之間的相似性可表示為:
Sim(A,B)metric=cos(VA,VB)=VA·VB|VA||VB|(1)
另外,假定每個項目情境信息按照主題、目標受眾、編程語言、運行操作系統(tǒng)、認證順序來進行量化表示,則可以表示為U=(ATt,ATia,ATpl,ATos,ATlic),其中ATi分別為上述屬性前面幾個字母的縮寫。因此,項目A和B之間的屬性相似性可表示為:
Sim(A,B)context=cos(UA,UB)=UA·UB|UA||UB|(2)
而表示項目情境信息的每個屬性本身又為一個向量ATi=(wi1,wi2,…,wim), m為屬性i中包括的元素種類,因此,項目情境信息相似性為所有5個屬性向量下的余弦相似性總和,可用式(3)表示,系數(shù)α表示每個屬性的比重系數(shù),本文視每個屬性具有相同的重要性,即α=0.2。
Sim(A,B)context=∑ni=1αicos(AATi,BATi)(3)
對于每個屬性向量ATi中的wij,可通過修改后的tf,idf表示為式(4):
wij=(logfij+1)log#p#pj(4)
其中,fij為項目在屬性i元素j上的頻率,#p和#pj分別代表項目總數(shù)和具有元素j的項目數(shù)。結合式(3)和式(4),得到:
cos(AATi,BATi)=∑j∈Ai∩Bi(logfij+1)(logfij+1)(log#p#pj)2∑j∈Ai((logfij+1)·log#p#pj)2∑j∈Bi((logfij+1)·log#p#pj)2(5)endprint
最后,在跨項目數(shù)據(jù)集選擇過程中,結合項目的兩種信息,得到最終的相似度得分:Score(A,B)=Sim(A,B)metric+Sim(A,B)context(6)
對應算法實現(xiàn)描述如下:
算法1:基于相似度匹配的CPDP輸入:
1.候選訓練數(shù)據(jù)集S={P1,P2,…,Pl};
2.目標項目數(shù)據(jù)集Pt={I1,I2,…,Ii,…,In1};輸出:
3.返回預測結果result。方法實現(xiàn):
4.P是為Pt從候選集S中返回的最相似的數(shù)據(jù)集;
5.初始化P←Φ
6.for 每個項目Pi(Pi∈S) do;
7.// 對Pi,P進行相似度匹配
8.Set tempScore←Score(Pi,Pt)
9.end for
10.//取集合tempScore中與目標項目Pt最相似的項目
11.P←Max(tempScore);
12. //用選擇的數(shù)據(jù)集P訓練模型并對Pt進行預測
13.resultPtmodel(P);//CPDP預測14.返回result
2 實證分析
2.1 數(shù)據(jù)集
本次實驗使用PROMISE提供的10個項目缺陷數(shù)據(jù)集,表1給出了每個項目的相關信息。數(shù)據(jù)集中每個實例表示一個類文件(.java),包括20個源代碼度量指標用于量化實例,其中CK套件10個、Martins指標2個、QMOOM套件5個、McCabes CC指標2個,以及代碼行LOC。
2.2 分類器與評價指標
本文采用樸素貝葉斯分類器(Nave Bayes)作為本次CPDP預測模型訓練的分類器,Nave Bayes是一個基于條件概率最簡單的分類器,其之所以被稱之為“樸素”是因為它假設所有特征之間都是相互獨立的。數(shù)學表示為P(X|Y)=∏ni=1P(xi|Y),X={x1,x2,…,xn}為一個特征向量,Y為分類變量。盡管現(xiàn)實中這種獨立假設并不完全成立,但樸素貝葉斯已在很多實踐研究中得到有效的應用[9]。在預測過程中,給定一個新的實例(類文件),樸素貝葉斯分類器通過計算該類在各個特征值上的條件概率的乘積來評估存在缺陷的概率,式(7)為基本的計算公式:
P(Y=k|X)=P(Y=k)∏iP(xi|Y=k)∑jP(Y=k)∏iP(xi|Y=k)(7)
預測過程中存在4種可能情況:假陽性(FP)、假陰性(FN)、真陽性(TP)與真陰性(TN)。根據(jù)4種預測結果可計算準確率(precision)、召回率(recall)和F-measure評價指標。準確率用來衡量有多少真實存在缺陷的實例被成功地預測。準確率越高,表明無缺陷實例被誤認為有缺陷的情況會更少。
precision=TPTP+FP(8)
召回率用來衡量被預測為有缺陷的實例中有多少是真實存在缺陷。召回率越高,表明有缺陷實例被誤認為無缺陷的情況會更少。
recall=TPTP+FN(9)
F-measure用來平衡準確率與召回率,為兩者的加權平均值。F-measure 越接近1 表示預測效果越好。
F-measure=2*precision*recallprecision+recall(10)
2.3 實驗結果
問題1:引入項目的情境信息,是否有助于提高CPDP性能?
實驗結果如圖2所示,不難發(fā)現(xiàn),在為目標項目選擇合適的跨項目數(shù)據(jù)集過程中,引入項目的情境信息后的CPDP模型性能比不使用時整體都有所提高,其中項目Synapse、Ant和Jedit三個項目性能改進最為顯著,F(xiàn)-measure值改進幅度分別為0.32(86.7%)、0.222(66.2%)和0.207(64.3%)。因此,實驗結果證實,引入項目的情境信息,有助于提高CPDP性能。
問題2:相比已有CPDP方法,本文所提方法是否性能更好?
為了進一步驗證本文所提出的方法的有效性,引入文獻[1]、[5]中提出的CPDP方法作為比較對象。此外,與WPDP方法進行對比,如圖3所示。結果顯示,本文所提方法相比兩種基準方法baseline1和baseline2整體性能分布有所提高,表現(xiàn)為前者均值為0.512,兩種基礎方法的均值分別為0.445和0.481,改進比例分別為15.04%和6.57%,且最大值和最小值均有所提高。然而,本文方法相比于WPDP方法,仍然表現(xiàn)出一定差距。WPDP的均值為0.621,說明選用其它項目的數(shù)據(jù)訓練出的模型仍不如目標項目自身的數(shù)據(jù)更可靠。盡管如此,但考慮到現(xiàn)實中,對于一些新項目或不活躍的項目,它們可供使用的歷史數(shù)據(jù)并不多,在此數(shù)據(jù)不充分的情境下,即便是有WPDP方法,相信效果也依舊不佳。
本文不足之處:①實驗數(shù)據(jù)只選取了10個項目,實驗結論還有待在更多項目數(shù)據(jù)集上加以驗證;②本文只考慮了5個項目屬性用于表達情境信息,根據(jù)開源社區(qū)中提供的信息,表達項目情境的屬性還有很多,有待進一步探索。
3 結語
本文圍繞跨項目缺陷預測開展研究,針對為目標項目選擇合適的訓練數(shù)據(jù)問題,在以往通過項目實例度量指標相似度匹配的基礎上,引入項目的情境信息,從而改進CPDP預測模型。實驗結果表明:①引入項目的情境信息,有助于提高CPDP性能;②相比兩種基準方法,筆者的方法整體性能有提高,分別提高15.04%和6.57%,但相比WPDP方法,依舊還有待提高。
參考文獻:
[1] HE Z, SHU F, YANG Y, et al. An investigation on the feasibility of cross-project defect prediction[J]. Automated Software Engineering, 2012, 19(2):167-199.endprint
[2] TURHAN B, MENZIES T, BENER A B, et al. On the relative value of cross-company and within-company data for defect prediction[J]. Empirical Software Engineering, 2009, 14(5):540-578.
[3] RYU D, JANG J, BAIK J. A hybrid instance selection using nearest-neighbor for cross-project defect prediction [J]. Journal of Computer Science and Technology, 2015,30(5):969-980.
[4] ZIMMERMANN T, NAGAPPAN N, GALL H, et al. Cross-project defect prediction a large scale experiment on data vs.domain vs.process[C].Joint Meeting of the European Software Engineering Conference and the ACM International Symposium on Foundations of Software Engineering, Amsterdam, Netherlands, 2009:91-100.
[5] PETERS F, MENZIES T, MARCUS A. Better cross company defect prediction[C].Working Conference on Mining Software Repositories. San Francisco, USA, 2013:409-418.
[6] 王星, 何鵬, 陳丹,等. 跨項目缺陷預測中訓練數(shù)據(jù)選擇方法[J]. 計算機應用, 2016, 36(11):3165-3169.
[7] LU H, CUKIC B, CULP M. Software defect prediction using semi-supervised learning with dimension reduction[C].Ieee/acm International Conference on Automated Software Engineering. ACM, 2012:314-317.
[8] HERBOLD S. Training data selection for cross-project defect prediction[C].Proceedings of the 9th International Conference on Predictive Models in Software Engineering. 2013:1-10.
[9] HALL T,BEECHAM S,BOWES D,et al. A systematic literature review on fault prediction performance in software engineering[J].Software Engineering IEEE Transactions on,2012,38(6):1276-1304.endprint