郭 峰,和萌萌
(北方工業(yè)大學(xué) 信息學(xué)院,北京 100144)
軟件缺陷預(yù)測(cè)是軟件開發(fā)和運(yùn)行維護(hù)領(lǐng)域中關(guān)鍵的研究?jī)?nèi)容,是根據(jù)軟件歷史倉(cāng)庫(kù)提取軟件度量元信息進(jìn)而預(yù)測(cè)待測(cè)版本各模塊的缺陷傾向性或者缺陷數(shù)量。軟件缺陷預(yù)測(cè)可以促進(jìn)軟件開發(fā)和運(yùn)行維護(hù)中測(cè)試資源合理分配,提高軟件測(cè)試效率,有助于發(fā)現(xiàn)軟件開發(fā)過程中存在的風(fēng)險(xiǎn),降低開發(fā)成本,提高軟件質(zhì)量[1]。
目前,已有研究者提出一些使用機(jī)器學(xué)習(xí)或統(tǒng)計(jì)學(xué)方法的有效軟件缺陷預(yù)測(cè)方法[2-5],但它們局限于將軟件缺陷預(yù)測(cè)工作劃分為二分類問題,即預(yù)測(cè)軟件模塊是否有缺陷傾向。由于軟件測(cè)試資源有限且每個(gè)軟件模塊在軟件質(zhì)量管理過程中重要性不同,僅僅分析一個(gè)軟件模塊是否有缺陷會(huì)導(dǎo)致運(yùn)行故障是遠(yuǎn)遠(yuǎn)不夠的[6-7]。較為準(zhǔn)確的預(yù)測(cè)軟件缺陷數(shù)量能夠使有限的測(cè)試資源分配給更多缺陷模塊或更重要的缺陷模塊。因此,軟件缺陷數(shù)量預(yù)測(cè)會(huì)對(duì)軟件開發(fā)、運(yùn)行和維護(hù)更有幫助。
針對(duì)軟件缺陷數(shù)量預(yù)測(cè)方法,2008年W. Afzal提出使用遺傳編程構(gòu)建缺陷數(shù)預(yù)測(cè)模型,為缺陷數(shù)預(yù)測(cè)模型的構(gòu)建開辟了新道路[8];Rathore S S在2015年利用神經(jīng)網(wǎng)絡(luò)和遺傳編程進(jìn)行了缺陷數(shù)量的預(yù)測(cè)[9],在2016年研究了決策樹回歸算法預(yù)測(cè)缺陷數(shù)量的能力[10],在2017年提出使用集成學(xué)習(xí)方法構(gòu)建缺陷預(yù)測(cè)模型[11]。但是軟件產(chǎn)品大致符合二八原則,即80%的缺陷集中在20%的模塊中,有缺陷的模塊遠(yuǎn)少于沒有缺陷的模塊[12-13]。在缺陷預(yù)測(cè)中,這種現(xiàn)象被稱為數(shù)據(jù)不平衡。數(shù)據(jù)不平衡嚴(yán)重影響了缺陷預(yù)測(cè)模型性能,沒有缺陷的模塊支配著數(shù)據(jù)樣本,學(xué)習(xí)器會(huì)偏向于沒有缺陷模塊,因此,學(xué)習(xí)器對(duì)有缺陷模塊不會(huì)產(chǎn)生好的預(yù)測(cè)結(jié)果[12]。
目前,調(diào)整該現(xiàn)象的方法可以分為兩類:數(shù)據(jù)層面和算法層面,算法層面基本思想是設(shè)計(jì)適用于不平衡數(shù)據(jù)集的軟件缺陷預(yù)測(cè)模型。部分研究者在構(gòu)建缺陷預(yù)測(cè)模型模塊考慮到了數(shù)據(jù)不平衡問題。Sun等人[14]針對(duì)數(shù)據(jù)的不平衡特性提出了基于特定編碼的集成學(xué)習(xí)算法。Ryu等人[15]考慮了數(shù)據(jù)不平衡和分布特征,提出了一種基于代價(jià)敏感的遷移學(xué)習(xí)方法。Wang等人[16]提出將多核學(xué)習(xí)方法和集成學(xué)習(xí)方法相結(jié)合解決數(shù)據(jù)不平衡問題[12]。數(shù)據(jù)層面的主要策略是在數(shù)據(jù)預(yù)處理階段,對(duì)不平衡的數(shù)據(jù)進(jìn)行調(diào)整。
數(shù)據(jù)層面抽樣方法是解決數(shù)據(jù)不平衡常用的方法,抽樣方法分為過采樣和欠采樣。欠采樣是隨機(jī)刪除含常見目標(biāo)變量值的類(即多數(shù)類)以平衡數(shù)據(jù)的分布,可能會(huì)導(dǎo)致重要數(shù)據(jù)丟失。過采樣是通過隨機(jī)復(fù)制含稀有目標(biāo)變量值的類(即少數(shù)類)以平衡數(shù)據(jù)的分布,可能會(huì)使學(xué)習(xí)器的決策區(qū)域變得更小、更具體,從而導(dǎo)致學(xué)習(xí)器出現(xiàn)過擬合現(xiàn)象。
對(duì)此,Chawla等人[17]在過采樣方法的基礎(chǔ)上,提出創(chuàng)建少數(shù)類以平衡數(shù)據(jù)分布的算法smote。smote算法的基本思想是對(duì)少數(shù)類樣本進(jìn)行分析和模擬,人工模擬合成新的少數(shù)類,以平衡數(shù)據(jù)集分布。該算法克服了過采樣算法的缺點(diǎn),但在選擇合成少數(shù)類的目標(biāo)類時(shí)存在隨機(jī)性,會(huì)影響缺陷預(yù)測(cè)模型的性能。部分研究者采用抽樣方法去解決數(shù)據(jù)不平衡問題。Zhang等人[18]在原始抽樣算法基礎(chǔ)上提出一種改進(jìn)算法EDBC,優(yōu)化了原始抽樣方法,但性能上不及算法層面集成學(xué)習(xí)算法,Muhammed[19]利用不同基礎(chǔ)抽樣方法對(duì)數(shù)據(jù)集進(jìn)行處理,發(fā)現(xiàn)不同抽樣方法性能差別不大。
如何利用軟件歷史倉(cāng)庫(kù)信息準(zhǔn)確預(yù)測(cè)出軟件缺陷數(shù)量是該文研究的重點(diǎn)。
根據(jù)軟件歷史倉(cāng)庫(kù)信息可以提取軟件度量元信息,有利于軟件缺陷預(yù)測(cè)工作進(jìn)行,但軟件產(chǎn)品大多存在數(shù)據(jù)不平衡現(xiàn)象,會(huì)影響缺陷預(yù)測(cè)性能。針對(duì)數(shù)據(jù)不平衡,已有研究?jī)H局限于算法層面或數(shù)據(jù)層面,并且算法層面研究?jī)H局限于單一的回歸算法,存在一定缺陷,會(huì)對(duì)軟件缺陷預(yù)測(cè)精度造成一定影響。為了提高缺陷數(shù)量預(yù)測(cè)精度,該文提出一種新的軟件缺陷數(shù)量預(yù)測(cè)方法ELDDP。該方法在數(shù)據(jù)層面和算法層面均考慮了不平衡數(shù)據(jù)集的影響。在數(shù)據(jù)層面將依賴度引入smote算法,對(duì)smote算法進(jìn)行改進(jìn),然后使用改進(jìn)smote算法進(jìn)行數(shù)據(jù)預(yù)處理。在算法層面,該文提出結(jié)合集成學(xué)習(xí)Adaboost.R2算法[20]和Stacking算法優(yōu)勢(shì)構(gòu)建缺陷預(yù)測(cè)模型,這樣不僅可以減少不平衡數(shù)據(jù)集對(duì)預(yù)測(cè)結(jié)果的影響,也可以增加缺陷預(yù)測(cè)模型的魯棒性和準(zhǔn)確性。ELDDP總體流程如圖1所示。
圖1 ELDDP方法總體流程
smote算法的主要策略是度量少數(shù)類之間的歐氏距離,選擇少數(shù)類i(i∈{1,2,…,T})(T為不平衡數(shù)據(jù)集中少數(shù)類的總個(gè)數(shù))最k近鄰,從最k近鄰中隨機(jī)選擇一個(gè)少數(shù)類,與少數(shù)類i合成新的少數(shù)類,重復(fù)上述過程,直到數(shù)據(jù)集達(dá)到平衡狀態(tài)。smote算法示意如圖2所示。
圖2 smote算法示意圖
smote算法能夠避免過擬合的問題,通過人工合成少數(shù)類使得學(xué)習(xí)器決策區(qū)域更大,但仍存在一定的局限性。該文對(duì)從最k近鄰選擇目標(biāo)類方法進(jìn)行改進(jìn),將依賴度引入smote算法中。
1.1.1 依賴度
依賴度是指軟件中各個(gè)類之間依賴關(guān)系的度量,依賴關(guān)系包括控制關(guān)系、調(diào)用關(guān)系和數(shù)據(jù)傳遞關(guān)系。
在軟件缺陷預(yù)測(cè)中,軟件每個(gè)類可看作是一個(gè)節(jié)點(diǎn),類以及類之間的關(guān)系可以看作是一個(gè)網(wǎng)絡(luò)結(jié)構(gòu)。根據(jù)無標(biāo)度網(wǎng)絡(luò)特性,即在一個(gè)網(wǎng)絡(luò)中,新增加一個(gè)節(jié)點(diǎn),該節(jié)點(diǎn)會(huì)優(yōu)先連接高度數(shù)的節(jié)點(diǎn),即依賴度較大的節(jié)點(diǎn),可知依賴度較大的類存在著缺陷引入的風(fēng)險(xiǎn)。因此,依賴度較大的類應(yīng)是缺陷預(yù)測(cè)模型的重點(diǎn)研究對(duì)象。圖3展示了Promise數(shù)據(jù)集中基于Java環(huán)境開發(fā)的xalans軟件2.5版本部分類的依賴度和缺陷數(shù)。
圖3 xalans類
從圖3中可以看出,軟件中依賴度較大的類存在有缺陷可能性更大的現(xiàn)象。
該文使用Dependency Finder分析工具從Java字節(jié)碼文件中提取軟件類之間依賴關(guān)系,將每個(gè)類的依賴類和被依賴類個(gè)數(shù)總結(jié)、求和,形成一個(gè)新的特征:依賴度(depedency,dep),添加于軟件缺陷預(yù)測(cè)領(lǐng)域常用的數(shù)據(jù)集Promise中,對(duì)Promise數(shù)據(jù)集進(jìn)行更新。
1.1.2 算法描述
改進(jìn)smote算法的基本思想是:在原smote算法基礎(chǔ)上,從最k近鄰中選擇少數(shù)類,與少數(shù)類i合成新的少數(shù)類時(shí)優(yōu)先選擇依賴度較大的少數(shù)類,使得人工合成少數(shù)類樣本能更加滿足實(shí)際需求。改進(jìn)smote算法的具體描述如下:
第一步:定義少數(shù)類和多數(shù)類。基于相關(guān)性函數(shù)和用戶指定的相關(guān)性閾值來定義稀有目標(biāo)變量值和常見目標(biāo)變量值。具有稀有目標(biāo)變量值的類稱為少數(shù)類,具有常見目標(biāo)變量值的類稱為多數(shù)類。為了預(yù)測(cè)軟件缺陷的數(shù)量,基于軟件歷史倉(cāng)庫(kù),將缺陷數(shù)為零的類定義為少數(shù)類,將缺陷數(shù)大于零的類定義為多數(shù)類。
第二步:創(chuàng)建合成少數(shù)類樣本。
假設(shè)一個(gè)具體的少數(shù)類樣本i,特征向量為xi,i∈{1,2,…,T}(T為不平衡數(shù)據(jù)集中少數(shù)類樣本的總個(gè)數(shù)),計(jì)算少數(shù)類i到該數(shù)據(jù)集所有少數(shù)類的歐氏距離,找到與少數(shù)類樣本i最近的k個(gè)少數(shù)類樣本xi(near),near∈{1,2,…,T}。
根據(jù)依賴度dep對(duì)xi(near),進(jìn)行排序得到Xi(near),near∈{1,2,…,T}。
根據(jù)數(shù)據(jù)集中少數(shù)類和多數(shù)類的不平衡比例設(shè)定需要設(shè)置的采樣倍率N,然后從Xi(near),near∈{1,2,…,T}中選擇排在第n(n∈{1,2,…,k})(n的初始值為1,第二次重復(fù)時(shí)選擇排在第n+1個(gè)的少數(shù)類)個(gè)的少數(shù)類Xi(nn),同時(shí)隨機(jī)生成一個(gè)0到1之間的數(shù)ω,最后用公式(1)插入一個(gè)新的少數(shù)類樣本。
xi1=xi+ω×(Xi(nn)-xi)
(1)
這樣就在兩個(gè)少數(shù)類之間成功插入一個(gè)新的合成少數(shù)類。重復(fù)上述操作N次,合成了N個(gè)少數(shù)類。對(duì)于少數(shù)類樣本集T中的每個(gè)少數(shù)類均重復(fù)上述操作,就會(huì)合成NT個(gè)新的少數(shù)類樣本,最終達(dá)到平衡數(shù)據(jù)集的目的。
集成學(xué)習(xí)的基本思想是通過某種策略將多個(gè)方法集成,最終合成一個(gè)整體的學(xué)習(xí)器模型。Adaboost.R2(Adaptive Boosting Regression)算法是集成學(xué)習(xí)用于構(gòu)建回歸模型的常用算法。Adaboost.R2算法[20]主要策略是基于不斷調(diào)整的數(shù)據(jù)集使用某一種回歸算法訓(xùn)練多個(gè)基學(xué)習(xí)器,然后通過某種策略將基學(xué)習(xí)器結(jié)合起來構(gòu)成一個(gè)強(qiáng)學(xué)習(xí)器[21]。該算法可以使用不同回歸算法構(gòu)建學(xué)習(xí)器,非常靈活,但最終構(gòu)建模型只針對(duì)某一種回歸算法,并且對(duì)異常樣本敏感,會(huì)影響最終強(qiáng)學(xué)習(xí)器的預(yù)測(cè)準(zhǔn)確性[22]。Stacking方法的基本思想是將多個(gè)模型的結(jié)果進(jìn)行融合來提高預(yù)測(cè)率。因此,該文結(jié)合集成算法Adaboost.R2和模型融合Stacking方法構(gòu)建缺陷預(yù)測(cè)模型,具體描述如下:
第二步:訓(xùn)練弱學(xué)習(xí)器,計(jì)算弱學(xué)習(xí)器樣本誤差。首先,分別依據(jù)決策樹回歸(DTR)、貝葉斯嶺回歸(BRR)和線性回歸(LR)訓(xùn)練出弱學(xué)習(xí)器ht。然后,計(jì)算弱學(xué)習(xí)器ht的學(xué)習(xí)誤差率。如果εt表示弱學(xué)習(xí)器學(xué)習(xí)誤差率,t的取值范圍為[dj,bj,lj],j=1,2,…,T(T為基學(xué)習(xí)器的個(gè)數(shù)),則εt的計(jì)算方式如式(2):
(2)
其中,wi為當(dāng)前訓(xùn)練集中第i個(gè)樣本,ei為第i個(gè)樣本的指數(shù)誤差,其定義如式(3)所示:
(3)
Et表示針對(duì)弱學(xué)習(xí)器ht,訓(xùn)練集上樣本的最大誤差,其計(jì)算方式如下:
Et=max|yi-ht(xi)|,i∈{1,2,…,m}
第三步:更新訓(xùn)練集樣本權(quán)值。首先,根據(jù)弱學(xué)習(xí)器學(xué)習(xí)誤差率計(jì)算弱學(xué)習(xí)的權(quán)重系數(shù)αt,其計(jì)算方式如式(4)所示:
(4)
然后,更新訓(xùn)練集中樣本權(quán)值wt+1,i:
第四步:將權(quán)值更新后的樣本組成一個(gè)新的訓(xùn)練集,重復(fù)上述第二步和第三步,直到εt達(dá)到指定值為止。然后,通過線性組合的方式分別將以決策樹回歸(DTR)、貝葉斯嶺回歸(BRR)和線性回歸(LR)為基學(xué)習(xí)算法訓(xùn)練出的弱學(xué)習(xí)器組合成強(qiáng)學(xué)習(xí)器(Hd,Hb,Hl)。
第五步:采用Stacking算法將Hd,Hb,Hl擬合成一個(gè)綜合決策樹回歸、貝葉斯嶺回歸、線性回歸算法優(yōu)勢(shì)的學(xué)習(xí)器。具體而言,將Hd,Hb,Hl預(yù)測(cè)結(jié)果作為訓(xùn)練集,對(duì)元學(xué)習(xí)器(該文采用決策樹回歸算法)進(jìn)行訓(xùn)練,最終得到預(yù)測(cè)結(jié)果更為準(zhǔn)確的模型。
該文使用了添加依賴度特征后的Promise數(shù)據(jù)集中5個(gè)常用且可用的軟件項(xiàng)目,包含13個(gè)軟件項(xiàng)目版本。這些項(xiàng)目的詳細(xì)統(tǒng)計(jì)信息顯示在表1中,包括項(xiàng)目名稱、實(shí)例數(shù)目、缺陷總數(shù)、缺陷比例(有缺陷類所占百分比)、實(shí)例中最大的缺陷數(shù)。每個(gè)項(xiàng)目都包含了很多基于代碼度量元和過程度量元的特征。
表1 實(shí)驗(yàn)數(shù)據(jù)集詳細(xì)信息
該文使用中位數(shù)絕對(duì)誤差(Median Absolute Error,MDAE)、平均絕對(duì)誤差(Average Absolute Error,AAE)和決定系數(shù)(R-square,R2)三個(gè)性能評(píng)價(jià)指標(biāo)測(cè)評(píng)ELDDP在軟件缺陷數(shù)預(yù)測(cè)中的準(zhǔn)確性。
中位數(shù)絕對(duì)誤差(MDAE):計(jì)算數(shù)據(jù)與它們中位數(shù)之間的偏差。對(duì)誤差絕對(duì)值取中位數(shù),降低異常值的影響。定義為:
平均絕對(duì)誤差(AAE):計(jì)算預(yù)測(cè)結(jié)果與真實(shí)結(jié)果的接近程度,可以很好地反映預(yù)測(cè)結(jié)果的實(shí)際情況。該值越小說明模型擬合效果越好。其定義如下:
(5)
決定系數(shù)(R2):計(jì)算特征向量對(duì)預(yù)測(cè)結(jié)果的解釋程度,正常取值范圍為:[0,1],
R2值越接近1說明特征向量對(duì)預(yù)測(cè)結(jié)果的解釋能力越強(qiáng),該模型對(duì)數(shù)據(jù)的擬合程度越好。其定義如下:
(6)
實(shí)驗(yàn)中采用10折交叉驗(yàn)證,具體而言,將一個(gè)項(xiàng)目的一個(gè)版本數(shù)據(jù)集分成大小相等的十個(gè)部分,其中九個(gè)部分用于構(gòu)建缺陷數(shù)預(yù)測(cè)模型,剩余的一個(gè)部分作為測(cè)試集對(duì)構(gòu)建的模型進(jìn)行測(cè)試。如此操作重復(fù)十次,以便十個(gè)部分都可以作為測(cè)試數(shù)據(jù)進(jìn)行一次測(cè)試。該文將10折交叉驗(yàn)證方法10次的運(yùn)行結(jié)果取均值作為模型的最終性能。
為了評(píng)估ELDDP方法的性能,驗(yàn)證改進(jìn)smote算法的有效性,將smote算法分別與DTR、BRR、LR結(jié)合,分別記為SDTR、SBRR和SLR,然后與ELDDP進(jìn)行比較。為了減少人為因素對(duì)測(cè)評(píng)結(jié)果的影響,DTR、BRR和LR均由機(jī)器學(xué)習(xí)sklearn庫(kù)提供,即對(duì)這些回歸算法不做額外優(yōu)化。
在本節(jié)中,對(duì)ELDDP方法整體性能進(jìn)行實(shí)證研究。表2~表4分別記錄了ELDDP、SDTR、SBRR和SLR在AAE、MDAE、R2測(cè)評(píng)指標(biāo)上的平均值。
表2 基于AAE測(cè)評(píng)指標(biāo),不同軟件缺陷數(shù)預(yù)測(cè)模型性能
表3 基于MDAE測(cè)評(píng)指標(biāo),不同軟件缺陷數(shù)預(yù)測(cè)模型性能
表4 基于R2測(cè)評(píng)指標(biāo),不同軟件缺陷數(shù)預(yù)測(cè)模型性能
在表2~表4中每一行表現(xiàn)最好的結(jié)果都被加粗表示,最后一行為ELDDP與SDTR、SBRR、SLR的Win/Draw/Loss(W/D/L)分析,該方法表示方法1與方法2關(guān)于特定測(cè)評(píng)指標(biāo)的性能比較,即在某測(cè)評(píng)指標(biāo)上,方法1的性能好于、相似或差于方法2的性能次數(shù)。
在表2~表4中,ELDDP在大多數(shù)情況下均表現(xiàn)良好,對(duì)于AAE測(cè)評(píng)指標(biāo),ELDDP方法在ant、camel、synapse、xalan和xerces項(xiàng)目上均獲得了最好的性能;對(duì)于MDAE測(cè)評(píng)指標(biāo),ELDDP分別在ant、camel、synapse、xalan和xerces項(xiàng)目上獲得了3/4,2/3,1/2,2/2,2/2勝績(jī),SDTR取得了三次最好性能。對(duì)于R2測(cè)評(píng)指標(biāo),ELDDP方法在ant、camel、synapse、xerces和xalan項(xiàng)目均取得了最好性能。
為了更加直觀比較四種模型(ELDDP、SDTR、SBRR、SLR)的穩(wěn)定性,該文采用了箱形圖描述,如圖4所示,分別表示四種模型在AAE、MDAE、R2測(cè)評(píng)指標(biāo)上的性能。在圖4中每個(gè)箱形表示一個(gè)預(yù)測(cè)模型在一個(gè)測(cè)評(píng)指標(biāo)上的性能。箱形越小說明預(yù)測(cè)模型在測(cè)評(píng)指標(biāo)上表現(xiàn)越穩(wěn)定。
圖4 預(yù)測(cè)模型箱型圖
比較圖4各子圖可以看出,相對(duì)于SDTR、SBRR、SLR預(yù)測(cè)模型,ELDDP在每一個(gè)測(cè)評(píng)指標(biāo)上都具有一定穩(wěn)定性。
綜上所述,ELDDP方法的性能均優(yōu)于SDTR、SBRR和SLR,且ELDDP具有一定穩(wěn)定性,可以有效提高軟件缺陷數(shù)預(yù)測(cè)效率。
本節(jié)主要討論可能對(duì)研究結(jié)果產(chǎn)生有效性威脅的因素。具體而言:影響內(nèi)部有效性因素主要涉及代碼實(shí)現(xiàn)的正確性。為了減少人為因素對(duì)代碼復(fù)現(xiàn)的影響,該文選擇三種最經(jīng)典的回歸算法作為Adaboost.R2算法基學(xué)習(xí)方法,采用機(jī)器學(xué)習(xí)包sklearn和mlxtend加以實(shí)現(xiàn);外部有效性影響因素主要涉及實(shí)驗(yàn)結(jié)果是否具有普適性。該文采用Promise數(shù)據(jù)集,該數(shù)據(jù)集包含15個(gè)不同類型、不同領(lǐng)域的應(yīng)用項(xiàng)目,且該數(shù)據(jù)集已廣泛應(yīng)用于軟件缺陷預(yù)測(cè)領(lǐng)域;結(jié)論有效性影響因素集中于測(cè)評(píng)指標(biāo),該文側(cè)重于AAE、MDAE和R2指標(biāo)進(jìn)行評(píng)測(cè),AAE、MDAE和R2已應(yīng)用于眾多領(lǐng)域,且具有一定表現(xiàn)力,可以很好地評(píng)估模型性能。
該文提出一種基于集成學(xué)習(xí)融合依賴度的軟件缺陷數(shù)預(yù)測(cè)方法ELDDP,該方法在數(shù)據(jù)預(yù)處理時(shí)將依賴度引入smote算法,對(duì)smote算法進(jìn)行改進(jìn);在構(gòu)建缺陷預(yù)測(cè)模型時(shí),提出將集成學(xué)習(xí)Adaboost算法和Stacking模型融合算法相結(jié)合,以期提高軟件缺陷數(shù)預(yù)測(cè)準(zhǔn)確性。實(shí)驗(yàn)結(jié)果表明,該方法有較好的表現(xiàn)力,能夠較準(zhǔn)確地預(yù)測(cè)軟件缺陷數(shù)量。在未來工作中,需將該算法應(yīng)用于真實(shí)場(chǎng)景中,進(jìn)行進(jìn)一步完善和改進(jìn),使算法在軟件缺陷數(shù)預(yù)測(cè)領(lǐng)域更具有普適性。