婁豐鵬,吳 迪,荊曉遠,吳 飛
(1.南京郵電大學 計算機學院,江蘇 南京 210003;2.武漢大學 計算機學院 軟件工程國家重點實驗室,湖北 武漢 430072;3.南京郵電大學 自動化學院,江蘇 南京 210003)
軟件缺陷通常導致系統(tǒng)發(fā)生故障,進而造成財政和金融損失。軟件在正式發(fā)布之前,可以通過不同級別的測試來檢驗和刪除這些缺陷。因此,軟件缺陷預測是保證系統(tǒng)正常運行的一個至關(guān)重要的步驟。
在軟件工程領域,軟件缺陷預測已經(jīng)成為一個重大的研究課題,引起了很多學者的高度重視[1-2]。近年來,已經(jīng)提出了許多有效的軟件缺陷預測方法[3-5]。這些方法是通過從軟件倉庫中挖掘數(shù)據(jù)集,然后使用機器學習分類器預測一個學習模型[6],通過該模型可以對軟件缺陷進行預測[7]。近年來比較流行的機器學習分類器有很多,如決策樹(decision tree,DT)、隨機森林(random forest,RF)、邏輯回歸(logistic regression,LR)、支持向量機模型(support vector machine,SVM)[8-9]等。但是,大多數(shù)方法是在項目內(nèi)部進行評估的,新項目通常沒有足夠的缺陷數(shù)據(jù)來構(gòu)建預測模型。對于一個新項目或者是具有有限訓練數(shù)據(jù)的新項目,最好通過使用現(xiàn)有源項目中足夠的訓練數(shù)據(jù)來學習預測模型,然后將模型應用于某些目標項目,稱之為跨項目。因此,跨項目缺陷預測是必要的。但是,由于源項目和目標項目之間的特征分布差異,導致跨項目軟件缺陷預測的性能通常較差。
針對上述問題,文中采用遷移學習方法(transfer component analysis,TCA)[7]查找源項目與目標項目的相似性,并提出一種通過增加度量元來提高基于遷移學習的跨項目缺陷預測性能的方法(MTCA)。該方法首先使用分類器對數(shù)據(jù)集進行一次項目內(nèi)快速預測,將預測結(jié)果作為新的度量元加入數(shù)據(jù)集構(gòu)成新的數(shù)據(jù)集。然后,采用遷移學習將源項目中提取的知識轉(zhuǎn)移至目標項目,并使用分類器預測目標項目。最后在AEEEM數(shù)據(jù)庫[10]上進行驗證。
邏輯回歸算法廣泛應用于數(shù)據(jù)挖掘、數(shù)據(jù)分類,同時也在支持概率類型結(jié)果輸出的方面得到大量應用。邏輯回歸算法是在線性回歸的基礎上,加入邏輯函數(shù),使用輸入變量線性加權(quán)實現(xiàn)分類,最終輸出概率估計。
支持向量機算法[8-9]是基于核的算法,主要是把輸入數(shù)據(jù)映射到一個高維空間,使輸入數(shù)據(jù)由線性不可分以最大化分類間隔構(gòu)建最優(yōu)分割超平面,從而提高學習機的泛化能力。對于分類,支持向量機算法根據(jù)空間中的樣本計算該空間的決策曲面,由此確定該空間中未知樣本的所屬類別。
隨機森林算法是多個決策樹分類器的集成,其輸出的類別是由個別決策樹輸出的類別的眾數(shù)決定的。隨機森林訓練和預測速度快,對訓練數(shù)據(jù)的容錯能力可以進行有效估計,當數(shù)據(jù)集中的數(shù)據(jù)缺失很多時依舊可以保持精度不變,能夠在分類過程中生成一個泛化誤差較小的內(nèi)部無偏估計。
近鄰算法中,所選擇的鄰居都是已經(jīng)得到正確分類的數(shù)據(jù)。該方法在定類決策上只依據(jù)最鄰近的一個或者幾個樣本的類別來決定待分樣本所屬的類別,最近鄰樣本中的大多數(shù)屬于哪個類別,該樣本就屬于哪個類別。
圖1是一般的軟件缺陷預測過程。
在項目內(nèi)預測中,訓練樣本集和測試樣本集來自同一個項目。對于跨項目預測,訓練樣本集來自一個項目(源),測試樣本集來自另一個項目(目標)。
圖1 軟件缺陷預測過程
如圖1所示,該過程首先是收集軟件并標記每個軟件發(fā)布后的缺陷數(shù)量,如果一個軟件存在至少一個缺陷,則表明該軟件存在缺陷,否則為無缺陷。通過提取復雜度等度量用于機器模型訓練分類器,然后通過分類器預測一個新的樣本的缺陷情況。
近年來,機器學習和數(shù)據(jù)挖掘技術(shù)引起了越來越多的關(guān)注[11]。在訓練樣本和測試樣本具有相同的特征空間和分布時,大多數(shù)機器學習方法可以獲得良好的性能[11]。當特征空間和分布發(fā)生變化時,學習模型需要重建。在這種情況下,有必要重新收集訓練數(shù)據(jù)并再次標記。通常,重建學習模型是昂貴的,并且標注新的訓練數(shù)據(jù)需要相當大的努力。遷移學習通過轉(zhuǎn)移從相關(guān)但不同領域提取的知識來解決這些問題,這可以被認為是相關(guān)性預測中的源項目,而在目標領域建立精確的預測模型,可以被視為目標項目[12]。
遷移學習的模型定義如下:
設XT為目標樣本空間,XS為源樣本空間,目標樣本空間也即目標空間,就是想要去分類的樣本空間。設Y={0,1}為類空間,訓練數(shù)據(jù)也就是:T?{(X=XS)×Y}。
TCA是一種基于特征的遷移學習方法,使用MMD(maximum mean discrepancy)[13-14]將處于不同數(shù)據(jù)分布的源空間和目標空間一起映射到一個高維的再生核希爾伯特空間。在該空間中,最小化源數(shù)據(jù)和目標數(shù)據(jù)距離,同時最大程度地保留源數(shù)據(jù)和目標數(shù)據(jù)各自的內(nèi)部屬性,那么跨空間的差異可能會大大降低。因此,通過這個高維空間中的新表示,可以應用標準的機器學習方法來訓練源空間中的分類器或回歸模型,以在目標空間中使用。TCA算法描述如下:
輸入:源空間訓練樣本集Ta,目標空間測試樣本集Tb,訓練數(shù)據(jù)M,測試數(shù)據(jù)N。
預處理:對樣本集進行預處理(如歸一化、降維等)。
(1)構(gòu)造L矩陣。
(2)構(gòu)造H矩陣。
(3)構(gòu)造核函數(shù)矩陣K。
根據(jù)Ta和Tb,使用常用核函數(shù)計算K。
(4)構(gòu)造矩陣W。
求(KLK+μI)-1KHK的前m個特征值,即為W矩陣。
(5)映射樣本數(shù)據(jù):W'*T。
輸出:源訓練樣本和目標測試樣本的降維數(shù)據(jù)。
在上一節(jié)的基礎上,得到降維之后的訓練樣本數(shù)據(jù)運用傳統(tǒng)機器學習方法訓練源空間的分類器,并對目標空間的測試數(shù)據(jù)進行缺陷預測。結(jié)合前面介紹的方法,得到文中算法流程,如圖2所示。
圖2 文中算法流程
圖中第一階段代表第一次工程內(nèi)預測,將預測結(jié)果作為工程的度量元加入數(shù)據(jù)集,通過數(shù)據(jù)集預處理得到新數(shù)據(jù)集作為第二階段的輸入數(shù)據(jù)[15];第二階段運用TCA算法,結(jié)合復雜的分類模型進行跨工程預測,得到最終的預測結(jié)果。算法MTCA第二階段偽代碼描述如下:
輸入:源空間訓練樣本集XS,目標空間測試樣本集XT。
預處理:對樣本集進行預處理(如歸一化、降維等)。
步驟2:使用SVM分類器對每一個測試樣本實例進行預測分類。
輸出:目標測試樣本的預測標記。
實驗是在AEEEM[10]數(shù)據(jù)庫上進行的,該數(shù)據(jù)庫包含5個工程,表1介紹了各個工程的靜態(tài)代碼度量和缺陷數(shù)等特征[16]。
表1 AEEEM數(shù)據(jù)集
通過Precision(精確度)、Recall(召回率)以及F-measure(綜合評估)三個指標來全面評估各個方法的性能,這三個指標是評估分類模型最具代表性的度量[17],一個好的預測模型希望實現(xiàn)較高的Recall和Precision值。
根據(jù)表2,Precision和Recall可以定義為:
(1)
(2)
表2 四種預測結(jié)果
但是,Recall和Precision兩個指標之間存在著權(quán)衡。因此,需要對召回率和精確度進行綜合評估,則F-measure定義為:
(3)
這四種評價指標值都在0~1之間,一個好的缺陷預測模型應該會有較高的Precision、F-measure和Recall值。而且F-measure是綜合性評價指標,更加重要。
文中使用一對一的跨工程預測(即僅使用一個源項目預測一個目標項目),使用AEEEM庫構(gòu)建一個跨項目組合,例如:EQ→JDT、EQ→LC、LC→PDE等。實驗步驟為:首先是AEEEM庫中的5個工程各自做一次工程內(nèi)缺陷預測,分類器分別是LR、RF、NN,將預測結(jié)果作為工程的度量元加入數(shù)據(jù)集,每個原始數(shù)據(jù)集加入一個特征,即構(gòu)成了三組新的數(shù)據(jù)集,即(EQ_LR、JDT_LR、ML_LR、LC_LR、JDT_LR)為一組新數(shù)據(jù)集,(EQ_RF、JDT_RF、ML_RF、LC_RF、JDT_RF)為一組新數(shù)據(jù)集,(EQ_NN、JDT_NN、ML_NN、LC_NN、JDT_NN)為一組新數(shù)據(jù)集。每組新數(shù)據(jù)集進行跨項目組合并遷移,然后進行跨工程的軟件缺陷再預測,二次預測使用一個魯棒性更強的分類器,文中使用SVM,這一算法流程簡稱MTCA。在對比算法TCA時,為了保證實驗的可靠性,使用SVM分類器。對TCA方法與MTCA方法做對比,TCA使用的是原始數(shù)據(jù)集,MTCA使用的是EQ、JDT、LC、ML、PDE三組新數(shù)據(jù)集,隨機進行20次求平均,結(jié)果如表3所示。
表3 在AEEEM數(shù)據(jù)庫上的實驗結(jié)果
分析表3可知,MTCA在各個數(shù)據(jù)庫上的缺陷預測效果普遍好于TCA,尤其是F-measure評價指標,相較其他方法優(yōu)勢明顯。F-measure作為綜合評價指標,從該值的觀測中就能看出算法的總體性能,而MTCA在F-measure上較TCA要高出很多,也說明了該方法的優(yōu)勢。但是,也存在一些結(jié)果相比較低的,原因是加入新的度量元時可能引入了過多的錯誤數(shù)據(jù),導致缺陷預測模型向著錯誤的方向構(gòu)建??傮w上結(jié)果還是普遍較好。
針對當前軟件缺陷預測模型中機器學習算法對預測模型性能的影響問題,提出了一種通過增加度量元來提高基于遷移學習的跨項目缺陷預測性能的方法。首先使用分類器對數(shù)據(jù)集進行一次項目內(nèi)預測,并將預測結(jié)果作為新的度量元加入數(shù)據(jù)集;然后采用遷移學習方法將源項目中提取的知識轉(zhuǎn)移至目標項目,并使用分類器預測目標項目,從而提高了跨項目軟件缺陷預測效率。通過對比驗證了該方法的有效性。如何合理選擇分類器以進一步提高缺陷預測模型的性能指標是下一步研究的問題。