范貴生,陳玎樂(lè),楊星光,虞慧群
(1.華東理工大學(xué) 計(jì)算機(jī)科學(xué)與工程系,上海 200237; 2.上海計(jì)算機(jī)軟件技術(shù)開(kāi)發(fā)中心 上海市計(jì)算機(jī)軟件評(píng)測(cè)重點(diǎn)實(shí)驗(yàn)室,上海 201112)
軟件缺陷預(yù)測(cè)(software defect prediction,SDP)是保證軟件質(zhì)量和提高測(cè)試效率的一種有效方法[1-3]。然而,新啟動(dòng)的軟件項(xiàng)目通常沒(méi)有足夠的缺陷數(shù)據(jù)集來(lái)構(gòu)建缺陷預(yù)測(cè)模型,為此研究人員提出了跨項(xiàng)目缺陷預(yù)測(cè)(cross-project defect prediction,CPDP)[4-6]。該方法使用源項(xiàng)目(即其它項(xiàng)目)的缺陷數(shù)據(jù)集構(gòu)建模型,對(duì)目標(biāo)項(xiàng)目進(jìn)行缺陷預(yù)測(cè)。
工作量感知的缺陷預(yù)測(cè)(effort-aware defect prediction,EADP)[7]旨在投入有限的測(cè)試資源的情況下預(yù)測(cè)出盡可能多的缺陷模塊。但是,先前的大多數(shù)研究都將工作量感知跨項(xiàng)目缺陷預(yù)測(cè)視為分類或回歸問(wèn)題[8,9],這可能導(dǎo)致CPDP模型的工作量感知預(yù)測(cè)性能較差。例如將跨項(xiàng)目缺陷預(yù)測(cè)看成分類問(wèn)題時(shí),缺陷預(yù)測(cè)模型的優(yōu)化目標(biāo)是最大化模型的分類性能。而工作量感知的缺陷預(yù)測(cè)旨在優(yōu)先檢查缺陷數(shù)量多或者缺陷密度高的程序模塊,其優(yōu)化目標(biāo)是盡可能準(zhǔn)確地將程序模塊按照缺陷數(shù)量或者缺陷密度進(jìn)行降序排序。因此,缺陷預(yù)測(cè)模型的分類性能和工作量感知的預(yù)測(cè)性能存在分歧。
我們以前的工作提出了一種基于差分演化的缺陷預(yù)測(cè)方法DEJIT[10]。然而,該方法僅僅探究了變更級(jí)缺陷預(yù)測(cè)場(chǎng)景下的預(yù)測(cè)性能,該方法是否在文件級(jí)跨項(xiàng)目缺陷預(yù)測(cè)場(chǎng)景有效有待進(jìn)一步驗(yàn)證。為此,本文在DEJIT基礎(chǔ)上進(jìn)一步拓展,提出了一種基于差分演化的跨項(xiàng)目缺陷預(yù)測(cè)方法DE-EACPDP,并且在82個(gè)項(xiàng)目上設(shè)計(jì)和執(zhí)行了大規(guī)模的實(shí)證研究。經(jīng)驗(yàn)性的結(jié)果表明,與5個(gè)最先進(jìn)的方法相比,DE-EACPDP可以顯著提升工作量感知跨項(xiàng)目缺陷預(yù)測(cè)的性能。
CPDP旨在對(duì)源項(xiàng)目進(jìn)行訓(xùn)練,生成預(yù)測(cè)模型,并對(duì)目標(biāo)項(xiàng)目進(jìn)行預(yù)測(cè)。最近幾年,許多研究人員提出了CPDP模型。Watanabe等[11]提出使用基于指標(biāo)值的補(bǔ)償方法,通過(guò)讓目標(biāo)項(xiàng)目指標(biāo)平均值等于源項(xiàng)目指標(biāo)平均值,來(lái)增加目標(biāo)項(xiàng)目和源項(xiàng)目的相似性。Camargo Cruz和Ochimizu[12]提出了類似的方法,該方法對(duì)指標(biāo)數(shù)據(jù)進(jìn)行l(wèi)og變換,使得邏輯回歸可以用設(shè)計(jì)復(fù)雜性指標(biāo)來(lái)進(jìn)行缺陷預(yù)測(cè)。Turhan等[13]提出了NN-過(guò)濾器,該過(guò)濾器使用k近鄰算法從源項(xiàng)目中為每個(gè)目標(biāo)項(xiàng)目數(shù)據(jù)選擇k個(gè)最近鄰的實(shí)例(他們的論文中選擇了10個(gè)最近鄰的實(shí)例),并去重形成新的訓(xùn)練集。Menzies等[14]使用了WHERE算法,該算法是一個(gè)快速聚類算法,可以查找具有相似特征的軟件項(xiàng)目,然后用WHICH算法對(duì)源項(xiàng)目實(shí)例進(jìn)行聚類來(lái)創(chuàng)建局部模型,他們發(fā)現(xiàn),實(shí)證軟件工程應(yīng)該關(guān)注特定的原理而不是泛化性。
由于軟件質(zhì)量保證活動(dòng)的資源有限,開(kāi)發(fā)人員檢查所有被預(yù)測(cè)模型預(yù)測(cè)為有缺陷的實(shí)例是不切實(shí)際的。因此,工作量感知缺陷預(yù)測(cè)被提了出來(lái)。Yang等[15]提出了一種工作量感知即時(shí)缺陷預(yù)測(cè)。他們發(fā)現(xiàn),在變更級(jí)環(huán)境下,無(wú)監(jiān)督模型的性能要優(yōu)于有監(jiān)督模型。Yan等[16]將Yang等的無(wú)監(jiān)督模型應(yīng)用于工作量感知文件級(jí)缺陷預(yù)測(cè)。他們發(fā)現(xiàn),在跨項(xiàng)目文件級(jí)缺陷預(yù)測(cè)的環(huán)境下,Yang等的結(jié)論成立。
圖1顯示了DE-EACPDP方法的流程圖。具體來(lái)說(shuō),首先,該方法提出缺陷密度百分位數(shù)平均(fault-density-percentile-average,F(xiàn)DPA)指標(biāo),該指標(biāo)可以用來(lái)評(píng)估缺陷密度的排序性能。然后,采用邏輯回歸(logistic regression,LR)和源項(xiàng)目缺陷數(shù)據(jù)集建立預(yù)測(cè)模型。為了使得LR在源項(xiàng)目數(shù)據(jù)集上獲得最大的FDPA,采用差分演化(differential evolution,DE)算法搜索最優(yōu)的LR系數(shù)。最后,使用最優(yōu)的LR對(duì)目標(biāo)項(xiàng)目進(jìn)行缺陷預(yù)測(cè)。本節(jié)將從缺陷密度百分位數(shù)平均、目標(biāo)函數(shù)和差分演化三方面介紹DE-EACPDP。
圖1 DE-EACPDP的流程
為了更穩(wěn)定地反映不同模型在所有臨界值下的效益,Weyuker等[17]提出了缺陷百分位數(shù)平均(fault-percentile-average,F(xiàn)PA)指標(biāo)。他們認(rèn)為,如果一個(gè)模型的預(yù)測(cè)性能良好,那么很多有缺陷的實(shí)例應(yīng)該出現(xiàn)在實(shí)例序列的頂部或者附近,F(xiàn)PA值也應(yīng)該越大。與FPA類似,本文在工作量感知跨項(xiàng)目缺陷預(yù)測(cè)中提出FDPA指標(biāo)??紤]項(xiàng)目中有n個(gè)實(shí)例f1,f2,…,fn, 每個(gè)實(shí)例對(duì)應(yīng)的預(yù)測(cè)值分別為y1,y2,…,yn, 對(duì)于任意一個(gè)實(shí)例fi,其中i∈[1,n], 如果fi被預(yù)測(cè)為有缺陷的,則將其yi設(shè)置為1,否則設(shè)置為0。實(shí)例fi的缺陷密度定義為
(1)
其中,loci為實(shí)例fi的代碼行。那么所有實(shí)例的缺陷總密度定義為
(2)
將所有實(shí)例f按照缺陷密度d(fi)的降序重新排序,得到新的實(shí)例序列nf1,nf2,…,nfn, 對(duì)于任意一個(gè)實(shí)例nfj,其中j∈[1,n], 前m個(gè)實(shí)例中缺陷密度的比例定義為
(3)
將FDPA定義為Pm的百分位數(shù)平均值,即
(4)
FDPA值越高,表明缺陷密度越高的實(shí)例在實(shí)例序列中的位置越靠前。因此,F(xiàn)DPA可以反映預(yù)測(cè)模型的排序性能。
DE-EACPDP使用LR來(lái)進(jìn)行缺陷預(yù)測(cè)。傳統(tǒng)的LR模型的損失函數(shù)通常是用對(duì)數(shù)損失函數(shù),以這類損失函數(shù)為優(yōu)化目標(biāo)的LR模型往往在非工作量感知性能上取得不錯(cuò)的結(jié)果,例如精確率、召回率等,而在工作量感知性能上則不一定能取得很好的結(jié)果。因此,為了提升工作量感知預(yù)測(cè)性能,本文使用DE算法來(lái)搜索最優(yōu)的LR系數(shù)(即LR的最優(yōu)權(quán)重向量W)
(5)
算法1:目標(biāo)函數(shù)的計(jì)算過(guò)程
輸入:LR的隨機(jī)權(quán)重向量W
源項(xiàng)目Ps
輸出:FDPA值
(1) 開(kāi)始
(2) LR=logistic_regression(W)
(3)res=LR.predict(Ps)
(4) # 計(jì)算FDPA值
(5)FDPA=calculate(Ps,res)
(6) returnFDPA
(7) 結(jié)束
而在使用DE算法之前,需要給其定義一個(gè)目標(biāo)函數(shù)。DE算法的目標(biāo)函數(shù)是最大化源項(xiàng)目的FDPA值,該目標(biāo)函數(shù)可由如下公式進(jìn)行描述:
目標(biāo)函數(shù)的計(jì)算過(guò)程如算法1所示。輸入項(xiàng)是LR的隨機(jī)權(quán)重向量W和源項(xiàng)目Ps。首先,用輸入的W構(gòu)建邏輯回歸模型LR。然后,用LR對(duì)輸入的Ps進(jìn)行預(yù)測(cè),得到預(yù)測(cè)結(jié)果res。最后,根據(jù)式(4)來(lái)計(jì)算目標(biāo)函數(shù)。
設(shè)置完目標(biāo)函數(shù)之后,使用演化算法來(lái)搜索最優(yōu)的LR系數(shù)。先前的研究結(jié)果表明[18],DE算法比其它元啟發(fā)式算法更好。因此,本文使用DE算法來(lái)搜索最優(yōu)的LR系數(shù)。DE算法是由Storn和Price[19]提出的,該算法通過(guò)交叉、變異和選擇操作找到目標(biāo)函數(shù)的最優(yōu)解,它的本質(zhì)是一種多目標(biāo)優(yōu)化算法。DE算法如算法2所示。
在初始化階段,假設(shè)每個(gè)實(shí)例有x個(gè)特征,差分演化定義的種群個(gè)數(shù)為NP個(gè),那么可以為每個(gè)個(gè)體(在本實(shí)驗(yàn)中個(gè)體就是LR的權(quán)重向量)定義x+1個(gè)基因,并且這些基因是0到1之間的隨機(jī)值,然后根據(jù)2.2節(jié)中的算法1為每個(gè)個(gè)體分別計(jì)算相對(duì)應(yīng)的FDPA值。
在演化階段,DE算法首先會(huì)判斷是否滿足終止條件。如果并未滿足終止條件,則會(huì)對(duì)W中的每個(gè)個(gè)體都進(jìn)行變異、交叉和選擇。在本文中,變異操作采用常用的’DE/best/1’變異操作,交叉操作采用二項(xiàng)式交叉操作。
算法2:差分進(jìn)化的過(guò)程
輸入:源項(xiàng)目Ps
種群個(gè)數(shù)NP
雜交概率CR
輸出:最優(yōu)權(quán)重向量Wbest
(1)開(kāi)始
(2)W=null
(3)FDPA=null
(4) # 初始化種群
(5)forifrom 1 toNPdo
(6) # 每個(gè)個(gè)體生成x+1個(gè)隨機(jī)值
(7)W[i]=random(x+1)
(8)FDPA[i]=算法1(W[i],Ps)
(9)endfor
(10)forifrom 1 to number of iterationsdo
(11)Wnew=null
(12)FDPAnew=null
(13) # 變異交叉
(14)forjfrom 1 toNPdo
(15)krandint=random.randint(0,x)
(16)best=FDPA.index(max(FDPA))
(17) [rd1,rd2]=random.sample(range(NP),2)
(18)forkfrom 1 toxdo
(19) # 最佳個(gè)體的第krandint個(gè)特征必定被遺傳
(21) #F是縮放因子
(22)Wnew[j][k]=W[best][k]+F*(W[rd1][k]-W[rd2][k])
(23)else:
(24)Wnew[j][k]=W[j][k]
(25)endif
(26)endfor
(27)endfor
(28) # 選擇
(29)forjfrom 1 toNPdo
(30)FDPAnew[j]=算法1(Wnew[j],Ps)
(31)ifFDPAnew[j]>FDPA[j]:
(32)W[j]=Wnew[j]
(33)FDPA[j]=FDPAnew[j]
(34)endif
(35)endfor
(36)endfor
(37)returnW中FDPA最大的個(gè)體Wbest
(38) 結(jié)束
具體來(lái)說(shuō),DE通過(guò)差分策略來(lái)實(shí)現(xiàn)個(gè)體的變異,變異交叉操作會(huì)以CP概率從W中選擇一個(gè)最優(yōu)父代個(gè)體的基因和兩個(gè)隨機(jī)父代個(gè)體的基因差向量縮放后組合成一個(gè)新的子代個(gè)體基因。為了讓子代帶有更多最優(yōu)父代個(gè)體的基因,變異交叉操作會(huì)以100%概率在某一基因上進(jìn)行上述的組合。選擇操作是在第j個(gè)父代個(gè)體和第j個(gè)子代個(gè)體中根據(jù)FDPA值選擇更好的個(gè)體成為第j個(gè)新的父代個(gè)體,這樣可以確保每次迭代結(jié)束后個(gè)體數(shù)量不發(fā)生改變。當(dāng)演化結(jié)束后,選擇最優(yōu)的W作為L(zhǎng)R的最優(yōu)權(quán)重向量。
本實(shí)驗(yàn)使用Python3.6.8作為項(xiàng)目解釋器。具體的包版本信息如下所示:numpy (1.18.5)、pandas (1.0.4)、scikit-learn (0.23.1)、imblanced-learn (0.7.0)、scipy (1.4.1)。實(shí)驗(yàn)環(huán)境信息如下所示:操作系統(tǒng)是Windows 10家庭版;處理器是Inter?CoreTMi7-6700HQ CPU @ 2.60 GHz 2.59 GHz;內(nèi)存是16 GB(15.9 GB可用);系統(tǒng)類型是64位操作系統(tǒng),基于x64的處理器。
實(shí)驗(yàn)采用了AEEEM、NASA、PROMISE和RELINK這4個(gè)數(shù)據(jù)集的82個(gè)項(xiàng)目的缺陷數(shù)據(jù)集,這些數(shù)據(jù)集被廣泛地用于以前CPDP的研究[20]。表1展示了數(shù)據(jù)集的名稱、數(shù)據(jù)集中的項(xiàng)目數(shù)、指標(biāo)數(shù)分布、實(shí)例數(shù)分布以及缺陷百分比分布。DE-EACPDP選取代碼行作為工作量指標(biāo)。在AEEEM中,表示代碼行的指標(biāo)名稱為numberOfLinesOfCode;在NASA中,表示代碼行的指標(biāo)名稱為L(zhǎng)OC_EXECUTABLE,在PROMISE中,表示代碼行的指標(biāo)名稱為loc;在RELINK中,表示代碼行的指標(biāo)名稱為CountLineCode。
表1 實(shí)驗(yàn)數(shù)據(jù)集
實(shí)驗(yàn)使用CostEffort@20%、CostEffort@1000、CostEffort@2000和Popt這4個(gè)工作量感知性能指標(biāo)來(lái)評(píng)估DE-EACPDP方法的性能。
CostEffort@L指的是當(dāng)檢查所有實(shí)例中的L行代碼行時(shí),檢查到的有缺陷實(shí)例在所有缺陷實(shí)例中的占比。在L相同的情況下,CostEffort@L越高,表示可以檢測(cè)出更多有缺陷的實(shí)例。因此,CostEffort@20%是指當(dāng)檢查了20%代碼行時(shí),檢查到的有缺陷實(shí)例的占比;CostEffotrt@1000是指當(dāng)檢查了1000行代碼行時(shí),檢查到的有缺陷實(shí)例的占比;CostEffotrt@2000是指當(dāng)檢查了2000行代碼行時(shí),檢查到的有缺陷實(shí)例的占比。
Popt反映的是最優(yōu)模型和預(yù)測(cè)模型在基于工作量的累計(jì)提升圖之間的差異。提升圖如圖2所示,橫坐標(biāo)是花費(fèi)的工作量(在本文中是代碼行),縱坐標(biāo)是開(kāi)發(fā)人員在花費(fèi)指定工作量時(shí)檢查出的缺陷實(shí)例在所有缺陷實(shí)例中的占比。為了計(jì)算Popt,需要4條曲線:最優(yōu)模型曲線O、預(yù)測(cè)模型曲線P、隨機(jī)模型曲線R和最差模型曲線W。在最優(yōu)模型中,所有實(shí)例按實(shí)際缺陷密度的降序進(jìn)行排序。在預(yù)測(cè)模型中,所有實(shí)例按預(yù)測(cè)缺陷密度的降序進(jìn)行排序。在隨機(jī)模型曲線中,檢查出的缺陷實(shí)例在所有缺陷實(shí)例中的占比與開(kāi)發(fā)人員花費(fèi)的工作量成正比。在最差模型中,所有實(shí)例按實(shí)際缺陷密度的升序進(jìn)行排序。對(duì)于給定的預(yù)測(cè)模型M,其Popt的計(jì)算公式為
(6)
其中,函數(shù)S(p1,p2) 表示模型曲線p1和模型曲線p2之間的面積。例如,S(O,P) 表示最優(yōu)模型曲線O和預(yù)測(cè)模型曲線P之間的面積,S(P,R) 表示預(yù)測(cè)模型曲線P和隨機(jī)模型曲線R之間的面積,S(R,W) 表示隨機(jī)模型曲線R和最差模型曲線W之間的面積。由式(6)可知,Popt(M) 越大,S(O,P) 越小,即預(yù)測(cè)模型和最優(yōu)模型之間的差異就越小。
圖2 工作量感知累計(jì)提升圖的一個(gè)示例
本文選擇了5個(gè)方法作為基準(zhǔn)方法來(lái)與本文提出的DE-EACPDP方法進(jìn)行對(duì)比。這5個(gè)方法分別是Camargo Cruz和Ochimizu[12]提出的CamargoCruz09-DT、Turhan等[13]提出的Turhan09-DT、Menzies等[14]提出的Men-zies11-RF、Watanabe等[11]提出的Watanabe08-DT和ManualUP。
DE-EACPDP方法的預(yù)處理階段包括指標(biāo)匹配和重采樣。指標(biāo)個(gè)數(shù)不同的源項(xiàng)目和目標(biāo)項(xiàng)目在進(jìn)行指標(biāo)匹配后指標(biāo)個(gè)數(shù)變得相同,從而可以在這兩個(gè)項(xiàng)目上使用CPDP模型,本文在NASA數(shù)據(jù)集上匹配出了18個(gè)相同的指標(biāo),在RELINK數(shù)據(jù)集上匹配出了40個(gè)相同的指標(biāo)。重采樣方法為隨機(jī)下采樣,該方法從多數(shù)類中隨機(jī)抽取一小部分?jǐn)?shù)據(jù),與少數(shù)類合成新的數(shù)據(jù)集,從而減少了數(shù)據(jù)分布不平衡帶來(lái)的影響。對(duì)于差分演化算法的參數(shù)設(shè)置,本文采用scipy.optimize.differential_evolution函數(shù)的默認(rèn)設(shè)置。
在表2~表5中,CamargoCruz09-DT方法簡(jiǎn)寫(xiě)為CDT,Turhan09-DT方法簡(jiǎn)寫(xiě)為T(mén)DT,Menzies11-RF方法簡(jiǎn)寫(xiě)為MRF,Watanabe08-DT方法簡(jiǎn)寫(xiě)為WDT,ManualUP方法簡(jiǎn)寫(xiě)為MUP,本文所提出的DE-EACPDP方法簡(jiǎn)寫(xiě)為DE。通過(guò)簡(jiǎn)寫(xiě)使得表格更整潔美觀。
在CostEffort@20%上將DE-EACPDP和基準(zhǔn)方法進(jìn)行了比較,表2展示了實(shí)驗(yàn)結(jié)果。最后兩行總結(jié)了“平均值”和“W/D/L”?;凇捌骄怠?,在檢查了20%代碼行的情況下,DE-EACPDP能平均找出36.3%的缺陷實(shí)例,與CamargoCruz09-DT、Turhan09-DT、Menzies11-RF、Watanabe08-DT和ManualUP相比,分別提升了59.21%、59.21%、66.51%、62.78%、46.37%;基于“W/D/L”,DE-EACPDP在所有數(shù)據(jù)集上的性能都優(yōu)于5個(gè)基準(zhǔn)方法。
在CostEffort@1000上將DE-EACPDP和基準(zhǔn)方法進(jìn)行了比較,表3展示了實(shí)驗(yàn)結(jié)果。最后兩行總結(jié)了“平均值”和“W/D/L”?;凇捌骄怠保跈z查了1000行代碼行的情況下,DE-EACPDP能平均找出13.3%的缺陷實(shí)例,與CamargoCruz09-DT、Turhan09-DT、Menzies11-RF、Watanabe08-DT和ManualUP相比,分別提升了51.14%、70.51%、66.25%、82.19%、6.40%;基于“W/D/L”,DE-EACPDP在大部分?jǐn)?shù)據(jù)集上的性能都優(yōu)于5個(gè)基準(zhǔn)方法。
表2 DE-EACPDP和基準(zhǔn)方法在 CostEffort@20%上的比較
表3 DE-EACPDP和基準(zhǔn)方法在 CostEffort@1000上的比較
在CostEffort@2000上將DE-EACPDP和基準(zhǔn)方法進(jìn)行了比較,表4展示了實(shí)驗(yàn)結(jié)果。最后兩行總結(jié)了“平均值”和“W/D/L”?;凇捌骄怠?,在檢查了2000行代碼行的情況下,DE-EACPDP能平均找出21.0%的缺陷實(shí)例,與CamargoCruz09-DT、Turhan09-DT、Menzies11-RF、Watanabe08-DT和ManualUP相比,分別提升了90.91%、70.73%、55.56%、61.54%、28.83%;基于“W/D/L”,DE-EACPDP在大部分?jǐn)?shù)據(jù)集上的性能都優(yōu)于5個(gè)基準(zhǔn)方法。
表4 DE-EACPDP和基準(zhǔn)方法在 CostEffort@2000上的比較
在Popt上將DE-EACPDP和基準(zhǔn)方法進(jìn)行了比較,表5展示了實(shí)驗(yàn)結(jié)果。最后兩行總結(jié)了“平均值”和“W/D/L”。基于“平均值”, DE-EACPDP的Popt平均值為0.633,與CamargoCruz09-DT、Turhan09-DT、Menzies11-RF、Watanabe08-DT和ManualUP相比,分別提升了41.29%、55.15%、48.94%、32.43%、5.50%。
表5 DE-EACPDP和基準(zhǔn)方法在Popt上的比較
4個(gè)數(shù)據(jù)集中代表性的累計(jì)提升圖如圖3~圖6所示,圖中的實(shí)線介于虛線和點(diǎn)劃線之間,這表明本文提出的預(yù)測(cè)模型的工作量感知性能在最優(yōu)模型和隨機(jī)模型之間。
圖3 AEEEM數(shù)據(jù)集中PDEUI3.4.1 預(yù)測(cè)Equinox3.4的累計(jì)提升
圖4 NASA數(shù)據(jù)集中MC2預(yù)測(cè)PC5的累計(jì)提升
圖5 PROMISE數(shù)據(jù)集中xerces-1.4預(yù)測(cè) log4j-1.2的累計(jì)提升
圖6 RELINK數(shù)據(jù)集中zxing1.6預(yù)測(cè) Apache2.0的累計(jì)提升
本文選擇了scipy.optimize.differential_evolution函數(shù)的默認(rèn)設(shè)置進(jìn)行差分演化。然而不同的參數(shù)設(shè)置可能會(huì)產(chǎn)生不同的實(shí)驗(yàn)結(jié)果。此外,雖然本文使用的數(shù)據(jù)集都經(jīng)過(guò)了一些數(shù)據(jù)清洗,例如,NASA數(shù)據(jù)集用的是預(yù)處理過(guò)的版本,PROMISE數(shù)據(jù)集用的是JURECZKO版本,RELINK數(shù)據(jù)集用的是golden版本。但是,即便經(jīng)過(guò)了清洗也不能保證數(shù)據(jù)集一定是完整、完全準(zhǔn)確的。上述兩點(diǎn)都會(huì)帶來(lái)潛在的建構(gòu)效度威脅。
本文使用最大化FDPA值作為差分演化的優(yōu)化目標(biāo)函數(shù)。然而,如果使用其它指標(biāo)作為差分演化的優(yōu)化目標(biāo)函數(shù),可能會(huì)得到性能更好的模型。所以考慮其它指標(biāo)作為目標(biāo)函數(shù)是未來(lái)工作值得研究的地方。此外,本文的源代碼中可能存在一些錯(cuò)誤,然而源代碼本身也不是很復(fù)雜,所以,在檢查了多次源代碼后,該威脅應(yīng)該會(huì)降低。
本文在來(lái)自4個(gè)數(shù)據(jù)集的82個(gè)項(xiàng)目上對(duì)DE-EACPDP進(jìn)行了評(píng)估,并且提出的方法在這些項(xiàng)目上取得了不錯(cuò)的預(yù)測(cè)性能。但是,并不知道DE-EACPDP方法是否在其它數(shù)據(jù)集的其它項(xiàng)目上仍然能取得不錯(cuò)的性能。例如不同的公司由于業(yè)務(wù)不同,產(chǎn)生的商業(yè)數(shù)據(jù)集可能存在很大的差異,這可能會(huì)對(duì)通用模型的泛化能力產(chǎn)生影響。因此,未來(lái)可以在其它開(kāi)源數(shù)據(jù)集以及商業(yè)數(shù)據(jù)集上對(duì)DE-EACPDP進(jìn)行評(píng)估來(lái)驗(yàn)證實(shí)驗(yàn)結(jié)果的泛化能力,并且針對(duì)商業(yè)數(shù)據(jù)集可能帶來(lái)的指標(biāo)差異較大的問(wèn)題,可以借助指標(biāo)相似度,將正相關(guān)的多個(gè)指標(biāo)縮減成一個(gè)指標(biāo),降低不同商業(yè)數(shù)據(jù)集之間的差異,從而減小對(duì)通用模型泛化能力的影響。
本文提出了一種基于差分演化的跨項(xiàng)目缺陷預(yù)測(cè)方法DE-EACPDP。該方法首先提出了一個(gè)缺陷密度百分位數(shù)平均(FDPA)作為訓(xùn)練集上的優(yōu)化目標(biāo),然后采用LR建立預(yù)測(cè)模型,并且使用差分演化算法計(jì)算最優(yōu)的LR系數(shù)。經(jīng)驗(yàn)性的結(jié)果表明,DE-EACPDP在工作量感知的評(píng)估指標(biāo)上顯著優(yōu)于最先進(jìn)的5個(gè)預(yù)測(cè)模型。
為了保證實(shí)驗(yàn)的可重復(fù)性,并且進(jìn)一步推動(dòng)軟件缺陷預(yù)測(cè)的研究,我們?cè)贕itHub上發(fā)布了所有的實(shí)驗(yàn)代碼和實(shí)驗(yàn)數(shù)據(jù)https://github.com/chendingle/DE-EACPDP。