倪 超,陳 翔,2,劉望舒,3,顧 慶,黃啟國,李 娜
1(計(jì)算機(jī)軟件新技術(shù)國家重點(diǎn)實(shí)驗(yàn)室(南京大學(xué)),江蘇 南京 210023)
2(南通大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,江蘇 南通 226019)
3(南京工業(yè)大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,江蘇 南京 211816)
軟件缺陷產(chǎn)生于開發(fā)人員的編碼過程,軟件需求理解不正確、軟件開發(fā)過程不合理或開發(fā)人員的經(jīng)驗(yàn)不足,均有可能引入軟件缺陷.含有缺陷的軟件在部署后可能會(huì)產(chǎn)生意料之外的結(jié)果或行為,嚴(yán)重時(shí)會(huì)給企業(yè)造成巨大的經(jīng)濟(jì)損失,甚至?xí){到人們的生命安全.在軟件項(xiàng)目的開發(fā)生命周期中,檢測出內(nèi)在缺陷的時(shí)間越晚,修復(fù)該缺陷的代價(jià)也越高.尤其在軟件發(fā)布后,檢測和修復(fù)缺陷的代價(jià)將大幅度增加.因此,項(xiàng)目主管借助軟件測試或代碼審查等軟件質(zhì)量保障手段,希望能夠在軟件部署前盡可能多地檢測出內(nèi)在缺陷.但是如果關(guān)注所有的程序模塊會(huì)消耗大量的人力物力,因此,軟件質(zhì)量保障部門主管希望能夠預(yù)先識(shí)別出潛在缺陷程序模塊,并隨后對(duì)其分配足夠的測試資源.
軟件缺陷預(yù)測(software defect prediction,簡稱 SDP)[1-3]是其中一種可行方法,根據(jù)軟件歷史開發(fā)數(shù)據(jù)以及已發(fā)現(xiàn)的缺陷,借助機(jī)器學(xué)習(xí)等方法來預(yù)測出軟件項(xiàng)目內(nèi)的潛在缺陷程序模塊.目前,大部分研究工作關(guān)注項(xiàng)目內(nèi)的軟件缺陷預(yù)測(within-project defect prediction,簡稱WPDP)問題,即基于同一項(xiàng)目的數(shù)據(jù)完成軟件缺陷預(yù)測模型的構(gòu)建和預(yù)測.通常,構(gòu)建一個(gè)性能較好的缺陷預(yù)測模型需要大量的訓(xùn)練實(shí)例,但是現(xiàn)實(shí)中收集并標(biāo)注足夠多的訓(xùn)練數(shù)據(jù)相當(dāng)困難:一方面,一些新開發(fā)項(xiàng)目只含有較少的訓(xùn)練數(shù)據(jù);另一方面,標(biāo)記數(shù)據(jù)需要耗費(fèi)大量的人力和物力,且這個(gè)過程容易出錯(cuò).于是,跨項(xiàng)目軟件缺陷預(yù)測(cross-project defect prediction,簡稱CPDP)[4-11]問題被研究人員提出,其基于其他項(xiàng)目(即源項(xiàng)目)的歷史數(shù)據(jù)來構(gòu)建軟件缺陷預(yù)測模型,然后在當(dāng)前項(xiàng)目(即目標(biāo)項(xiàng)目)上進(jìn)行缺陷預(yù)測.然而,由于源項(xiàng)目和目標(biāo)項(xiàng)目之間的數(shù)據(jù)分布在大部分時(shí)候都具有很大的差異性,這導(dǎo)致了在源項(xiàng)目上構(gòu)建的模型在目標(biāo)項(xiàng)目上很難具有良好的預(yù)測性能.因此,縮小源項(xiàng)目和目標(biāo)項(xiàng)目之間的數(shù)據(jù)分布差異性,是設(shè)計(jì)跨項(xiàng)目缺陷預(yù)測方法需要重點(diǎn)考慮的問題.
針對(duì)該問題,本文首次同時(shí)從特征遷移和實(shí)例遷移角度出發(fā),提出了一種兩階段跨項(xiàng)目缺陷預(yù)測方法FeCTrA(cross-project software defect prediction using feature clustering and TrAdaBoost).具體來說,在特征遷移階段,該方法借助聚類分析選出源項(xiàng)目與目標(biāo)項(xiàng)目之間具有高分布相似度的特征;在實(shí)例遷移階段,該方法借助TrAdaBoost方法,基于目標(biāo)項(xiàng)目中的少量已標(biāo)注實(shí)例,從源項(xiàng)目中選出與這些已標(biāo)注實(shí)例分布相近的實(shí)例.為了驗(yàn)證FeCTrA方法的有效性,我們選擇具有代表性的、開源的、真實(shí)項(xiàng)目的Relink數(shù)據(jù)集和AEEEM數(shù)據(jù)集作為評(píng)測對(duì)象,以F1作為評(píng)測指標(biāo).首先,我們發(fā)現(xiàn),FeCTrA方法的預(yù)測性能要優(yōu)于僅考慮特征遷移階段或?qū)嵗w移階段的單階段方法;其次,與經(jīng)典的跨項(xiàng)目缺陷預(yù)測方法 TCA+[12]、Peters過濾法[13]、Burak過濾法[14]以及DCPDP法[15]相比,FeCTrA方法的預(yù)測性能在 Relink 數(shù)據(jù)集上可以分別提升 23%、7.2%、9.8%和 38.2%,在AEEEM數(shù)據(jù)集上可以分別提升96.5%、108.5%、103.6%和107.9%.基于上述分析我們發(fā)現(xiàn),FeCTrA方法不僅可以有效移除冗余特征和無關(guān)特征,而且可以從源項(xiàng)目中選出與目標(biāo)項(xiàng)目分布更為相似的實(shí)例.此外,實(shí)證研究結(jié)果也初步驗(yàn)證了FeCTrA方法的有效性.
本文的主要貢獻(xiàn)可總結(jié)如下.
(1) 提出了基于特征遷移和實(shí)例遷移的跨項(xiàng)目軟件缺陷預(yù)測方法FeCTrA,該方法可以有效地移除冗余特征和無關(guān)特征,并且可以從源項(xiàng)目中選出與目標(biāo)項(xiàng)目分布相似的實(shí)例,從而有效減小源項(xiàng)目和目標(biāo)項(xiàng)目之間的數(shù)據(jù)分布差異性;
(2) 在實(shí)證研究中考慮了基于實(shí)際項(xiàng)目的Relink和AEEEM數(shù)據(jù)集,深入分析了不同影響因素對(duì)FeCTrA方法性能的影響,為更好地使用FeCTrA方法提供了指導(dǎo)性建議;
(3) 通過將FeCTrA方法與Nam等人提出的TCA+[12]、Peters等人提出的Peters過濾法[13]、Turhan等人提出的Burak過濾法[14]以及Zimmermann等人提出的DCPDP法[15]進(jìn)行比較,發(fā)現(xiàn)FeCTrA方法在預(yù)測性能上具有顯著優(yōu)勢,這說明通過融合多種不同類型的遷移學(xué)習(xí)方法來解決CPDP問題值得關(guān)注.
本文第1節(jié)介紹軟件缺陷預(yù)測的研究背景和相關(guān)研究工作.第2節(jié)介紹 FeCTrA方法及其具體實(shí)現(xiàn)細(xì)節(jié).第3節(jié)介紹論文的實(shí)證研究,包括研究問題、評(píng)測對(duì)象、評(píng)測指標(biāo)、顯著性檢驗(yàn)方法、實(shí)驗(yàn)流程及其方法參數(shù)設(shè)置.第4節(jié)對(duì)實(shí)證研究結(jié)果進(jìn)行詳細(xì)分析.最后總結(jié)全文,并對(duì)下一步研究工作進(jìn)行展望.
軟件缺陷預(yù)測[1-3,16-21]是當(dāng)前軟件工程數(shù)據(jù)挖掘領(lǐng)域的一個(gè)研究熱點(diǎn)[11,22-27].缺陷預(yù)測可以在軟件發(fā)布之前盡可能多地預(yù)測出潛在缺陷程序模塊,以便于合理分配測試資源,從而最終提高軟件質(zhì)量.其主要包括兩個(gè)階段:模型構(gòu)建階段和模型應(yīng)用階段.模型構(gòu)建階段主要包括如下3個(gè)步驟.
(1) 挖掘軟件歷史倉庫.目前可供挖掘與分析的軟件歷史倉庫包括項(xiàng)目所處的版本控制系統(tǒng)(例如CVS、SVN、Git)、缺陷跟蹤系統(tǒng)(例如Bugzilla、Mantis、Jira、Trac)或團(tuán)隊(duì)開發(fā)人員間相互發(fā)送的電子郵件等.程序模塊的粒度根據(jù)實(shí)際應(yīng)用場景的需要,可以設(shè)置為包、文件、類、函數(shù)或代碼修改等.
(2) 程序模塊的度量和標(biāo)記.通過分析軟件代碼復(fù)雜度或開發(fā)過程特征,可以設(shè)計(jì)出與軟件缺陷存在相關(guān)性的度量元(metrics)[28].通過這些度量元,可以對(duì)程序模塊進(jìn)行度量;隨后,通過分析缺陷報(bào)告可以完成對(duì)這些程序模塊的標(biāo)記.
(3) 模型的構(gòu)建.基于搜集的缺陷預(yù)測數(shù)據(jù)集,首先進(jìn)行必要的數(shù)據(jù)預(yù)處理(例如特征選擇、數(shù)據(jù)取值歸一化、噪音移除等)[22,29-33],隨后可以基于特定的機(jī)器學(xué)習(xí)方法(例如Logisitic回歸、隨機(jī)森林、支持向量機(jī)等)完成模型的構(gòu)建.
而在模型應(yīng)用階段,當(dāng)面對(duì)新的程序模塊時(shí),在完成對(duì)該模塊的軟件度量后,基于已構(gòu)造出的缺陷預(yù)測模型和具體度量元取值,可以完成對(duì)該模塊的預(yù)測,即預(yù)測為潛在缺陷模塊或無缺陷模塊.
目前,絕大部分軟件缺陷預(yù)測方法基于同一項(xiàng)目上的數(shù)據(jù)進(jìn)行模型訓(xùn)練和模型預(yù)測,這類方法被稱為項(xiàng)目內(nèi)缺陷預(yù)測方法,而充足的標(biāo)記數(shù)據(jù)是保障這類方法取得良好預(yù)測性能的前提.然而,對(duì)于剛開發(fā)的項(xiàng)目或者歷史遺留項(xiàng)目,可能難以獲取足夠多的標(biāo)記數(shù)據(jù),因此難以構(gòu)建出具有良好預(yù)測性能的模型.針對(duì)這種情況,跨項(xiàng)目缺陷預(yù)測[5,12,15,34,35]應(yīng)運(yùn)而生.跨項(xiàng)目缺陷預(yù)測基于其他項(xiàng)目(即源項(xiàng)目)的標(biāo)記數(shù)據(jù)進(jìn)行模型訓(xùn)練,并在當(dāng)前項(xiàng)目(即目標(biāo)項(xiàng)目)上進(jìn)行缺陷預(yù)測.然后,由于源項(xiàng)目和目標(biāo)項(xiàng)目之間存在較大的數(shù)據(jù)分布差異性,因此在源項(xiàng)目上訓(xùn)練的模型在目標(biāo)項(xiàng)目上未必能夠取得良好的預(yù)測性能[15].因此,設(shè)計(jì)新穎高效的跨項(xiàng)目軟件缺陷預(yù)測方法具有一定的研究挑戰(zhàn)性,研究人員針對(duì)該問題提出了多種解決方法.
Zimmermann等人[15]首先針對(duì) CPDP的可行性展開了大規(guī)模的實(shí)證研究,然而研究結(jié)果并不樂觀.Turhan等人[14]提出了基于k近鄰的 Burak過濾法.具體而言,該方法首先計(jì)算出目標(biāo)項(xiàng)目中實(shí)例與候選源項(xiàng)目中實(shí)例之間的歐式距離;然后為目標(biāo)項(xiàng)目中的每一個(gè)未標(biāo)注實(shí)例,從源項(xiàng)目中選出距離其最近的k(k為 10)個(gè)實(shí)例;最后,將所有從源項(xiàng)目中選出的實(shí)例構(gòu)成訓(xùn)練集.實(shí)驗(yàn)結(jié)果表明,Burak過濾法雖然可以提升CPDP的性能,但是仍然低于WPDP方法.不同于Turhan等人從目標(biāo)項(xiàng)目出發(fā)進(jìn)行實(shí)例選擇,Peters等人[13]則認(rèn)為源項(xiàng)目中的數(shù)據(jù)包含更多的信息,因此,他們提出了Peters過濾法.具體而言,首先針對(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)練集中.Ma等人[36]則提出了TNB(transfer naive bayes)方法,他們認(rèn)為,應(yīng)該為源項(xiàng)目中與目標(biāo)項(xiàng)目中實(shí)例相似的實(shí)例賦予更高的權(quán)重.Wang等人[37]則基于深度學(xué)習(xí),從模塊代碼中自動(dòng)學(xué)出語義表示.Chen等人[38]提出的方法則考慮從源項(xiàng)目中刪除帶有負(fù)面影響的實(shí)例.Xia等人[6]提出了兩階段框架Hydra,該框架引入了遺傳算法和集成學(xué)習(xí),以獲取源項(xiàng)目和目標(biāo)項(xiàng)目之間的共有信息.
一些研究人員針對(duì)異構(gòu)CPDP問題展開了深入研究,該問題嘗試在源項(xiàng)目和目標(biāo)項(xiàng)目間具有不同特征空間的情況下進(jìn)行跨項(xiàng)目缺陷預(yù)測.針對(duì)該問題,Turhan等人[14]提出了一種簡單方法,即在構(gòu)建CPDP模型時(shí)僅考慮源項(xiàng)目和目標(biāo)項(xiàng)目之間共有的特征.顯然,這種方法存在兩點(diǎn)不足:首先,源項(xiàng)目和目標(biāo)項(xiàng)目之間共有的特征通常較少,甚至有時(shí)候沒有;其次,僅考慮共有的特征會(huì)遺漏掉大量其他有用的信息.針對(duì)上述不足,He等人[39]首先提出了 CPDP-IFS方法.該方法將每一個(gè)實(shí)例視為向量,并計(jì)算其分布特征指標(biāo)的取值,從而可以將目標(biāo)項(xiàng)目和源項(xiàng)目中的實(shí)例映射到一個(gè)潛在空間,該潛在空間由實(shí)例的分布特征指標(biāo)構(gòu)成,從而確保 CPDP可以在同一個(gè)特征空間內(nèi)進(jìn)行.Nam等人[40]提出了HDP(heterogeneous defect prediction)方法,該方法包含特征選擇階段和特征映射階段.Jing等人[25]提出了 UMR(unified metric representation)表示,隨后,借助典型相關(guān)分析(canonical correlation analysis)來減少源項(xiàng)目和目標(biāo)項(xiàng)目間的數(shù)據(jù)分布差異性.
除此之外,一些研究人員考慮使用無監(jiān)督方法來解決CPDP問題.Zhong等人[41]使用k-means和NeuralGas方法對(duì)程序模塊進(jìn)行聚類分析,然后,他們從每一個(gè)簇中選出典型模塊,并將一些統(tǒng)計(jì)信息(如特征的均值、最大值、最小值等)提供給專家,最終交由專家完成對(duì)簇的標(biāo)記.Nam和Kim[27]提出了一種自動(dòng)方法CLA.CLA方法會(huì)依據(jù)每個(gè)特征的中位數(shù)統(tǒng)計(jì)該實(shí)例含有的異常特征數(shù),然后將具有相同異常數(shù)的實(shí)例劃分到同一個(gè)簇中,隨后將高于一定異常特征數(shù)的實(shí)例標(biāo)記為有缺陷實(shí)例,否則標(biāo)記為無缺陷實(shí)例.在 CLA方法的基礎(chǔ)上,Nam等人又通過特征選擇和實(shí)例選擇來移除數(shù)據(jù)集中噪聲,并提出了 CLAMI方法.Zhang等人[42]借助譜聚類(spectral clustering)方法,基于程序模塊間的連通性完成對(duì)數(shù)據(jù)集的劃分.最近,Yang等人[43]借助代價(jià)感知的評(píng)測指標(biāo)進(jìn)行性能評(píng)估時(shí)意外地發(fā)現(xiàn),一些簡單的無監(jiān)督方法比有監(jiān)督方法可以取的更好的預(yù)測性能.隨后,Zhou等人[44]針對(duì)無監(jiān)督方法(即ManualDown和ManualUp方法)展開了更大規(guī)模的實(shí)證研究.
近些年來,遷移學(xué)習(xí)(transfer learning)引起了廣泛的研究和關(guān)注[45-51].遷移學(xué)習(xí)是運(yùn)用已存在的知識(shí)對(duì)不同但相關(guān)的領(lǐng)域問題進(jìn)行求解的一種學(xué)習(xí)方法,該方法放寬了傳統(tǒng)機(jī)器學(xué)習(xí)中兩個(gè)基本假設(shè):(1) 用于學(xué)習(xí)的訓(xùn)練樣本與新的測試樣本需要滿足獨(dú)立同分布的假設(shè);(2) 必須有足夠的已標(biāo)記樣本才能訓(xùn)練出一個(gè)好的分類模型.該方法旨在遷移已有的知識(shí)來解決目標(biāo)領(lǐng)域中僅有少量有標(biāo)記樣本數(shù)據(jù)甚至有時(shí)候沒有的學(xué)習(xí)問題.跨項(xiàng)目軟件缺陷預(yù)測可以視為遷移學(xué)習(xí)在軟件缺陷預(yù)測領(lǐng)域中的一個(gè)重要應(yīng)用.
目前,遷移學(xué)習(xí)方法可以從兩個(gè)角度進(jìn)行分類.基于“遷移什么”角度,已有方法可以細(xì)分為4類:基于特征的遷移學(xué)習(xí)、基于實(shí)例的遷移學(xué)習(xí)、基于參數(shù)的遷移學(xué)習(xí)和基于相關(guān)知識(shí)的遷移學(xué)習(xí).基于“如何遷移”角度,已有方法可以細(xì)分為 3類:(1) 歸納式遷移學(xué)習(xí):目標(biāo)領(lǐng)域中有少量標(biāo)注樣本;(2) 直推式遷移學(xué)習(xí):只有源領(lǐng)域中有標(biāo)簽樣本;(3) 無監(jiān)督遷移學(xué)習(xí):源領(lǐng)域和目標(biāo)領(lǐng)域都沒有標(biāo)簽樣本.表1總結(jié)了傳統(tǒng)機(jī)器學(xué)習(xí)方法和不同類型的遷移學(xué)習(xí)方法間的關(guān)系.
目前,跨項(xiàng)目缺陷預(yù)測主要從“遷移什么”的角度展開研究,其中,“基于特征的遷移學(xué)習(xí)”和“基于實(shí)例的遷移學(xué)習(xí)”是研究人員關(guān)注較多的方法,這也是我們主要考慮的角度.基于特征遷移學(xué)習(xí)的方法嘗試尋找在源領(lǐng)域和目標(biāo)領(lǐng)域之間具有相同或者相似性質(zhì)的特征,從而達(dá)到從源領(lǐng)域?qū)⒅R(shí)遷移到目標(biāo)領(lǐng)域.一些跨項(xiàng)目缺陷預(yù)測法方法[7,8,12,14,25,39,40]從這個(gè)角度展開研究.而基于實(shí)例的遷移學(xué)習(xí)方法則根據(jù)目標(biāo)領(lǐng)域中數(shù)據(jù)的部分知識(shí)從源領(lǐng)域中挑選有價(jià)值的實(shí)例.這類方法通常對(duì)源領(lǐng)域中的實(shí)例進(jìn)行選擇或權(quán)重設(shè)置.一些跨項(xiàng)目缺陷預(yù)測方法[6,13,14,36,38]從這個(gè)角度展開研究.但上述研究工作僅從單一角度將源項(xiàng)目中的信息遷移到目標(biāo)項(xiàng)目中.本文將基于特征的遷移學(xué)習(xí)和基于實(shí)例的遷移學(xué)習(xí)相結(jié)合,提出了基于直推式遷移學(xué)習(xí)方式的FeCTrA方法.
Table 1 Relationship between traditional machine learning methods and different types of transfer learning methods表1 傳統(tǒng)機(jī)器學(xué)習(xí)方法和不同類別遷移學(xué)習(xí)方法的關(guān)系
本節(jié)首先介紹基于特征遷移和實(shí)例遷移的跨項(xiàng)目預(yù)測方法FeCTrA的研究動(dòng)機(jī),然后對(duì)FeCTrA方法的整體框架進(jìn)行描述,最后對(duì)框架內(nèi)的特征間相關(guān)性和特征分布相似性的度量方法進(jìn)行介紹.
軟件缺陷預(yù)測基于項(xiàng)目的歷史數(shù)據(jù)構(gòu)建模型,然后對(duì)新的軟件模塊進(jìn)行缺陷預(yù)測.但在實(shí)際軟件開發(fā)過程中,新開發(fā)的項(xiàng)目可能沒有充足的訓(xùn)練數(shù)據(jù),或者一些遺留項(xiàng)目因?yàn)樘厥庠蚨鵁o法獲得足夠多的訓(xùn)練數(shù)據(jù).因此,構(gòu)建一個(gè)具有良好性能的缺陷預(yù)測模型變得異常困難.于是,遷移學(xué)習(xí)被引入到軟件缺陷預(yù)測研究中,借助源項(xiàng)目中的歷史標(biāo)記數(shù)據(jù)以解決目標(biāo)項(xiàng)目訓(xùn)練實(shí)例過少的問題.然而,由于源項(xiàng)目和目標(biāo)項(xiàng)目之間存在較大的數(shù)據(jù)分布差異,使得在源項(xiàng)目數(shù)據(jù)上構(gòu)建的缺陷預(yù)測模型并不能保證在目標(biāo)項(xiàng)目上取得良好的預(yù)測性能.一方面,從特征角度而言,源項(xiàng)目中并不是所有的特征都與目標(biāo)項(xiàng)目具有相似的分布,只有分布相似的特征才能輔助目標(biāo)項(xiàng)目構(gòu)建性能良好的缺陷預(yù)測模型;另一方面,從實(shí)例角度而言,源項(xiàng)目數(shù)據(jù)和目標(biāo)項(xiàng)目數(shù)據(jù)本身源于不同的項(xiàng)目,因此通常情況下,源項(xiàng)目中的數(shù)據(jù)與目標(biāo)項(xiàng)目數(shù)據(jù)的分布具有差異性.針對(duì)該問題,研究人員分別從特征遷移或者實(shí)例遷移的角度展開研究[6-8,12-14,36,38],并取得了一定成果,這充分證明了從特征遷移和實(shí)例遷移角度嘗試縮小源項(xiàng)目與目標(biāo)項(xiàng)目之間數(shù)據(jù)分布差異性的可行性.然而,目前取得的效果并不令人十分滿意.為此,我們提出了兩階段跨項(xiàng)目缺陷預(yù)測方法FeCTrA,該方法通過同時(shí)考慮特征遷移和實(shí)例遷移,旨在縮小兩個(gè)項(xiàng)目的數(shù)據(jù)分布差異性.在特征遷移階段中,通過聚類分析,可以識(shí)別并移除無關(guān)特征和冗余特征;在實(shí)例遷移階段中,依據(jù)目標(biāo)項(xiàng)目中僅有的少量標(biāo)記數(shù)據(jù),借助 TrAdaBoost方法[47],從源項(xiàng)目中選出與目標(biāo)項(xiàng)目數(shù)據(jù)分布更相近的實(shí)例,從而解決訓(xùn)練數(shù)據(jù)不足的問題.
FeCTrA方法的框架如圖1所示,該方法包含兩個(gè)階段:特征遷移階段和實(shí)例遷移階段.
· 在特征遷移階段,為了能夠遷移有效的特征信息,FeCTrA方法首先移除源項(xiàng)目數(shù)據(jù)中的類標(biāo)信息,然后將源項(xiàng)目和目標(biāo)項(xiàng)目數(shù)據(jù)進(jìn)行合并;隨后,對(duì)合并后的數(shù)據(jù)集基于特征進(jìn)行聚類分析,從而把高度相關(guān)的特征聚集到同一個(gè)簇中;然后計(jì)算每一個(gè)特征在源項(xiàng)目數(shù)據(jù)和目標(biāo)項(xiàng)目數(shù)據(jù)之間分布的相似性,以此作為排序依據(jù),并對(duì)每一個(gè)簇中的特征進(jìn)行降序排列;最后,從每一個(gè)簇中選取排名靠前的特征作為最終需要遷移的特征.
· 在實(shí)例遷移階段,刪除源項(xiàng)目和目標(biāo)項(xiàng)目中不必要的特征,僅保留特征遷移階段選出的特征和源項(xiàng)目的類標(biāo)特征;然后,利用TrAdaBoost方法[47],從源項(xiàng)目中選出與目標(biāo)項(xiàng)目分布相似的數(shù)據(jù)來構(gòu)建訓(xùn)練數(shù)據(jù)集,并通過 Boost方法不斷迭代,增強(qiáng)基分類器的分類能力,得到若干基分類器,從而構(gòu)成一個(gè)基于集成學(xué)習(xí)方式的跨項(xiàng)目缺陷預(yù)測模型.
Fig.1 Cross-project software defect prediction framework based on feature transfer and instance transfer圖1 基于特征遷移和實(shí)例遷移的跨項(xiàng)目軟件缺陷預(yù)測框架
2.2.1 特征遷移階段
為了更好地描述該階段,首先給出兩個(gè)定義:
定義1(特征間相關(guān)性(inter-feature correlation,簡稱IFC)).IFC(fi,fj)表示特征fi和特征fj之間的相關(guān)性,其中,i和j不相同.
IFC(fi,fj)的取值范圍是[0,1].IFC(fi,fj)取值越高,表明fi和fj之間的相關(guān)性越高.其中,當(dāng)IFC(fi,fj)=0時(shí),表明特征fi和特征fj之間完全獨(dú)立;當(dāng)IFC(fi,fj)=1時(shí),表明特征fi和特征fj之間完全相關(guān).本文中使用的特征間相關(guān)性度量方法如第2.2.3節(jié)所述.
定義2(特征分布相似性(similarity of feature distribution,簡稱SFD)).SFD(fi)表明特征fi在源項(xiàng)目和目標(biāo)項(xiàng)目上分布的相似性.
SFD(fi)的取值范圍是[0,+∞).SFD(fi)取值越大,表明該特征在兩個(gè)數(shù)據(jù)集上分布越相似.顯然,SFD(fi)取值越大越好.其中,SFD(fi)=0表明該特征在兩個(gè)數(shù)據(jù)集上分布完全不相似.本文中使用的特征分布相似性度量方法如第2.2.4節(jié)所述.
算法1中給出了特征遷移階段的詳細(xì)描述.該算法是對(duì)K-medoids算法的擴(kuò)展,主要目標(biāo)是找出K個(gè)最具有代表性的特征,這K個(gè)特征能夠使得各個(gè)簇之間的距離最大化并且簇內(nèi)特征之間的距離最小化.在算法1中,其輸入是源項(xiàng)目數(shù)據(jù)S、目標(biāo)項(xiàng)目數(shù)據(jù)T、需要選出的特征數(shù)m以及簇的個(gè)數(shù)k.算法的輸出是最終需要遷移的特征集合FS.
算法1.Feature Transfer Phase.
在算法1中,首先移除源項(xiàng)目和目標(biāo)項(xiàng)目數(shù)據(jù)中的類標(biāo)特征(第1行).然后,將過濾掉類標(biāo)特征的源項(xiàng)目數(shù)據(jù)和目標(biāo)項(xiàng)目數(shù)據(jù)進(jìn)行合并,形成一個(gè)完整的數(shù)據(jù)集(第2行).隨后計(jì)算任意兩個(gè)不同特征之間的相關(guān)性IFC(fi,fj)以及同一個(gè)特征在兩個(gè)項(xiàng)目之間的分布相似性SFD(fi)(第3行、第4行).計(jì)算完這兩項(xiàng)指標(biāo)之后,執(zhí)行特征聚類、特征排序和特征選擇過程.在特征聚類過程中(第5行),IFC(fi,fj)指標(biāo)被用來完成特征聚類,特征聚類的目的就是將初始的特征集合分配到k個(gè)簇中.在這些簇中,每一個(gè)簇里的任意兩個(gè)特征fi和fj(i≠j)都是高度相關(guān)的,但是兩個(gè)不同簇之間的特征相關(guān)度卻很低.整個(gè)聚類過程如下:首先,SFD(fi)指標(biāo)將被用于完成k個(gè)簇中心的初始化.在此過程中,為了避免選擇不相關(guān)的特征作為初始化階段中的簇中心并提高聚類過程的收斂速度,我們首先選擇在源項(xiàng)目和目標(biāo)項(xiàng)目中分布相似度最高的前k個(gè)特征,然后根據(jù)特征與這k個(gè)簇中心之間的相關(guān)度,依次指派每一個(gè)特征到與之相關(guān)度最高的簇中,直至所有特征都屬于一個(gè)特定的簇.接著重新計(jì)算各個(gè)簇的中心,按照相同的操作過程更新簇中心并重新指派各個(gè)特征到最相關(guān)的簇中.重復(fù)此過程,直至簇中心不在發(fā)生變化為止.在特征排序和特征選擇過程中(第6行、第7行),僅使用SFD(fi)指標(biāo)完成.在該過程中,對(duì)于每一個(gè)簇中的所有特征進(jìn)行排序后,從各個(gè)簇中選取特定的特征作為最終需要保留的特征,即最終需要遷移的特征.由于每一個(gè)簇的大小不盡相同,因此我們考慮了每一個(gè)簇的規(guī)模,并根據(jù)簇的大小從對(duì)應(yīng)的簇中選出相應(yīng)比例的特征.也就是說,從含有特征越多的簇中選取越多的特征,反之則越少.因此,將每個(gè)簇中特征根據(jù)SFD(fi)取值進(jìn)行降序排序后,從每個(gè)簇中選取個(gè)特征.其中,m表示最終需要選擇的特征個(gè)數(shù),n表示除類標(biāo)以外的所有特征個(gè)數(shù),|Ci|表示某個(gè)簇中含有的特征的個(gè)數(shù).最后,匯集從所有簇中選擇的特征到FS中(第8行、第9行).
2.2.2 實(shí)例遷移階段
在實(shí)例遷移階段,FeCTrA方法使用 TrAdaBoost[47]來完成,即從源項(xiàng)目數(shù)據(jù)中挑選實(shí)例,以便有足夠多的數(shù)據(jù)用于構(gòu)建在目標(biāo)項(xiàng)目上具有良好預(yù)測性能的模型.TrAdaBoost嘗試從源項(xiàng)目中選出與目標(biāo)項(xiàng)目中已經(jīng)標(biāo)注實(shí)例分布相近的實(shí)例,從而完成實(shí)例的遷移.TrAdaBoost是對(duì)Adaboost的一個(gè)改進(jìn),它是一個(gè)用于對(duì)源項(xiàng)目中的訓(xùn)練實(shí)例設(shè)置權(quán)重的框架,與目標(biāo)項(xiàng)目中實(shí)例分布相近的實(shí)例會(huì)被賦予更高的權(quán)重,反之則更小,從而可以在源項(xiàng)目中找到與目標(biāo)項(xiàng)目中實(shí)例分布相似的數(shù)據(jù).
算法2中給出了實(shí)例遷移的詳細(xì)描述.算法的輸入是經(jīng)過特征遷移過濾后的源項(xiàng)目數(shù)據(jù)FSource、經(jīng)過特征遷移過濾后的目標(biāo)項(xiàng)目數(shù)據(jù)FTarget、基分類器Learner以及最大迭代次數(shù)N.算法的輸出是含有多個(gè)分類器的集成預(yù)測模型.
在算法2中,主要借助TrAdaBoost完成實(shí)例的遷移.TrAdaBoost需要使用目標(biāo)項(xiàng)目中少量的標(biāo)記實(shí)例,為了操作和表述方便,將經(jīng)過特征過濾后的FSource記為Td,經(jīng)過特征過濾后的FTargetlabeled記為Ts,經(jīng)過特征過濾后的Ftargetunlabeled為S(第1行).其中,|Td|=n并且|Ts|=m.然后,為每一個(gè)已經(jīng)標(biāo)注的實(shí)例賦予初始權(quán)重(第2行).隨后進(jìn)入TrAdaBoost的循環(huán)階段(第3行~第10行).在循環(huán)內(nèi)部,設(shè)當(dāng)前迭代的輪次為t,首先對(duì)Td和Ts中實(shí)例的權(quán)重wt做歸一化操作(第4行).其次,在Td和Ts數(shù)據(jù)上,調(diào)用分類器Learner構(gòu)建一個(gè)分類假設(shè)ht(第5行).然后,用當(dāng)前得到的分類假設(shè)去預(yù)測目標(biāo)項(xiàng)目中已經(jīng)標(biāo)注的實(shí)例Ts,并計(jì)算預(yù)測錯(cuò)誤率(第6行、第7行).當(dāng)用得到的分類假設(shè)ht去預(yù)測實(shí)例Ts時(shí),如果實(shí)例被預(yù)測正確的話,這意味著這個(gè)實(shí)例和目標(biāo)項(xiàng)目中的實(shí)例具有相同的分布,否則表明它們有不同的分布.隨后,在 TrAdaboost中,根據(jù)錯(cuò)誤率來更新調(diào)整訓(xùn)練實(shí)例權(quán)重的因子(第 8行).最后,分別更新源項(xiàng)目數(shù)據(jù)和目標(biāo)項(xiàng)目數(shù)據(jù)中已標(biāo)注的實(shí)例的權(quán)重.這個(gè)方式可以減小分類錯(cuò)誤的實(shí)例對(duì)訓(xùn)練模型的影響,從而可以構(gòu)建一個(gè)具有良好性能的跨項(xiàng)目缺陷預(yù)測模型.重復(fù)此過程N(yùn)次,可以得到多個(gè)分類假設(shè)并進(jìn)行集成.因此,該模型充分利用了所有基分類器的分類能力來對(duì)未知的實(shí)例進(jìn)行預(yù)測(第11行).
算法2.Instance Transfer Phase.
2.2.3 特征之間相關(guān)性的度量方法
特征相關(guān)性度量是用來度量兩個(gè)特征fi和fj之間的關(guān)聯(lián)性.定義1中的IFC(fi,fj)是用于衡量兩個(gè)特征之間的關(guān)聯(lián)性.已有研究[52]表明,特征之間并不一定滿足線性關(guān)系.因此,使用非線性的度量方法來衡量兩個(gè)特征之間的關(guān)系更加合理.對(duì)稱不確定性(symmetric uncertainty,簡稱SU)是非線性度量中的一種典型的方法[53],本文在實(shí)驗(yàn)中使用SU來計(jì)算兩個(gè)特征之間的關(guān)聯(lián)性的,即IFC(fi,fj)=SU(fi,fj).值得注意的是,本文提出的框架適用于可以計(jì)算兩個(gè)特征之間相關(guān)性的任何方法,因此具有可擴(kuò)展性.
SU借助信息論中的熵,通過計(jì)算特征fi和fj之間的分布差異性來衡量彼此之間的關(guān)聯(lián)性.通過計(jì)算特征fi和fj的互信息,然后進(jìn)行歸一化,可得到SU.計(jì)算公式如下所示:
其中,
(1)H(fi)表示特征的不確定度(即熵),其定義如下:
p(fi′)表示特征fi取一個(gè)特定值的先驗(yàn)概率.
(2)IG(fi|fj)表示信息增益率.表示在給定特征fj的情況下,特征fi減少的量.其計(jì)算公式如下所示:
H(fi|fj)表示特征fj確定的情況下,特征fi的熵.其計(jì)算公式如下:
p(fj′)表示fj取一個(gè)特定值的先驗(yàn)概率.由上述公式可知,信息增益率具有對(duì)稱性,即兩個(gè)特征在公式中出現(xiàn)的順序不會(huì)影響它們之間的信息增益率的計(jì)算結(jié)果.
2.2.4 特征之間分布相似性的度量方法
特征分布的相似性是用來度量一個(gè)具體的特征fi在兩個(gè)不同的數(shù)據(jù)集上的分布的相似性程度.定義2中的SFD(fi)用于衡量一個(gè)具體特征在源項(xiàng)目和目標(biāo)項(xiàng)目數(shù)據(jù)集上的分布相似度.我們使用 K-S(Kolmogorov-Smirnov)檢驗(yàn)來驗(yàn)證兩組數(shù)據(jù)分布是否相似.這兩組數(shù)據(jù)是指兩個(gè)不同的數(shù)據(jù)集上相同特征對(duì)應(yīng)的數(shù)據(jù).K-S檢驗(yàn)是一種非參檢驗(yàn),主要通過計(jì)算兩組數(shù)據(jù)之間是否具有顯著的差異來反映特征分布的相似度.在本方法中,我們將 K-S檢驗(yàn)出來沒有顯著差異的情況定義為某特征在源項(xiàng)目和目標(biāo)項(xiàng)目數(shù)據(jù)上分布相似程度.值得注意的是,本文提出的框架適用于可以計(jì)算一個(gè)具體特征在兩組數(shù)據(jù)上分布相似性的任何方法,因此具有可擴(kuò)展性.
K-S檢驗(yàn)是一種擬合度檢驗(yàn),用來判斷樣本的實(shí)際分布值與指定理論的分布是否吻合.當(dāng)然,K-S也可以用來檢測兩個(gè)樣本分布是否具有顯著差異,也就是說兩樣本的分布是否相同.該方法通過兩個(gè)樣本的累計(jì)頻次數(shù)分布是否相當(dāng)接近來判斷原假設(shè)H0是否為真.假如兩個(gè)樣本間的累計(jì)概率具有較大的分布差異,那么可以肯定兩個(gè)樣本取自不同的總體,則拒絕H0.
K-S檢驗(yàn)首先提出兩個(gè)假設(shè):H0:S1(x)=S2(x),H1:S1(x)≠S2(x).如果令S1(x),S2(x)分別表示第1個(gè)和第2個(gè)樣本觀察值的累計(jì)概率分布函數(shù),那么得到K-S兩個(gè)樣本的雙尾檢測統(tǒng)計(jì)量為D=max|S1(x)-S2(x)|.如果對(duì)于每一對(duì)樣本值,S1(x)和S2(x)都能十分接近的話,則表明兩個(gè)分?jǐn)?shù)的擬合程度很高,則有理由認(rèn)為兩個(gè)樣本數(shù)據(jù)來自于相同的分布函數(shù).這里,通常將顯著性水平p-value設(shè)置為0.05.因此,當(dāng)計(jì)算出來的值大于0.05時(shí)則接受原假設(shè)H0,否則拒絕.
本節(jié)將對(duì)FeCTra方法的有效性展開實(shí)證研究,首先提出研究問題,從不同角度來探討FeCTrA方法在各類場景下的性能優(yōu)劣,然后介紹實(shí)證研究中使用的數(shù)據(jù)集、性能評(píng)測指標(biāo)和顯著性檢驗(yàn)方法,最后介紹實(shí)驗(yàn)流程及其方法參數(shù)設(shè)定.
3.1 研究問題
FeCTrA方法的目的是在目標(biāo)項(xiàng)目內(nèi)沒有足夠多訓(xùn)練數(shù)據(jù)的前提下完成缺陷預(yù)測的任務(wù).FeCTrA方法從分布的差異性入手,結(jié)合特征遷移和實(shí)例遷移來構(gòu)造出對(duì)目標(biāo)項(xiàng)目有用的訓(xùn)練數(shù)據(jù).一方面,特征遷移主要從源項(xiàng)目中選擇與目標(biāo)項(xiàng)目中分布相似的特征,從特征角度降低分布差異較大對(duì)數(shù)據(jù)集質(zhì)量的影響;另一方面,實(shí)例遷移主要使用TrAdaBoost方法,嘗試從源項(xiàng)目中選出與目標(biāo)項(xiàng)目數(shù)據(jù)服從相似分布的實(shí)例,從實(shí)例角度降低分布差異較大對(duì)數(shù)據(jù)集質(zhì)量的影響.為了驗(yàn)證FeCTrA方法的有效性,本文提出如下4個(gè)研究問題.
· RQ1:FeCTrA方法是否優(yōu)于已有的經(jīng)典的跨項(xiàng)目缺陷預(yù)測方法?
目前,研究人員針對(duì)跨項(xiàng)目缺陷預(yù)測問題已經(jīng)提出了多種方法,我們重點(diǎn)考慮TCA+[12]、Peters過濾法[13]、Burak過濾法[14]和Zimmermann等人[15]提出的方法.除此之外,我們還同時(shí)考慮了僅基于特征遷移的FeCTrA方法和僅基于實(shí)例遷移的FeCTrA方法.在FeCTrA方法中會(huì)存在很多影響因素,例如特征遷移階段的特征選擇比例、實(shí)例遷移階段的目標(biāo)項(xiàng)目中標(biāo)記實(shí)例比例以及方法考慮的分類器.在該研究問題中,我們基于RQ2到RQ4的分析結(jié)果,為這些影響因素設(shè)置最優(yōu)取值.
· RQ2:在FeCTrA方法的特征遷移階段,特征選擇比例對(duì)FeCTrA方法的性能影響如何?
在特征遷移階段,FeCTrA方法嘗試通過聚類分析,從源項(xiàng)目中遷移與目標(biāo)項(xiàng)目分布相似的特征.因此在該RQ中,我們想分析不同的特征選擇比例是否會(huì)對(duì)FeCTrA方法的性能產(chǎn)生影響.
· RQ3:在FeCTrA方法的實(shí)例遷移階段,目標(biāo)項(xiàng)目中標(biāo)記實(shí)例比例對(duì)FeCTrA方法的性能影響如何?
在實(shí)例遷移階段,FeCTrA方法需要使用少量目標(biāo)項(xiàng)目中已經(jīng)標(biāo)注的實(shí)例.因此在該RQ中,我們想分析使用不同目標(biāo)項(xiàng)目中的標(biāo)記實(shí)例比例是否會(huì)對(duì)FeCTrA方法的性能產(chǎn)生影響.
· RQ4:使用不同的分類器對(duì)FeCTrA方法的性能影響如何?
FeCTrA方法內(nèi)部需要提供分類器以完成預(yù)測模型的構(gòu)建.在軟件缺陷預(yù)測領(lǐng)域中,被廣泛使用的分類器主要包括如下類型:基于概率的分類器、基于決策樹的分類器、基于函數(shù)式的分類器以及基于集成學(xué)習(xí)的分類器等.不同類型的分類器在不同數(shù)據(jù)集上的預(yù)測性能并不相同.因此,我們想分析不同類型的分類器是否會(huì)對(duì)FeCTrA方法的性能產(chǎn)生影響.
3.2 評(píng)測對(duì)象
在我們的實(shí)證研究中,使用了在軟件缺陷預(yù)測領(lǐng)域中被研究人員廣泛使用的數(shù)據(jù)集(即 Relink數(shù)據(jù)集和AEEEM數(shù)據(jù)集)[12,54-56].表2和表3列出了這兩個(gè)數(shù)據(jù)集的統(tǒng)計(jì)特征.
Table 2 Statistical characteristics of Relink datasets表2 Relink數(shù)據(jù)集的統(tǒng)計(jì)特征
Table 3 Statistical characteristics of AEEEM datasets表3 AEEEM數(shù)據(jù)集的統(tǒng)計(jì)特征
Relink數(shù)據(jù)集是由 Wu等人[56]搜集整理的,并且借助手工方式對(duì)數(shù)據(jù)集中的缺陷信息進(jìn)行了確認(rèn).他們使用Understand工具(https://scitools.com)分析3個(gè)項(xiàng)目(例如Apache、Safe和ZXing),從源代碼中抽取出重要的軟件特征指標(biāo).Relink數(shù)據(jù)集有26個(gè)復(fù)雜度特征,這些特征主要基于代碼的復(fù)雜度和抽象語法樹,總體可以分為兩個(gè)大類:基于程序復(fù)雜度的特征和基于數(shù)量的特征.表4僅僅列舉了這26個(gè)特征中的7個(gè)特征并對(duì)其含義進(jìn)行描述.Understand網(wǎng)站可以查詢到每個(gè)特征的具體含義.
AEEEM數(shù)據(jù)集是由D’Ambros等人搜集整理[57].AEEEM中的每一個(gè)項(xiàng)目都包含61個(gè)特征,其中,17個(gè)屬于與源代碼相關(guān)的特征,5個(gè)屬于與之前預(yù)測相關(guān)的特征,5個(gè)屬于與代碼變更熵相關(guān)的特征,17個(gè)屬于與源代碼熵相關(guān)的特征以及17個(gè)屬于與源代碼衰退相關(guān)的特征.更具體地說,AEEEM數(shù)據(jù)集包含線性衰減熵(LDHH)和權(quán)值衰退(WCHU).LDHH和WCHU已經(jīng)被證實(shí)了對(duì)于缺陷預(yù)測是非常有用的.表5僅僅列出了AEEEM中的部分特征及其具體含義.
Table 4 Description of some feactures in Relink dataset表4 Relink數(shù)據(jù)集中部分特征的描述
Table 5 Description of some feactures in AEEEM dataset表5 AEEEM數(shù)據(jù)集中部分特征的描述
本文僅考慮同構(gòu)類型的跨項(xiàng)目缺陷預(yù)測問題,即源項(xiàng)目和目標(biāo)項(xiàng)目考慮了相同的特征集合.因此,FeCTrA方法僅在同一個(gè)數(shù)據(jù)集內(nèi)部的項(xiàng)目間進(jìn)行跨項(xiàng)目預(yù)測研究.例如在 Relink數(shù)據(jù)集中,FeCTrA方法可以使用Apache作為源項(xiàng)目,使用Safe或者ZXing作為目標(biāo)項(xiàng)目,即Apache→Safe或者Apache→ZXing.但是對(duì)于Relink數(shù)據(jù)集中任一項(xiàng)目做源項(xiàng)目,AEEEM數(shù)據(jù)集中任意一項(xiàng)目的做目標(biāo)項(xiàng)目這種情況,FeCTrA方法無法處理.例如,以Apache為例,Apache→{EQ,JDT,LC,ML,PDE}在FeCTrA方法中是不支持的.
3.3 評(píng)測指標(biāo)
對(duì)于目標(biāo)項(xiàng)目中任一實(shí)例經(jīng)缺陷預(yù)測模型后會(huì)有 4種可能的輸出結(jié)果:當(dāng)一個(gè)含有缺陷的實(shí)例被預(yù)測為有缺陷實(shí)例,記為TP(true positive);當(dāng)一個(gè)不含有缺陷的實(shí)例被預(yù)測為有缺陷實(shí)例,記為FP(false positive);當(dāng)一個(gè)含有缺陷的實(shí)例被預(yù)測為無缺陷的實(shí)例,記為 FN(false negative);當(dāng)一個(gè)不含有缺陷的實(shí)例被預(yù)測為無缺陷的實(shí)例,記為 TN(true negative).基于以上這些可能的輸出結(jié)果,可以定義查準(zhǔn)率(precision)、查全率(recall)以及F1度量(F1-measure).
· 查準(zhǔn)率:在所有被預(yù)測為有缺陷的實(shí)例中,真正含有缺陷的實(shí)例所占的比例.
· 查全率:在所有真正含有缺陷的實(shí)例中,被正確預(yù)測為有預(yù)測的實(shí)例所占的比例.
·F1度量又稱為F1-Score,是綜合考慮查準(zhǔn)率和查全率兩個(gè)指標(biāo)的指標(biāo),其定義如下.
通常,在查準(zhǔn)率和查全率之間有一個(gè)折中,一般來說,查準(zhǔn)率高時(shí),查全率往往偏低;而查全率高時(shí),查準(zhǔn)率往往偏低.然而,折中的方案很難與僅使用查準(zhǔn)率或者查全率作為評(píng)價(jià)指標(biāo)的預(yù)測模型進(jìn)行比較.而F1是通過查準(zhǔn)率和查全率的調(diào)和平均數(shù)計(jì)算而來,其綜合考量各方法在查全率和查準(zhǔn)率上的整體性能表現(xiàn),可以全面地反映方法實(shí)際性能的優(yōu)劣.鑒于此,本文使用F1評(píng)價(jià)各方法的性能.
3.4 顯著性檢驗(yàn)方法和反向差異的排名.
3.5 假設(shè)兩個(gè)分類器在特定的實(shí)驗(yàn)方案下產(chǎn)
為了檢驗(yàn)不同方法之間的性能差異是否顯著,本文考慮了被廣泛使用的Wilcoxon符號(hào)秩檢驗(yàn)[58].該檢驗(yàn)是無參的統(tǒng)計(jì)假設(shè)檢驗(yàn),也是t-檢驗(yàn)的替代方案,其核心是忽略數(shù)據(jù)的符號(hào),對(duì)兩個(gè)不同分類器在每一個(gè)數(shù)據(jù)集上取得的性能結(jié)果之間的差異進(jìn)行排序,同時(shí)比較正向差異生了N組實(shí)驗(yàn)數(shù)據(jù),以di表示這兩個(gè)分類器在第i組數(shù)據(jù)上的性能差異,這N組差異將會(huì)根據(jù)差異的絕對(duì)值進(jìn)行排序.如果兩者無差異,即di=0,則將它們兩者差異排名的平均值作為它們各自的排名.使用R+表明第2種算法優(yōu)于第1種算法對(duì)應(yīng)數(shù)據(jù)的排名總和,那么R-表示第2種算法劣于第1種算法對(duì)應(yīng)數(shù)據(jù)的排名總和.當(dāng)di=0時(shí),則取所有di為0的數(shù)據(jù)對(duì)應(yīng)的排名之和的一半.如果它們的個(gè)數(shù)是奇數(shù),那么其中一個(gè)數(shù)據(jù)將會(huì)被忽略掉.R+,R-的定義如下.
記T為R+,R-這兩者的最小值,即T=min(R+,R-).對(duì)于數(shù)據(jù)量大于25的數(shù)據(jù)集,下面的統(tǒng)計(jì)公式表示分布是接近于正態(tài)分布的.
當(dāng)給定的顯著因子α=0.05時(shí),如果z<-1.96,則空假設(shè)將被拒絕,即表明被比較的兩個(gè)分類器的性能是存在顯著差異的.關(guān)于Wilcoxon的更加詳細(xì)的描述,可參考文獻(xiàn)[58,59].
為了進(jìn)一步比較兩種方法之間的性能,我們使用“Win/Draw/Loss”分析.在特定評(píng)價(jià)指標(biāo)上,“方法 1vs方法2”的“Win/Draw/Loss”結(jié)果分析共有3種情況,即“方法1”的性能顯著好于、相似或者顯著差于“方法 2”的性能的次數(shù).
3.6 實(shí)驗(yàn)流程及其方法參數(shù)設(shè)定
為了評(píng)價(jià) FeCTrA方法在跨項(xiàng)目缺陷預(yù)測中的性能,我們比較了 6種經(jīng)典的跨項(xiàng)目軟件缺陷預(yù)測方法:(1) 只包含特征遷移階段的 FeCTrA 方法,記為 FeCTrA(FT);(2) 只包含實(shí)例遷移階段的 FeCTrA 方法,記為FeCTrA(IT);(3) Nam等人[12]提出的TCA+方法;(4) Peters等人[13]提出的Peters過濾法;(5) Turhan等人[14]提出的Burak過濾法;(6) Zimmermann等人[15]提出的方法,為了后續(xù)描述的方便,將其記為DCPDP(directly cross-project defect prediction)方法.
FeCTrA方法主要包括特征遷移和實(shí)例遷移兩個(gè)階段.在特征遷移階段,需要對(duì)特征進(jìn)行聚類.而簇的個(gè)數(shù)和選擇的特征個(gè)數(shù)會(huì)對(duì)預(yù)測性能產(chǎn)生重要影響.已有的研究工作[60,61]表明,比較理想的簇的個(gè)數(shù)為,其中,M表示原始特征的個(gè)數(shù).缺省情況下,遷移的特征個(gè)數(shù)為 40%×M.在實(shí)例遷移階段,需要目標(biāo)項(xiàng)目中提供部分已標(biāo)記的數(shù)據(jù).缺省情況下,FeCTrA方法從目標(biāo)項(xiàng)目中選出 10%的實(shí)例作為已經(jīng)標(biāo)注的實(shí)例.除此之外,TrAdaboost是一個(gè)不斷迭代的過程.研究表明[47],100次迭代可以使得模型的性能收斂.因此,FeCTrA方法將實(shí)例遷移階段的迭代次數(shù)設(shè)置為100.為了減少隨機(jī)性對(duì)實(shí)驗(yàn)結(jié)果造成的影響,本文重復(fù)執(zhí)行FeCTrA方法100次,并取均值作為最終結(jié)果.此外,當(dāng)計(jì)算兩個(gè)特征的分布相似度時(shí),本文使用R語言提供的K-S檢驗(yàn).
TCA+方法是對(duì) TCA方法的一個(gè)擴(kuò)展,主要包含兩個(gè)階段:正規(guī)化方法自動(dòng)選擇階段和 TCA應(yīng)用階段.DCPDP方法直接在源項(xiàng)目上構(gòu)建缺陷預(yù)測模型,然后在目標(biāo)項(xiàng)目上進(jìn)行預(yù)測.Peters過濾法和Burak過濾法都是經(jīng)典的基于實(shí)例遷移的跨項(xiàng)目缺陷預(yù)測方法.此外,在分類器的選擇上,本文使用軟件缺陷預(yù)測領(lǐng)域中被廣泛使用的Naive Bayes[7,60,62]作為默認(rèn)分類器.FeCTrA方法和所有基準(zhǔn)方法均基于weka軟件包編程實(shí)現(xiàn).
在跨項(xiàng)目缺陷預(yù)測的實(shí)驗(yàn)中,采取“一對(duì)一”的方式,即每次只選擇 1個(gè)項(xiàng)目作為源項(xiàng)目,選擇另一個(gè)項(xiàng)目作為目標(biāo)項(xiàng)目.以Relink數(shù)據(jù)集中的Apache項(xiàng)目為例,其對(duì)應(yīng)的源項(xiàng)目可以是Safe,或者是ZXing,但并不允許是兩個(gè)項(xiàng)目的融合.此外,對(duì)于 FeCTrA方法,需要同時(shí)使用源項(xiàng)目數(shù)據(jù)和目標(biāo)項(xiàng)目中少量已經(jīng)標(biāo)注的數(shù)據(jù)作為訓(xùn)練集.本文采用反轉(zhuǎn)的十折交叉檢驗(yàn)處理方式.對(duì)于某一折劃分,采用如下的處理方法:使用源項(xiàng)目的所有標(biāo)記數(shù)據(jù)和目標(biāo)項(xiàng)目中一折(即 10%)已標(biāo)記數(shù)據(jù)作為最終的訓(xùn)練集,然后,在此數(shù)據(jù)集上構(gòu)建一個(gè)跨項(xiàng)目的缺陷預(yù)測模型,最后對(duì)目標(biāo)項(xiàng)目中未標(biāo)記的九折(即 90%)數(shù)據(jù)進(jìn)行預(yù)測.依次與目標(biāo)項(xiàng)目中每一折數(shù)據(jù)結(jié)合構(gòu)建訓(xùn)練集,預(yù)測剩下的九折,從而得到十次結(jié)果.重復(fù)該過程10次,即可得到100次實(shí)驗(yàn)結(jié)果.此外,為了確保所有項(xiàng)目的在相同的測試集上進(jìn)行性能的公平評(píng)估,對(duì)于其他基準(zhǔn)方法采取了相同的反轉(zhuǎn)十折處理方法.但是不同于FeCTrA方法,基準(zhǔn)方法構(gòu)建的訓(xùn)練集并不包含目標(biāo)項(xiàng)目中少量的標(biāo)記數(shù)據(jù)(缺省10%),直接在把源項(xiàng)目數(shù)據(jù)作為其總體訓(xùn)練集,然后預(yù)測目標(biāo)項(xiàng)目中的未標(biāo)記數(shù)據(jù)(缺省90%).
本文實(shí)驗(yàn)在以下配置的臺(tái)式機(jī)上運(yùn)行:操作系統(tǒng):Windows 7,64位;CPU:Intel(R) Core(TM) i5-4590CPU@3.30GHz×2;內(nèi)存:16G.
本文在 Relink數(shù)據(jù)集和 AEEEM 數(shù)據(jù)集上分別對(duì) FeCTrA方法的整體性能進(jìn)行了實(shí)證研究,使用 Na?ve Bayes作為基分類器,遷移的特征比例為 40%,選擇目標(biāo)項(xiàng)目中標(biāo)注的實(shí)例比例為 10%,并將 FeCTrA方法與 6種基準(zhǔn)方法進(jìn)行了比較.表6和表7分別給出了這些方法在兩個(gè)數(shù)據(jù)集上取得的F1均值.
Table 6 Comparison ofF1 among FeCTrA and six baseline methods on Relink表6 基于F1評(píng)價(jià)指標(biāo),FeCTrA與6種基準(zhǔn)方法在Relink數(shù)據(jù)集上的平均性能比較
Table 7 Comparison ofF1 among FeCTrA and six baseline methods on AEEEM表7 基于F1評(píng)價(jià)指標(biāo),FeCTrA與6種基準(zhǔn)方法在AEEEM數(shù)據(jù)集上的平均性能比較
在表6和表7中,第1列表示跨項(xiàng)目缺陷預(yù)測的具體場景,比如在表7中,JDT?EQ表示使用JDT作為源項(xiàng)目,EQ作為目標(biāo)項(xiàng)目.接下來的3列表示本文提出的FeCTrA方法,由于FeCTrA方法包含兩個(gè)階段,因此我們使用FeCTrA,FeCTrA(FT)和FeCTrA(IT)分別表示同時(shí)使用特征遷移和實(shí)例遷移、僅使用特征遷移和僅使用實(shí)例遷移.最后 4列表示跨項(xiàng)目缺陷預(yù)測研究中已有的經(jīng)典基準(zhǔn)方法,即 TCA+、Peters過濾法、Burak過濾法和DCPDP.兩個(gè)表格的最后一行給出了每一種方法的整體平均性能.表格中每一行的最大值進(jìn)行加粗表示.
從兩個(gè)表格的最后一行可以看出,基于Relink和AEEEM兩個(gè)數(shù)據(jù)集,與基準(zhǔn)方法相比,本文提出的FeCTrA方法能夠取得更好的預(yù)測性能.
與FeCTrA(FT)方法和FeCTrA(IT)方法相比,FeCTrA方法在絕大部分的跨項(xiàng)目缺陷預(yù)測場景中都能取得更好的預(yù)測性能.例如,對(duì)于Relink數(shù)據(jù)集上的Safe?Apache,FeCTrA方法取得的F1均值為0.672,而FeCTrA(FT)方法和FeCTrA(IT)方法分別獲得了0.646和0.583,因此,FeCTrA方法與這兩種方法相比,其性能提升分別為4%和 15.3%.對(duì)于 AEEEM 數(shù)據(jù)集上的 LC?EQ,FeCTrA 方法取得的F1均值為 0.724,相對(duì)于 FeCTrA(FT)方法(0.532)和 FeCTrA(IT)方法(0.593),其性能提升分別為 36.1%和 22.1%.實(shí)驗(yàn)結(jié)果表明,在跨項(xiàng)目缺陷預(yù)測中,將特征遷移和實(shí)例遷移進(jìn)行結(jié)合,與僅考慮單個(gè)階段的方法相比,其能夠獲得更好的預(yù)測性能.
與 TCA+方法相比,在兩個(gè)數(shù)據(jù)集上,FeCTrA方法的性能要好于 TCA+方法.TCA+方法借助特征映射完成特征遷移,這與FeCTrA方法的第1階段比較相似,即與FeCTrA(FT)方法相類似.從實(shí)驗(yàn)結(jié)果可以看出,絕大部分情況下,本文提出的特征遷移方法 FeCTrA(FT)要好于 TCA+方法.例如,在 Relink和 AEEEM 數(shù)據(jù)集上,FeCTrA(FT)方法分別獲得了0.630和0.693的性能,而TCA+方法僅獲得了0.518和0.400.這充分體現(xiàn)了在跨項(xiàng)目缺陷預(yù)測中特征遷移階段的重要性,有利于排除無關(guān)特征對(duì)實(shí)驗(yàn)結(jié)果產(chǎn)生的影響.此外,相對(duì)于 TCA+方法,FeCTrA(FT)方法的性能更為穩(wěn)定.例如在 Apapche?Safe場景中,TCA+方法能夠獲得令人滿意的性能(即0.727),而在LC?ML場景中,TCA+方法則難以獲得令人滿意的性能(僅0.266).因此在不同的場景下,TCA+方法的性能波動(dòng)較大.
與Peters過濾法和Burak過濾法相比,在AEEEM數(shù)據(jù)集上,FeCTrA方法在所有的跨項(xiàng)目缺陷預(yù)測場景中都取得了最好的性能.而在 Relink數(shù)據(jù)集上,Peters過濾法和 Burak過濾法在部分場景下表現(xiàn)較好,如 Safe?Apache,Apache?Safe和Safe?ZXing這3個(gè)場景上.其可能原因如下:在Relink數(shù)據(jù)集上,各個(gè)項(xiàng)目的實(shí)例普遍偏少,而FeCTrA方法僅僅借助了目標(biāo)項(xiàng)目中10%的實(shí)例,因此可用的信息較少;而Peters過濾法和Burak過濾法選出的實(shí)例較多,因此包含的信息也更多.但從整理來說,FeCTrA方法相對(duì)于 Peters過濾法和 Burak過濾法,其性能分別提高了7.2%和9.8%.
與 DCPDP方法相比,FeCTrA方法在兩個(gè)數(shù)據(jù)集上也幾乎取得更好的預(yù)測性能.總體而言,FeCTrA方法在Relink數(shù)據(jù)集上,其性能提升了38.2%;在AEEEM數(shù)據(jù)集上,其獲得的性能是DCPDP方法的兩倍.這些結(jié)果表明,在跨項(xiàng)目缺陷預(yù)測中,直接使用源項(xiàng)目數(shù)據(jù)中的所有特征和實(shí)例并不能保證可以得到更好的預(yù)測效果,而移除冗余特征、無關(guān)特征以及分布不相似的實(shí)例會(huì)顯著提升模型的性能.然而在Apache?ZXing場景下,DCPDP能夠獲得更好的預(yù)測結(jié)果.這可能是因?yàn)锳pache和Zxing這兩個(gè)項(xiàng)目本身分布較為相似,所以DCPDP方法能夠取得更好的性能.
表8列出了FeCTrA方法與6種基準(zhǔn)方法之間的Win/Draw/Loss比較結(jié)果.表格分為上下兩個(gè)部分,分別表示 Relink數(shù)據(jù)集中的項(xiàng)目和AEEEM數(shù)據(jù)集中的項(xiàng)目.表中的每一行表示以當(dāng)前項(xiàng)目作為目標(biāo)項(xiàng)目,其他的項(xiàng)目為源項(xiàng)目.例如,以EQ為例,則表示將EQ設(shè)置為目標(biāo)項(xiàng)目,由剩下項(xiàng)目(即JDT,LC,ML和PDE)中可以選一個(gè)作為源項(xiàng)目.因?yàn)锳EEEM數(shù)據(jù)集總共含有5個(gè)項(xiàng)目,因此會(huì)總共產(chǎn)生20個(gè)跨項(xiàng)目缺陷預(yù)測場景.從表8中不難看出,在Relink數(shù)據(jù)集上,FeCTrA方法最低可以取得33.3%(2/6)的勝算,即與Peters過濾法比較;在AEEEM數(shù)據(jù)集上,FeCTrA方法最低可以取得90%(18/20)的勝算.在大部分?jǐn)?shù)據(jù)集上,FeCTrA方法優(yōu)于僅考慮特征遷移或僅考慮實(shí)例遷移的方法.
此外,為了驗(yàn)證 FeCTrA方法與基準(zhǔn)方法間的性能差異是否具有顯著性,本文對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行了 Wilcoxon符號(hào)秩檢驗(yàn),并設(shè)置顯著性水平α為0.05,具體結(jié)果見表9.基于表9可以發(fā)現(xiàn),“FeCTrA vs FeCTrA(FT)”、“FeCTrA vs FeCTrA(IT)”、“FeCTrA vs TCA+”、“FeCTrA vs Peters過濾法”、“FeCTrA vs Burak 過濾法”和“FeCTrA vs DCPDP”的p值都小于0.05.這表明,基于顯著性分析,FeCTrA方法的預(yù)測性能要顯著優(yōu)于其他6種基準(zhǔn)方法.
Table 8 Win/Draw/Loss of FeCTrA compared with six baselines on both datasets表8 FeCTrA方法與6種基準(zhǔn)方法在兩個(gè)數(shù)據(jù)集上的WIN/DRAW/LOSS比較結(jié)果
Table 9 p-value of the wilconxon signed-rank test among baseline methods and FeCTrA表9 FeCTrA和基準(zhǔn)方法間的顯著性檢驗(yàn)結(jié)果
基于上述分析,在跨項(xiàng)目缺陷預(yù)測中,冗余特征、無關(guān)特征以及分布不同的實(shí)例均會(huì)影響跨項(xiàng)目缺陷預(yù)測模型的性能,而本文提出的FeCTrA方法通過同時(shí)考慮特征遷移和實(shí)例遷移,可以取得更好的預(yù)測性能.
為了分析特征遷移階段中特征選擇比例對(duì)FeCTrA方法性能的影響,我們將特征選擇比例從10%逐步增長到 100%,步長設(shè)置為 10%.圖2和圖3分別顯示了基于 Relink數(shù)據(jù)集和 AEEEM 數(shù)據(jù)集上,特征選擇比例對(duì)FeCTrA方法性能的影響.
在圖2和圖3中,x軸表示從源項(xiàng)目中遷移的特征數(shù)量占所有特征數(shù)量的比例,其取值從 10%逐步增長到100%,y軸表示FeCTrA方法基于該特征選擇比例取得的F1均值.我們對(duì)數(shù)據(jù)折線做了平滑處理.圖中每一條曲線表示一個(gè)具體的項(xiàng)目,為了便于區(qū)分,使用了不同顏色對(duì)曲線進(jìn)行繪制.
Fig.2 Impact on FeCTra by varying feature transfer ratio on Relink圖2 在Relink數(shù)據(jù)集上,遷移不同比例的特征對(duì)FeCTrA性能的影響
Fig.3 Impact on FeCTra by varying feature transfer ratio on AEEEM圖3 在AEEEM數(shù)據(jù)集上,遷移不同比例的特征對(duì)FeCTrA性能的影響
從圖2中可以發(fā)現(xiàn),當(dāng)特征選擇比例從10%增長到20%時(shí),FeCTrA在各個(gè)項(xiàng)目上取得的預(yù)測性能在不斷提高;但是當(dāng)特征選擇比例從 20%增加到 30%時(shí),FeCTrA方法在各個(gè)項(xiàng)目上的預(yù)測性能都出現(xiàn)了不同程度的下降,其中在 Safe項(xiàng)目上,性能下降最為嚴(yán)重.這可能是由于選出的這些特征在目標(biāo)項(xiàng)目上并不起到重要作用,而這些特征被挑選中可能僅僅是因?yàn)樵跀?shù)據(jù)分布上與源項(xiàng)目更接近而已;當(dāng)特征選擇比例從 30%增加到 40%時(shí),FeCTrA方法在各個(gè)項(xiàng)目上的預(yù)測性能又開始提升;隨后,當(dāng)特征選擇比例不斷提高時(shí),FeCTrA方法的預(yù)測性能并沒有持續(xù)提高,而是趨于穩(wěn)定;甚至當(dāng)選擇全部特征時(shí),FeCTrA方法的預(yù)測性能反而出現(xiàn)下降.這說明:(1)從源項(xiàng)目中遷移所有的特征,并不能保證在目標(biāo)項(xiàng)目上具有很好的泛化能力,這可能是冗余特征和無關(guān)特征的存在所引起,因此在遷移特征時(shí),識(shí)別并移除上述兩類特征很有必要;(2) 遷移40%的特征能夠使得FeCTrA方法在Relink數(shù)據(jù)集上可以達(dá)到較高的預(yù)測性能.
從圖3中可以發(fā)現(xiàn),隨著特征選擇比例的變化,FeCTrA在各個(gè)項(xiàng)目上的性能表現(xiàn)也在不斷變化.例如在EQ和 JDT項(xiàng)目上,FeCTrA方法的預(yù)測性能隨著特征選擇比例的增加而不斷提高,但是提高的幅度不大.這說明在這兩個(gè)項(xiàng)目上,當(dāng)遷移的特征比例為20%~40%時(shí),FeCTrA方法已經(jīng)能夠挑選出最重要的特征.在LC項(xiàng)目上,當(dāng)遷移的特征比例為10%時(shí),FeCTrA方法取得的預(yù)測性能最高;隨著遷移特征比例的增加,FeCTrA方法開始出現(xiàn)下降,直至遷移的特征比例為40%時(shí),FeCTrA方法的性能才趨于穩(wěn)定.而對(duì)于ML和PDE項(xiàng)目,隨著遷移的特征比例不斷增加,FeCTrA方法的性能出現(xiàn)波動(dòng)現(xiàn)象.具體來說,在 PDE項(xiàng)目上,FeCTrA方法在遷移的特征比例為30%時(shí)首次達(dá)到了最優(yōu)效果,而在遷移的特征比例為 40%以后,其最好性能與最差性能的波動(dòng)情況趨于穩(wěn)定;在ML項(xiàng)目上,當(dāng)遷移的特征比例大于20%時(shí),FeCTrA方法的最好性能與最差性能幾乎保持不變,并且在遷移的特征比例為40%時(shí)首次達(dá)到最優(yōu)性能.因此在AEEEM項(xiàng)目上,遷移的特征比例設(shè)置為40%是理想的選擇.
基于上述分析,在FeCTrA方法的特征遷移階段,從源項(xiàng)目中遷移40%的特征比較理想.
為了分析目標(biāo)項(xiàng)目中標(biāo)注實(shí)例比例對(duì) FeCTrA方法預(yù)測性能的影響,本文主要假設(shè)目標(biāo)項(xiàng)目中存在 5%,10%和20%的標(biāo)注實(shí)例.選擇以上3種不同的標(biāo)注實(shí)例比例主要有以下兩個(gè)原因.
(1) 標(biāo)注實(shí)例是一個(gè)耗時(shí)耗力、成本高昂并且容易出錯(cuò)的工作,但是使用有限的成本去標(biāo)注少部分的實(shí)例是切實(shí)可行的,這也是本文研究FeCTrA方法的前提.但在目標(biāo)項(xiàng)目中,標(biāo)注的實(shí)例不宜過多,本文在實(shí)驗(yàn)中將標(biāo)注實(shí)例的比例上限設(shè)置為20%.
(2) 本文在模型性能評(píng)估時(shí)基于交叉驗(yàn)證的方式,因此,選擇以上 3種標(biāo)注實(shí)例的比例可以保證更好地進(jìn)行交叉檢驗(yàn)(即20折交叉驗(yàn)證、10折交叉驗(yàn)證以及5折交叉驗(yàn)證).
圖4和圖5展示了不同的標(biāo)注實(shí)例比例對(duì)FeCTrA方法預(yù)測性能的影響.
Fig.4 Impact on FeCTrA by varying labeled instance ratio in target project on Relink圖4 在Relink數(shù)據(jù)集上,目標(biāo)項(xiàng)目中不同標(biāo)注實(shí)例比例對(duì)FeCTrA方法預(yù)測性能的影響
Fig.5 Impact on FeCTrA by varying labeled instance ratio in target project on AEEEM圖5 在AEEEM數(shù)據(jù)集上,目標(biāo)項(xiàng)目中不同標(biāo)注實(shí)例比例對(duì)FeCTrA方法預(yù)測性能的影響
在圖4和圖5中,橫軸表示不同的項(xiàng)目,縱軸表示以某一項(xiàng)目為目標(biāo)項(xiàng)目時(shí),所有跨項(xiàng)目缺陷預(yù)測場景下得到的F1性能均值和標(biāo)準(zhǔn)差.為了便于區(qū)分,使用不同顏色表示目標(biāo)項(xiàng)目中不同的標(biāo)注實(shí)例比例.以Apache項(xiàng)目為例,當(dāng)選擇目標(biāo)項(xiàng)目中5%的實(shí)例作為已標(biāo)注實(shí)例時(shí),Apache可以被等分成20份,即可以執(zhí)行20折交叉驗(yàn)證.當(dāng)選擇目標(biāo)項(xiàng)目中 20%的實(shí)例作為已標(biāo)注實(shí)例時(shí),Apache可以被等分成 5份,即可以執(zhí)行 5折交叉驗(yàn)證.因此,每一個(gè)實(shí)驗(yàn)結(jié)果是基于個(gè)數(shù)據(jù)所獲得.其中,P表示目標(biāo)項(xiàng)目中標(biāo)注實(shí)例的比例(例如P=5%),M表示可以作為源項(xiàng)目的個(gè)數(shù)(例如,當(dāng)Apache為目標(biāo)項(xiàng)目時(shí),M=2),最后的10表示該交叉檢驗(yàn)會(huì)重復(fù)執(zhí)行10次.
從圖4中可以看出,在Apache和Safe項(xiàng)目上,隨著目標(biāo)項(xiàng)目中標(biāo)記數(shù)據(jù)的增加,FeCTrA方法性能的均值在不斷提高;然后,增加的幅度并不是很大.其原因可能是,在 Relink數(shù)據(jù)集上,各個(gè)項(xiàng)目內(nèi)含有的實(shí)例數(shù)目普遍較少.例如,Apache項(xiàng)目僅有194個(gè)實(shí)例,Safe項(xiàng)目僅有56個(gè)實(shí)例,ZXing項(xiàng)目僅有399個(gè)實(shí)例.因此,增加5%~10%的實(shí)例比例并不會(huì)增加太多的標(biāo)注信息.所以,FeCTrA在各個(gè)項(xiàng)目的性能表現(xiàn)相對(duì)穩(wěn)定.而在 ZXing項(xiàng)目上:當(dāng)標(biāo)注實(shí)例的比例是10%時(shí),FeCTrA方法獲得了最好的預(yù)測性能;當(dāng)比例增加到20%時(shí),性能反而有所下降.從圖5中可以看出,在JDT、ML和PDE項(xiàng)目上,隨著目標(biāo)項(xiàng)目中標(biāo)注實(shí)例的增加,FeCTrA方法的性能也逐漸提高.這主要是因?yàn)镴DT、LC和ML這3個(gè)項(xiàng)目里含有的實(shí)例數(shù)較多.例如,JDT項(xiàng)目含有997個(gè)實(shí)例,ML項(xiàng)目含有1 862個(gè)實(shí)例,PDE項(xiàng)目含有1 497實(shí)例.因此,隨著標(biāo)注實(shí)例比例的增加,可以被FeCTrA方法利用的實(shí)例信息就越多,性能自然越來越高.而EQ項(xiàng)目中含有的實(shí)例數(shù)較少,因此性能幾乎保持不變.在 LC項(xiàng)目中,當(dāng)標(biāo)注實(shí)例的比例為10%時(shí),FeCTrA方法獲得了最好的性能;當(dāng)比例增加到20%時(shí),性能也有所下降.其原因一方面是數(shù)據(jù)集本身含有的實(shí)例較少(僅399個(gè)實(shí)例),另一方面可能是由于數(shù)據(jù)集本身質(zhì)量不高所導(dǎo)致的.
基于上述分析,在FeCTrA方法的實(shí)例遷移階段,從目標(biāo)項(xiàng)目中的選擇10%的標(biāo)注實(shí)例比較理想.
為了研究不同類型的分類器對(duì) FeCTrA方法的影響,本文考慮了軟件缺陷預(yù)測研究經(jīng)常使用的分類器.其中,J48屬于基于決策樹的分類器,LR(logistic regression)和SVM(support vector machine)屬于基于函數(shù)式的分類器,NB(Naive Bayes)屬于基于概率的分類器,RF(random forest)屬于基于集成學(xué)習(xí)的分類器.圖6和圖7顯示了不同分類器對(duì)FeCTrA方法的影響.
Fig.6 Impact on FeCTrA by using different basic classifier on Relink圖6 在Relink數(shù)據(jù)集上,不同分類器對(duì)FeCTrA方法性能的影響
Fig.7 Impact on FeCTrA by using different basic classifier on AEEEM圖7 在AEEEM數(shù)據(jù)集上,不同分類器對(duì)FeCTrA方法性能的影響
在圖6和圖7中,橫軸表示數(shù)據(jù)集中不同項(xiàng)目的名稱,縱軸表示FeCTrA方法使用不同分類器后得到的F1值.為了便于區(qū)分,本文使用不同的顏色填充盒圖以表示不同的分類器.
從圖6中可以看出,在Relink數(shù)據(jù)集中的3個(gè)項(xiàng)目上,J48和SVM分類器的預(yù)測性能較差,在Apapche和Safe項(xiàng)目上,使用J48作為分類器得到的F1都小于0.5;而使用LR、NB和RF作為分類器得到的F1值相對(duì)較好,其中,NB分類可以取的最好的F1值.例如在Apache和Safe項(xiàng)目上,使用NB作為分類器得到的性能最高.
從圖7中也可以看出,除了 EQ項(xiàng)目,使用不同的分類器在不同的項(xiàng)目上得到的性能都相對(duì)較好,且性能也比較穩(wěn)定.例如,除了LR在LC、ML和PDE上表現(xiàn)波動(dòng)較大,其他分類器在各個(gè)項(xiàng)目上表現(xiàn)都比較穩(wěn)定.此外,NB在EQ、JDT、LC和ML中表現(xiàn)最好;其次,RF也能獲得比較好的結(jié)果.
基于上述分析,不同類型的分類器對(duì)FeCTrA方法的性能會(huì)造成一定的影響,其中,NB分類器整體性能表現(xiàn)更好.
這一節(jié)主要分析可能影響到本文實(shí)證研究結(jié)論有效性的影響因素.具體來說,有以下幾個(gè)方面.
(1) 內(nèi)部有效性主要涉及可能影響實(shí)驗(yàn)結(jié)果正確性的內(nèi)部因素,最主要的有效性影響因素是實(shí)驗(yàn)代碼的實(shí)現(xiàn)是否正確.為減少重新實(shí)現(xiàn)各種基準(zhǔn)方法過程中引入的人為因素的影響,我們使用了第三方提供的成熟框架,例如來自Weka中的機(jī)器學(xué)習(xí)包.此外,我們采用了跨項(xiàng)目缺陷預(yù)測開源工具CrossPare[63]提供的代碼,該工具已經(jīng)實(shí)現(xiàn)了當(dāng)前跨項(xiàng)目缺陷預(yù)測領(lǐng)域的一些經(jīng)典方法.
(2) 外部有效性主要涉及實(shí)驗(yàn)研究得到的結(jié)論是否具有一般性.為確保實(shí)證研究結(jié)論的一般性,我們選擇了軟件缺陷預(yù)測問題研究中經(jīng)常使用的Relink數(shù)據(jù)集和AEEEM數(shù)據(jù)集.這兩個(gè)數(shù)據(jù)集累計(jì)包含了8個(gè)具有一定代表性的開源項(xiàng)目;同時(shí),這些項(xiàng)目也覆蓋了不同類型的應(yīng)用領(lǐng)域,可以確保研究結(jié)論具有一定的代表性.
(3) 結(jié)論有效性主要涉及使用的評(píng)測指標(biāo)是否合理.本文重點(diǎn)考慮了F1指標(biāo),該指標(biāo)是Precision和Recall指標(biāo)的綜合衡量,在軟件缺陷預(yù)測領(lǐng)域被廣泛使用[6,7,64,65],因此可以更好地評(píng)估模型的綜合性能.
本文提出一種新穎的基于特征遷移和實(shí)例遷移的跨項(xiàng)目軟件缺陷預(yù)測方法 FeCTrA.該方法主要包含特征遷移和實(shí)例遷移兩個(gè)階段.在特征遷移階段,基于特征之間的關(guān)聯(lián)性,將已有特征進(jìn)行聚類分析;隨后,基于特征在源項(xiàng)目和目標(biāo)項(xiàng)目之間的分布相似性,將每個(gè)簇中的特征從高到低進(jìn)行排序,并選出指定數(shù)量的特征,從而可以有效地移除無關(guān)特征和冗余特征.在實(shí)例遷移階段,使用 TrAdaboost技術(shù),依據(jù)目標(biāo)項(xiàng)目中少量的已標(biāo)注實(shí)例,從源項(xiàng)目中挑選出大量與目標(biāo)項(xiàng)目分布相同的實(shí)例構(gòu)建訓(xùn)練集,從而可以有效地縮小源項(xiàng)目和目標(biāo)項(xiàng)目之間的分布差異.此外,本文基于Relink和AEEEM數(shù)據(jù)集對(duì)該方法展開了實(shí)證研究,并驗(yàn)證了該方法的有效性.
本文仍存在很多值得探討的下一步工作.首先,FeCTrA方法在進(jìn)行特征遷移時(shí)采用了聚類分析方式.在初始簇中心挑選不理想的情況下,可能需要花費(fèi)很長的時(shí)間才能達(dá)到簇中心的收斂.本文在該階段挑選了在兩個(gè)數(shù)據(jù)集中分布最相似的前幾個(gè)特征作為初始簇中心.后續(xù)的研究需要分析考慮不同初始簇中心的選擇對(duì)整個(gè)方法性能的影響;其次,本文在特征遷移階段僅考慮了遷移特征的比例對(duì)方法性能的影響,下一步工作可以從特征的類別角度出發(fā)考慮特征遷移,即遷移何種類別的特征最有效;最后,需要將本文方法應(yīng)用到實(shí)際的軟件測試過程中,如針對(duì)安卓應(yīng)用的測試[66-68].部分研究工作[69]表明,有超過 90%的開發(fā)人員愿意采用缺陷預(yù)測工具.但是將缺陷預(yù)測應(yīng)用于實(shí)際項(xiàng)目仍然存在一定的挑戰(zhàn)性:首先,大部分研究僅預(yù)測軟件模塊內(nèi)部是否存在缺陷,而沒有提供相應(yīng)的預(yù)測依據(jù)和修復(fù)建議;其次,大部分研究將程序模塊的粒度設(shè)置為類/文件,因此,即便能準(zhǔn)確預(yù)測到軟件模塊內(nèi)含有缺陷,仍然需要花費(fèi)大量的時(shí)間去定位和修復(fù)這些缺陷.因此在實(shí)際的項(xiàng)目應(yīng)用中,如果想得到開發(fā)人員的積極反饋,需要進(jìn)一步完善缺陷預(yù)測工具,給出預(yù)測結(jié)果及理由、缺陷位置和修復(fù)建議等.