劉雅新+吳高艷+何鵬
摘 要:針對(duì)跨項(xiàng)目缺陷預(yù)測(cè)(Cross-Project Defect Prediction,CPDP)中為目標(biāo)項(xiàng)目選擇合適的訓(xùn)練數(shù)據(jù)問(wèn)題,在已有相似度匹配方法的基礎(chǔ)上,引入項(xiàng)目情境信息,從而提出一種改進(jìn)的CPDP預(yù)測(cè)模型。實(shí)驗(yàn)結(jié)果表明:引入項(xiàng)目的情境信息,有助于提高CPDP性能;所提方法的F-measure值比已有方法提高了15.04%和6.57%,但相比WPDP方法,仍有待提高。
關(guān)鍵詞:軟件質(zhì)量保證;缺陷預(yù)測(cè);相似度匹配;訓(xùn)練數(shù)據(jù)選擇
DOIDOI:10.11907/rjdk.171465
中圖分類(lèi)號(hào):TP301
文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào)文章編號(hào):1672-7800(2017)008-0009-03
0 引言
軟件缺陷預(yù)測(cè)研究一直是軟件工程領(lǐng)域中的熱門(mén)方向,最早可以追溯到上世紀(jì)70年代。常規(guī)的方法是利用項(xiàng)目自身已有歷史數(shù)據(jù)訓(xùn)練預(yù)測(cè)模型后,再用于后續(xù)版本的缺陷預(yù)測(cè),即項(xiàng)目?jī)?nèi)缺陷預(yù)測(cè)(Within-Project Defect Prediction,簡(jiǎn)稱WPDP),如圖1(a)所示。然而,已有研究表明訓(xùn)練高質(zhì)量的WPDP模型要求有充足的歷史數(shù)據(jù),這對(duì)一些新項(xiàng)目或還不活躍的軟件項(xiàng)目便難以滿足。
近些年來(lái)隨著互聯(lián)網(wǎng)的蓬勃發(fā)展,尤其是開(kāi)源社區(qū)如 Github的興起,互聯(lián)網(wǎng)上可供獲取的公開(kāi)缺陷數(shù)據(jù)集越來(lái)越多,而且數(shù)量仍在不斷增長(zhǎng)。為有效利用互聯(lián)網(wǎng)上已有的豐富數(shù)據(jù)資源,一些研究者提出利用其它軟件項(xiàng)目的數(shù)據(jù)來(lái)訓(xùn)練,構(gòu)建跨項(xiàng)目的缺陷預(yù)測(cè)模型(Cross-Project Defect Prediction, 簡(jiǎn)稱CPDP),用于解決WPDP中訓(xùn)練數(shù)據(jù)受限的瓶頸[1-5],如圖1(b)所示,為軟件缺陷預(yù)測(cè)研究開(kāi)辟了一條嶄新的途徑。
在CPDP早期研究中,都是將來(lái)自其它軟件項(xiàng)目的所有數(shù)據(jù)作為訓(xùn)練集,并不涉及訓(xùn)練集的精簡(jiǎn)。常常出現(xiàn)因訓(xùn)練數(shù)據(jù)包含過(guò)多噪聲,從而降低了模型準(zhǔn)確性[5]。在某種程度上,數(shù)據(jù)的質(zhì)量遠(yuǎn)比數(shù)量對(duì)CPDP性能的影響更大。然而,如何才能從大量的可供使用的缺陷數(shù)據(jù)中挑選出質(zhì)量更高的部分用于預(yù)測(cè)模型訓(xùn)練,仍然是CPDP研究中急需解決的一個(gè)問(wèn)題[6]。
針對(duì)以上問(wèn)題,目前主要有兩種思路。一種是通過(guò)特征降維的方法減少冗余指標(biāo)信息,從而減少數(shù)據(jù)噪音來(lái)改善缺陷預(yù)測(cè)的性能和效率[7]。另一種方法則是本文將考慮的通過(guò)減少數(shù)據(jù)量來(lái)減少重復(fù)的無(wú)價(jià)值的實(shí)例[8]。在訓(xùn)練數(shù)據(jù)總量的精簡(jiǎn)方面,以往研究都只是根據(jù)數(shù)據(jù)的度量指標(biāo)信息進(jìn)行相似度匹配,再返回top-k個(gè)最相關(guān)的實(shí)例構(gòu)成新的訓(xùn)練數(shù)據(jù)集,但它們并沒(méi)有充分考慮項(xiàng)目的情境信息。實(shí)踐中,每個(gè)項(xiàng)目的情境信息存在差異,例如項(xiàng)目的主題、服務(wù)對(duì)象、編程語(yǔ)言等。
本文在為CPDP預(yù)測(cè)選擇合適跨項(xiàng)目訓(xùn)練數(shù)據(jù)集時(shí),通過(guò)考慮項(xiàng)目的5個(gè)常規(guī)屬性信息(包括項(xiàng)目主題、目標(biāo)受眾、編程語(yǔ)言、運(yùn)行環(huán)境、開(kāi)源認(rèn)證),并利用自然語(yǔ)言處理中的TF-IDF技術(shù)將它們量化,從而得到每個(gè)項(xiàng)目的情境信息向量。最后,結(jié)合項(xiàng)目的情境信息與項(xiàng)目中實(shí)例特征值計(jì)算數(shù)據(jù)集的相似度。本文的主要貢獻(xiàn)可歸納為:
(1)引入項(xiàng)目的情境信息,提出一種改進(jìn)的基于相似度匹配的CPDP預(yù)測(cè)方法,并使CPDP預(yù)測(cè)性能得到改進(jìn)。
(2)驗(yàn)證本文方法的CPDP預(yù)測(cè)模型在樸素貝葉斯分類(lèi)器下效果最好。
1 跨項(xiàng)目缺陷預(yù)測(cè)(CPDP)
CPDP形象表示為利用其它項(xiàng)目組成的缺陷數(shù)據(jù)集S={P1,P2,…,Ps}對(duì)目標(biāo)項(xiàng)目Pt作缺陷預(yù)測(cè)。假設(shè)一個(gè)項(xiàng)目P由n實(shí)例(類(lèi)文件)組成,即P={I1,I2,…,Ii,…,In},實(shí)例Ii表示為Ii={fi1,fi2,…,fij,…,fim},fij為實(shí)例Ii在第j個(gè)度量指標(biāo)上的值,m為用于度量實(shí)例的指標(biāo)個(gè)數(shù)。一個(gè)項(xiàng)目數(shù)據(jù)集P中度量指標(biāo)Fi對(duì)應(yīng)的向量可表示為Fi={f1i,f2i,…,fji,…,fni},fji為第j個(gè)實(shí)例在該度量指標(biāo)上的值,各實(shí)例指標(biāo)值的分布特性可表示為Ci={SCi1,SCi2,…,SCik},SC為對(duì)應(yīng)的度量指標(biāo)值的分布特性(最大值、最小值、中位數(shù)、均值和標(biāo)準(zhǔn)方差)。因此,項(xiàng)目P可根據(jù)度量指標(biāo)量化為V={C1,C2,…,Ck,…,Cm}。 這樣,項(xiàng)目A和B之間的相似性可表示為:
Sim(A,B)metric=cos(VA,VB)=VA·VB|VA||VB|(1)
另外,假定每個(gè)項(xiàng)目情境信息按照主題、目標(biāo)受眾、編程語(yǔ)言、運(yùn)行操作系統(tǒng)、認(rèn)證順序來(lái)進(jìn)行量化表示,則可以表示為U=(ATt,ATia,ATpl,ATos,ATlic),其中ATi分別為上述屬性前面幾個(gè)字母的縮寫(xiě)。因此,項(xiàng)目A和B之間的屬性相似性可表示為:
Sim(A,B)context=cos(UA,UB)=UA·UB|UA||UB|(2)
而表示項(xiàng)目情境信息的每個(gè)屬性本身又為一個(gè)向量ATi=(wi1,wi2,…,wim), m為屬性i中包括的元素種類(lèi),因此,項(xiàng)目情境信息相似性為所有5個(gè)屬性向量下的余弦相似性總和,可用式(3)表示,系數(shù)α表示每個(gè)屬性的比重系數(shù),本文視每個(gè)屬性具有相同的重要性,即α=0.2。
Sim(A,B)context=∑ni=1αicos(AATi,BATi)(3)
對(duì)于每個(gè)屬性向量ATi中的wij,可通過(guò)修改后的tf,idf表示為式(4):
wij=(logfij+1)log#p#pj(4)
其中,fij為項(xiàng)目在屬性i元素j上的頻率,#p和#pj分別代表項(xiàng)目總數(shù)和具有元素j的項(xiàng)目數(shù)。結(jié)合式(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
最后,在跨項(xiàng)目數(shù)據(jù)集選擇過(guò)程中,結(jié)合項(xiàng)目的兩種信息,得到最終的相似度得分:Score(A,B)=Sim(A,B)metric+Sim(A,B)context(6)
對(duì)應(yīng)算法實(shí)現(xiàn)描述如下:
算法1:基于相似度匹配的CPDP輸入:
1.候選訓(xùn)練數(shù)據(jù)集S={P1,P2,…,Pl};
2.目標(biāo)項(xiàng)目數(shù)據(jù)集Pt={I1,I2,…,Ii,…,In1};輸出:
3.返回預(yù)測(cè)結(jié)果result。方法實(shí)現(xiàn):
4.P是為Pt從候選集S中返回的最相似的數(shù)據(jù)集;
5.初始化P←Φ
6.for 每個(gè)項(xiàng)目Pi(Pi∈S) do;
7.// 對(duì)Pi,P進(jìn)行相似度匹配
8.Set tempScore←Score(Pi,Pt)
9.end for
10.//取集合tempScore中與目標(biāo)項(xiàng)目Pt最相似的項(xiàng)目
11.P←Max(tempScore);
12. //用選擇的數(shù)據(jù)集P訓(xùn)練模型并對(duì)Pt進(jìn)行預(yù)測(cè)
13.resultPtmodel(P);//CPDP預(yù)測(cè)14.返回result
2 實(shí)證分析
2.1 數(shù)據(jù)集
本次實(shí)驗(yàn)使用PROMISE提供的10個(gè)項(xiàng)目缺陷數(shù)據(jù)集,表1給出了每個(gè)項(xiàng)目的相關(guān)信息。數(shù)據(jù)集中每個(gè)實(shí)例表示一個(gè)類(lèi)文件(.java),包括20個(gè)源代碼度量指標(biāo)用于量化實(shí)例,其中CK套件10個(gè)、Martins指標(biāo)2個(gè)、QMOOM套件5個(gè)、McCabes CC指標(biāo)2個(gè),以及代碼行LOC。
2.2 分類(lèi)器與評(píng)價(jià)指標(biāo)
本文采用樸素貝葉斯分類(lèi)器(Nave Bayes)作為本次CPDP預(yù)測(cè)模型訓(xùn)練的分類(lèi)器,Nave Bayes是一個(gè)基于條件概率最簡(jiǎn)單的分類(lèi)器,其之所以被稱之為“樸素”是因?yàn)樗僭O(shè)所有特征之間都是相互獨(dú)立的。數(shù)學(xué)表示為P(X|Y)=∏ni=1P(xi|Y),X={x1,x2,…,xn}為一個(gè)特征向量,Y為分類(lèi)變量。盡管現(xiàn)實(shí)中這種獨(dú)立假設(shè)并不完全成立,但樸素貝葉斯已在很多實(shí)踐研究中得到有效的應(yīng)用[9]。在預(yù)測(cè)過(guò)程中,給定一個(gè)新的實(shí)例(類(lèi)文件),樸素貝葉斯分類(lèi)器通過(guò)計(jì)算該類(lèi)在各個(gè)特征值上的條件概率的乘積來(lái)評(píng)估存在缺陷的概率,式(7)為基本的計(jì)算公式:
P(Y=k|X)=P(Y=k)∏iP(xi|Y=k)∑jP(Y=k)∏iP(xi|Y=k)(7)
預(yù)測(cè)過(guò)程中存在4種可能情況:假陽(yáng)性(FP)、假陰性(FN)、真陽(yáng)性(TP)與真陰性(TN)。根據(jù)4種預(yù)測(cè)結(jié)果可計(jì)算準(zhǔn)確率(precision)、召回率(recall)和F-measure評(píng)價(jià)指標(biāo)。準(zhǔn)確率用來(lái)衡量有多少真實(shí)存在缺陷的實(shí)例被成功地預(yù)測(cè)。準(zhǔn)確率越高,表明無(wú)缺陷實(shí)例被誤認(rèn)為有缺陷的情況會(huì)更少。
precision=TPTP+FP(8)
召回率用來(lái)衡量被預(yù)測(cè)為有缺陷的實(shí)例中有多少是真實(shí)存在缺陷。召回率越高,表明有缺陷實(shí)例被誤認(rèn)為無(wú)缺陷的情況會(huì)更少。
recall=TPTP+FN(9)
F-measure用來(lái)平衡準(zhǔn)確率與召回率,為兩者的加權(quán)平均值。F-measure 越接近1 表示預(yù)測(cè)效果越好。
F-measure=2*precision*recallprecision+recall(10)
2.3 實(shí)驗(yàn)結(jié)果
問(wèn)題1:引入項(xiàng)目的情境信息,是否有助于提高CPDP性能?
實(shí)驗(yàn)結(jié)果如圖2所示,不難發(fā)現(xiàn),在為目標(biāo)項(xiàng)目選擇合適的跨項(xiàng)目數(shù)據(jù)集過(guò)程中,引入項(xiàng)目的情境信息后的CPDP模型性能比不使用時(shí)整體都有所提高,其中項(xiàng)目Synapse、Ant和Jedit三個(gè)項(xiàng)目性能改進(jìn)最為顯著,F(xiàn)-measure值改進(jìn)幅度分別為0.32(86.7%)、0.222(66.2%)和0.207(64.3%)。因此,實(shí)驗(yàn)結(jié)果證實(shí),引入項(xiàng)目的情境信息,有助于提高CPDP性能。
問(wèn)題2:相比已有CPDP方法,本文所提方法是否性能更好?
為了進(jìn)一步驗(yàn)證本文所提出的方法的有效性,引入文獻(xiàn)[1]、[5]中提出的CPDP方法作為比較對(duì)象。此外,與WPDP方法進(jìn)行對(duì)比,如圖3所示。結(jié)果顯示,本文所提方法相比兩種基準(zhǔn)方法baseline1和baseline2整體性能分布有所提高,表現(xiàn)為前者均值為0.512,兩種基礎(chǔ)方法的均值分別為0.445和0.481,改進(jìn)比例分別為15.04%和6.57%,且最大值和最小值均有所提高。然而,本文方法相比于WPDP方法,仍然表現(xiàn)出一定差距。WPDP的均值為0.621,說(shuō)明選用其它項(xiàng)目的數(shù)據(jù)訓(xùn)練出的模型仍不如目標(biāo)項(xiàng)目自身的數(shù)據(jù)更可靠。盡管如此,但考慮到現(xiàn)實(shí)中,對(duì)于一些新項(xiàng)目或不活躍的項(xiàng)目,它們可供使用的歷史數(shù)據(jù)并不多,在此數(shù)據(jù)不充分的情境下,即便是有WPDP方法,相信效果也依舊不佳。
本文不足之處:①實(shí)驗(yàn)數(shù)據(jù)只選取了10個(gè)項(xiàng)目,實(shí)驗(yàn)結(jié)論還有待在更多項(xiàng)目數(shù)據(jù)集上加以驗(yàn)證;②本文只考慮了5個(gè)項(xiàng)目屬性用于表達(dá)情境信息,根據(jù)開(kāi)源社區(qū)中提供的信息,表達(dá)項(xiàng)目情境的屬性還有很多,有待進(jìn)一步探索。
3 結(jié)語(yǔ)
本文圍繞跨項(xiàng)目缺陷預(yù)測(cè)開(kāi)展研究,針對(duì)為目標(biāo)項(xiàng)目選擇合適的訓(xùn)練數(shù)據(jù)問(wèn)題,在以往通過(guò)項(xiàng)目實(shí)例度量指標(biāo)相似度匹配的基礎(chǔ)上,引入項(xiàng)目的情境信息,從而改進(jìn)CPDP預(yù)測(cè)模型。實(shí)驗(yàn)結(jié)果表明:①引入項(xiàng)目的情境信息,有助于提高CPDP性能;②相比兩種基準(zhǔn)方法,筆者的方法整體性能有提高,分別提高15.04%和6.57%,但相比WPDP方法,依舊還有待提高。
參考文獻(xiàn):
[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] 王星, 何鵬, 陳丹,等. 跨項(xiàng)目缺陷預(yù)測(cè)中訓(xùn)練數(shù)據(jù)選擇方法[J]. 計(jì)算機(jī)應(yīng)用, 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