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