国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

靜態(tài)軟件缺陷預(yù)測研究進(jìn)展*

2019-10-24 07:45:06吳方君
計算機(jī)與生活 2019年10期
關(guān)鍵詞:軟件缺陷產(chǎn)業(yè)界度量

吳方君

1.江西財經(jīng)大學(xué) 信息管理學(xué)院,南昌330013

2.江西財經(jīng)大學(xué) 數(shù)據(jù)與知識工程江西省高校重點(diǎn)實(shí)驗(yàn)室,南昌330013

+通訊作者E-mail:wufangjun@jxufe.edu.cn

1 引言

軟件缺陷(fault),又稱為錯誤(error)、故障(defect)、失效(failure)、bug、問題(problem)等[1-5],是軟件如影隨形的特有成分。雖然無法完全杜絕缺陷,但可以對其進(jìn)行分析與監(jiān)測,以盡量減少缺陷[1-5]。軟件缺陷預(yù)測是一種能夠有效地挖掘軟件中可能還遺留而尚未被發(fā)現(xiàn)的潛在缺陷及其分布情況的技術(shù)。通常利用數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)和統(tǒng)計學(xué)習(xí)等通過對軟件產(chǎn)品屬性、過程屬性和已經(jīng)發(fā)現(xiàn)的缺陷數(shù)據(jù)等各種歷史數(shù)據(jù)進(jìn)行綜合挖掘和分析,從而預(yù)測軟件系統(tǒng)中存在的缺陷模式。在提高軟件質(zhì)量、開發(fā)過程的可控性和用戶需求的滿足程度,降低軟件開發(fā)成本和開發(fā)過程的風(fēng)險,改進(jìn)軟件開發(fā)過程等方面起著非常重要的作用,是近年軟件數(shù)據(jù)挖掘領(lǐng)域的研究熱點(diǎn)之一[6-15]。軟件缺陷預(yù)測從20 世紀(jì)70 年代發(fā)展至今,一直受到來自軟件產(chǎn)業(yè)界和學(xué)術(shù)界兩方面的關(guān)注。

在產(chǎn)業(yè)界,項(xiàng)目經(jīng)理和軟件工程師發(fā)現(xiàn)隨著軟件系統(tǒng)的規(guī)模越來越大,系統(tǒng)的復(fù)雜程度也越來越高,相應(yīng)地花費(fèi)在軟件缺陷修正上的費(fèi)用也越來越昂貴,消耗的時間也越來越多。既然完全消除缺陷是不可能的,那么借助于缺陷預(yù)測對其進(jìn)行預(yù)測分析以盡量減少也是不錯的選擇。產(chǎn)業(yè)界的項(xiàng)目經(jīng)理和軟件工程師早已意識到軟件缺陷預(yù)測在改善系統(tǒng)質(zhì)量方面起著重要作用,也迫切希望將其作為軟件項(xiàng)目開發(fā)管理的重要環(huán)節(jié),運(yùn)用到軟件工程實(shí)踐活動中。在學(xué)術(shù)界,學(xué)者們提出了眾多軟件缺陷預(yù)測方法,進(jìn)行了一系列實(shí)證,取得了斐然的成績[6-33],尤其是基于軟件度量的軟件缺陷預(yù)測成果豐碩。

為了對現(xiàn)有的軟件缺陷預(yù)測研究進(jìn)行深入細(xì)致的分析對比和總結(jié),在中國知網(wǎng)、Elsevier、Wiley、Springer、ACM、IEEE 等數(shù)據(jù)庫中,以中文關(guān)鍵詞“軟件缺陷預(yù)測”和英文關(guān)鍵詞“software defect prediction”進(jìn)行檢索,截止到2019 年4 月17 日,檢索結(jié)果如表1所示。由于相關(guān)文獻(xiàn)太多,因此選擇了其中一些經(jīng)典的文獻(xiàn)(側(cè)重于國內(nèi)的研究工作)進(jìn)行論述。

Table 1 Search results表1 檢索結(jié)果

本文從靜態(tài)軟件缺陷預(yù)測的四個關(guān)鍵要素,即軟件度量指標(biāo)的篩選、測評數(shù)據(jù)資源庫、缺陷預(yù)測模型的構(gòu)建和缺陷預(yù)測模型的評價,綜述了現(xiàn)有的研究工作;指出了靜態(tài)軟件缺陷預(yù)測面臨的挑戰(zhàn)和新問題,展望了進(jìn)一步的研究方向。

雖然近年來有同類的工作[10,15,21],但本文的側(cè)重點(diǎn)與它們有所不同。(1)在軟件度量指標(biāo)方面,文獻(xiàn)[10,15,21]側(cè)重于從代碼復(fù)雜度、程序模塊間依賴性、軟件開發(fā)過程、開發(fā)人員經(jīng)驗(yàn)和項(xiàng)目團(tuán)隊組織架構(gòu)等多個角度總結(jié)已有的度量指標(biāo);而本文認(rèn)同度量指標(biāo)存在冗余的觀點(diǎn),因此更側(cè)重于度量指標(biāo)的篩選(即特征選擇)。(2)在缺陷預(yù)測模型構(gòu)建方面,文獻(xiàn)[10]將缺陷預(yù)測分成傾向預(yù)測、數(shù)量/密度預(yù)測和嚴(yán)重等級預(yù)測,相應(yīng)的方法有統(tǒng)計方法(如K最近鄰、線性回歸)、有監(jiān)督方法(如隨機(jī)森林、模糊方法、信念網(wǎng)絡(luò)、支持向量機(jī))、半監(jiān)督方法(如最大期望法)和無監(jiān)督方法(如模糊聚類、K均值);文獻(xiàn)[15]將缺陷預(yù)測分成傾向預(yù)測和數(shù)量/密度預(yù)測,相應(yīng)的方法有機(jī)器學(xué)習(xí)方法和基于緩存的方法;文獻(xiàn)[21]側(cè)重考察跨項(xiàng)目軟件缺陷預(yù)測,相應(yīng)的方法有基方法(如樸素貝葉斯、邏輯斯蒂回歸)、優(yōu)化方法(如裝袋、提升、遺傳算法)和復(fù)合方法;本文將缺陷預(yù)測分成傾向性預(yù)測、數(shù)量/密度預(yù)測和模塊排序,除了總結(jié)機(jī)器學(xué)習(xí)方法之外,也總結(jié)了復(fù)雜網(wǎng)絡(luò)、多目標(biāo)優(yōu)化和深度學(xué)習(xí)等方法。此外,本文還就缺陷預(yù)測模型的評價方面進(jìn)行了總結(jié),從如何將缺陷預(yù)測模型運(yùn)用到產(chǎn)業(yè)界角度出發(fā),重點(diǎn)考慮了缺陷的嚴(yán)重等級。

2 軟件缺陷預(yù)測的分類

軟件缺陷預(yù)測的研究與應(yīng)用,自1971 年Akiyama[1]提出至今,受到了學(xué)術(shù)界和軟件產(chǎn)業(yè)界的高度重視,取得了可喜的成就[6-33]。

根據(jù)數(shù)據(jù)來源不同,軟件缺陷預(yù)測可分為[19-20]:(1)版本內(nèi)缺陷預(yù)測,只使用軟件系統(tǒng)的某個特定版本的數(shù)據(jù)進(jìn)行缺陷預(yù)測;(2)跨版本缺陷預(yù)測,使用軟件系統(tǒng)的幾個不同版本的數(shù)據(jù)進(jìn)行缺陷預(yù)測;(3)跨項(xiàng)目缺陷預(yù)測,使用一個軟件系統(tǒng)的數(shù)據(jù)預(yù)測另外一個軟件系統(tǒng)的缺陷;(4)混合項(xiàng)目缺陷預(yù)測,借助于輔助軟件系統(tǒng)的大量數(shù)據(jù),再結(jié)合目標(biāo)軟件系統(tǒng)的少量數(shù)據(jù),預(yù)測目標(biāo)軟件系統(tǒng)的缺陷??珥?xiàng)目缺陷預(yù)測和混合項(xiàng)目缺陷預(yù)測主要采用遷移技術(shù)[19-33],如吳方君[19]將遷移學(xué)習(xí)方法TrAdaBoost(transfer Ada-Boost)和代價敏感AdaC2 相結(jié)合,提出了AdaC2Tr-AdaBoost 方法;Limsettho 等[22]指出數(shù)據(jù)分布不均衡和源數(shù)據(jù)集與目標(biāo)數(shù)據(jù)集的分布不一致是造成跨項(xiàng)目缺陷預(yù)測效率低下的原因;戴翔等[23]在Burak過濾法和SMOTE(synthetic minority over-sampling technique)法的基礎(chǔ)上用投票方式來集成七種分類方法的預(yù)測結(jié)果;Chen 等[24]提出了DTB(double transfer Boosting),使用數(shù)據(jù)引力法重塑了源數(shù)據(jù)集的整體分布,使之與目標(biāo)數(shù)據(jù)集的分布相匹配,在部分已標(biāo)記的目標(biāo)數(shù)據(jù)的基礎(chǔ)上借助遷移增強(qiáng)方法來消除源數(shù)據(jù)中起消極作用的數(shù)據(jù);Xia 等[25]提出了HYDRA(hybrid model reconstruction approach)方法,遺傳算法階段利用遺傳算法為多個分類器分配權(quán)重,進(jìn)而生成一個組合遺傳分類器,集成學(xué)習(xí)階段利用AdaBoost 從多個遺傳分類器生成最終的分類器;毛發(fā)貴等[26]基于TrAdaBoost 提出了MergeTrAdaBoost和MultiTrAdaBoost 法,用遷移學(xué)習(xí)和自適應(yīng)增強(qiáng)技術(shù),尋找源數(shù)據(jù)集中與目標(biāo)數(shù)據(jù)集關(guān)聯(lián)性高的數(shù)據(jù);程銘等[27]提出了加權(quán)貝葉斯遷移學(xué)習(xí)法,使用數(shù)據(jù)引力法將源數(shù)據(jù)集與目標(biāo)數(shù)據(jù)集間的差異轉(zhuǎn)化為訓(xùn)練數(shù)據(jù)的權(quán)重,在此基礎(chǔ)上建立分類器;何吉元等[28]提出了半監(jiān)督集成跨項(xiàng)目軟件缺陷預(yù)測方法S3EL(search based semi-supervised ensemble learning),該方法依據(jù)每個特征的均值將源數(shù)據(jù)集劃分成兩部分來構(gòu)建多個樸素貝葉斯弱分類器,再借助于遺傳算法來組合上述弱分類器,進(jìn)而構(gòu)建出最終的分類器;李一露等[29]先利用版本級訓(xùn)練數(shù)據(jù)選擇方法rTDS(release-level training data selection)從候選的跨項(xiàng)目訓(xùn)練數(shù)據(jù)集中選擇與目標(biāo)數(shù)據(jù)集距離近的源數(shù)據(jù)集,然后再利用實(shí)例級訓(xùn)練數(shù)據(jù)選擇方法iTDS(instance-level training data selection)為目標(biāo)數(shù)據(jù)集中的每個目標(biāo)實(shí)例返回k個最近的實(shí)例,從而構(gòu)成多粒度數(shù)據(jù)選擇方法mTDS(multi-granularity training data selection);楊杰等[30]通過多個源項(xiàng)目分別對目標(biāo)項(xiàng)目進(jìn)行預(yù)測,然后加權(quán)得到最終的預(yù)測結(jié)果,權(quán)重同時考慮預(yù)測準(zhǔn)確度以及源項(xiàng)目與目標(biāo)項(xiàng)目間的KL散度;Chen 等[32]提出了一種多角度遷移的軟件缺陷預(yù)測方法MTDP(multiview transfer learning for software defect prediction),首先構(gòu)建異構(gòu)遷移模型,然后通過遷移異構(gòu)實(shí)例來生成模擬實(shí)例,再通過協(xié)同訓(xùn)練來標(biāo)記模擬實(shí)例,進(jìn)而擴(kuò)展訓(xùn)練集,最后構(gòu)建分類器;陳翔等[20]對跨項(xiàng)目軟件缺陷預(yù)測進(jìn)行了綜述;Herbold 等[31]不僅對跨項(xiàng)目軟件缺陷預(yù)測進(jìn)行了綜述,而且開發(fā)出了跨項(xiàng)目軟件缺陷預(yù)測實(shí)驗(yàn)平臺Cross-Pare(https://crosspare.informatik.uni-goettingen.de/)。有關(guān)混合項(xiàng)目缺陷預(yù)測更詳細(xì)的總結(jié)煩請參考文獻(xiàn)[20-21,31]。

Fig.1 Research framework of static software defect prediction圖1 靜態(tài)軟件缺陷預(yù)測研究框架

根據(jù)是否與軟件生命周期有關(guān),缺陷預(yù)測可分為靜態(tài)預(yù)測和動態(tài)預(yù)測,后者預(yù)測缺陷分布隨軟件生命周期的變化情況,如Rayleigh 分布模型、以Littlewood模型為代表的指數(shù)分布模型和S曲線分布模型等。

根據(jù)預(yù)測目標(biāo)的不同,靜態(tài)缺陷預(yù)測又可細(xì)分為:(1)缺陷傾向性預(yù)測,即預(yù)測模塊是否含有缺陷,是一個二元分類問題;(2)缺陷的數(shù)量/分布密度預(yù)測,即預(yù)測模塊中含有的缺陷數(shù)量/密度,是一個回歸分析問題;(3)缺陷模塊排序預(yù)測,即先預(yù)測模塊中含有的缺陷數(shù)量或缺陷傾向性概率,然后降序排列,將排名前K(Top-K)的模塊推薦給開發(fā)人員進(jìn)行審查/測試,是一個排序問題。后者介于前兩者之間,適用于測試資源未知的情況。如果人力和物力資源有限,則只審查/測試Top-K模塊;如果人力和物力資源充足,則可以審查/測試全部模塊。研究框架如圖1所示。

根據(jù)預(yù)測粒度不同,軟件缺陷預(yù)測可分為[34]:(1)模塊級預(yù)測,即預(yù)測模塊含有的缺陷;(2)文件級預(yù)測,即預(yù)測文件含有的缺陷;(3)變更級缺陷預(yù)測,也稱即時缺陷預(yù)測,當(dāng)開發(fā)者每次提交變更代碼時,預(yù)測其是否存在缺陷,由Kamei等[35]首次提出此概念。

目前,基于軟件度量的靜態(tài)軟件缺陷預(yù)測是比較成熟和流行的技術(shù),包含四個關(guān)鍵要素[15,19]:軟件度量指標(biāo)的篩選、測評數(shù)據(jù)資源庫、缺陷預(yù)測模型的構(gòu)建和缺陷預(yù)測模型的評價。因此,本文第3~6章將分別綜述上述四方面的現(xiàn)有工作。

3 軟件度量指標(biāo)的篩選

3.1 軟件度量指標(biāo)篩選的研究現(xiàn)狀

軟件度量指標(biāo)主要包括刻畫軟件產(chǎn)品屬性的指標(biāo)和刻畫軟件開發(fā)過程的指標(biāo)[15,36]。前者包括代碼行數(shù)(line of code,LOC)、McCabe 著色圖法、軟件科學(xué)法、功能點(diǎn)法、Chidamber 與Kemerer 提出的度量集(簡稱CK 度量集)、Abreu 提出的度量集(metrics for object-oriented design,MOOD)和Bansiya等提出的度量集(quality model for object-oriented design,QMOOD)等經(jīng)典的基于代碼的度量指標(biāo)[36]。后者包括有關(guān)代碼修改特征的度量、有關(guān)模塊間依賴性的度量、有關(guān)開發(fā)時間/開發(fā)人員/開發(fā)方法的度量,以及有關(guān)項(xiàng)目團(tuán)隊組織架構(gòu)的度量等。

面對如此眾多的度量指標(biāo),如何進(jìn)行篩選是構(gòu)建高質(zhì)量軟件缺陷預(yù)測模型的第一個關(guān)鍵。如果不加篩選地采用全部度量指標(biāo),會造成三方面的問題。(1)收集全部度量指標(biāo)需要花費(fèi)大量的人力和物力,代價太大,有時也是做不到的;(2)部分度量指標(biāo)間存在冗余,會增加構(gòu)建缺陷預(yù)測模型的時間;(3)部分度量指標(biāo)與缺陷不相關(guān),會降低缺陷預(yù)測模型的性能。

目前,研究者已經(jīng)對度量指標(biāo)存在冗余達(dá)成統(tǒng)一共識。例如Emam 等[37]在一個電信軟件系統(tǒng)上發(fā)現(xiàn)6 個OO(object-oriented)度量與LOC 都是高度相關(guān)的,分別是WMC(weighted methods per class)、CBO(coupling between object classes)、RFC(response for classes)、LCOM(lack of cohesion of methods)、NPAVG(average number of parameters per method)和NMA(number of methods added)。Zhou等[38]分析了6個Java 開源系統(tǒng)(Eclipse 2.0、Equinox 3.4、JDT core 3.4、Lucene 2.4.0、Mylyn 3.1 和PDE UI 3.4.1),發(fā)現(xiàn)LOC、NMIMP(number of methods implemented in a class)、NumPara(number of parameters in the methods implemented in a class)、NM(number of methods)、NAIMP(number of attributes implemented in a class)、NA(number of attributes)和Stmts(number of statements)等類規(guī)模與大部分OO度量存在強(qiáng)相關(guān)。

因?yàn)槎攘恐笜?biāo)間存在冗余[39-43],Gao 等[40]指出移除85%的度量指標(biāo)可能會提高預(yù)測效果,Shivaji等[41]發(fā)現(xiàn)在大部分情況下最多只需要使用10%的度量指標(biāo),因此對其進(jìn)行篩選是非常必要的。Xu 等[42]將度量指標(biāo)篩選方法細(xì)分為5種。(1)過濾式排序法,例如Khoshgoftaar 等[43]比較了包括信息增益法IG(information gain)、卡方法CS(Chi-squared)和信噪比SNR(signal to noise ratio)在內(nèi)的7種度量指標(biāo)選擇方法,結(jié)果表明IG和SNR更有效。(2)過濾式子集選擇法,例如,楊曉杏[44]提出了一種改進(jìn)的最小冗余、最大相關(guān)度量元分析方法來篩選度量指標(biāo),并發(fā)現(xiàn)度量指標(biāo)和個數(shù)的選擇很大程度上依賴于數(shù)據(jù)集。(3)包裹式子集選擇法[45-49],例如,Liu 等[45]提出了3 種代價敏感的度量指標(biāo)選擇方法,即CSVS(cost-sensitive variance score)、CSLS(cost-sensitive Laplacian score)和CSCS(cost-sensitive constraint score)。Laradji等[46]提出了一種集成方法選擇度量指標(biāo)。陳翔等[48]提出了一種基于多目標(biāo)優(yōu)化算法NSGA-II(non-dominated sorting genetic algorithm-II)的軟件缺陷預(yù)測指標(biāo)選擇方法MOFES(multi-objective optimization feature selection),分別將最小化指標(biāo)子集規(guī)模和最大化AUC(area under the ROC curve)作為兩個優(yōu)化目標(biāo),在Promise 和ReLink 數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果表明MOFES方法在大部分情況下可以篩選出更小規(guī)模的指標(biāo)子集,并獲得更好的缺陷預(yù)測性能。Turabieh等[49]提出了一種分層循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrent neural network)方法選擇度量指標(biāo),隨機(jī)迭代選擇二元遺傳算法(binary genetic algorithm)、二元粒子群優(yōu)化(particle swarm optimization)和二元蟻群優(yōu)化(ant colony optimization)對度量指標(biāo)進(jìn)行提取,在19 個Promise 數(shù)據(jù)集上進(jìn)行了實(shí)驗(yàn)。(4)基于聚類的方法,例如,劉望舒等[50]提出了一種基于聚類分析的度量指標(biāo)選擇方法FECAR(feature clustering and feature ranking),首先將具有冗余關(guān)系的度量指標(biāo)聚于簇中,然后對每一個簇中的度量指標(biāo)按照它們與缺陷的相關(guān)性降序排列,最后從每一個簇中選取指定數(shù)量的度量指標(biāo)。在Eclipse和NASA數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果表明集成少數(shù)度量指標(biāo)的缺陷預(yù)測模型的性能優(yōu)于集成所有度量指標(biāo)的。Xu等[51]也提出了一種基于聚類分析的特征選擇方法MICHAC(maximal information coefficient with hierarchical agglomerative clustering),該方法采用最大信息系數(shù)對候選指標(biāo)進(jìn)行排名,進(jìn)而過濾掉不相關(guān)的特征;然后采用層次凝聚法對指標(biāo)進(jìn)行聚類,只保留每組中的一個指標(biāo),去除冗余指標(biāo)。(5)基于抽取的方法,例如,朱朝陽等[52]提出了基于主成分分析的軟件度量指標(biāo)選擇方法。

上述度量指標(biāo)篩選方法雖然考慮了度量指標(biāo)間的相關(guān)性,考慮了度量指標(biāo)與軟件缺陷間的相關(guān)性,也考慮了類規(guī)模與軟件缺陷間的相關(guān)性,但卻忽略了類規(guī)模對度量指標(biāo)與軟件缺陷間關(guān)聯(lián)的混和效應(yīng),即度量指標(biāo)與軟件缺陷之間的相關(guān)是真相關(guān),還是由于類規(guī)模的原因引起的偽相關(guān)。

在類規(guī)模的混和效應(yīng)分析方面,Emam等[37]在一個電信軟件系統(tǒng)上對WMC、DIT(depth of inheritance tree)、CBO、RFC、LCOM、NPAVG 和NMA 等7 個OO度量進(jìn)行了LOC 的混和效應(yīng)分析,研究結(jié)果表明:LOC對WMC、CBO、RFC和NMA的軟件缺陷預(yù)測能力具有強(qiáng)的混和效應(yīng)。Zhou 等[38]在6 個Java 開源軟件系統(tǒng)上對55 個OO 度量進(jìn)行了7 個類規(guī)模(LOC、NMIMP、NumPara、NM、NAIMP、NA和Stmts)的混和效應(yīng)分析。研究結(jié)果表明:類規(guī)模對OO度量的混和效應(yīng)廣泛存在,并且大多數(shù)過高地評估了OO度量的軟件缺陷預(yù)測能力,并提出了一種基于線性回歸的混和效應(yīng)剔除方法。

此外,盧紅敏等[53]在102 個Java 開源軟件系統(tǒng)上檢查7 個類規(guī)模(LOC、NMIMP、NumPara、NM、NAIMP、NA和Stmts)對55個OO度量的易變性預(yù)測是否存在混和效應(yīng)。隨機(jī)效應(yīng)元分析結(jié)果表明:類規(guī)模對大多數(shù)的OO度量具有混和效應(yīng),甚至在許多情況下會導(dǎo)致虛假相關(guān)。

吳方君[54]在Eclipse的兩個版本2.0和2.1上檢測了3個類規(guī)模(LOC、NMIMP和NumPara)對55個OO度量的易變性預(yù)測是否存在混和效應(yīng)。實(shí)驗(yàn)結(jié)果表明:在軟件易變性預(yù)測中類規(guī)模對大部分OO度量存在混和效應(yīng),個別不存在混和效應(yīng)。

3.2 軟件度量指標(biāo)篩選面臨的問題

雖然類規(guī)模的混和效應(yīng)分析工作為軟件度量指標(biāo)篩選開啟了一個新窗口,但是縱觀先前的工作發(fā)現(xiàn):或者只分析了少量的軟件系統(tǒng),最多也只分析了6 個軟件系統(tǒng);或者只分析了開源系統(tǒng),得出的結(jié)論能不能推廣到其他更多的系統(tǒng)中尚存疑問。為此,非常有必要在大量學(xué)術(shù)界、開源界和產(chǎn)業(yè)界軟件系統(tǒng)的基礎(chǔ)上甄別OO 度量與軟件缺陷間相關(guān)性的真?zhèn)危瑤椭藗冋_認(rèn)識OO度量和軟件缺陷之間的關(guān)系,是否有必要將類規(guī)模作為混和變量考慮進(jìn)來。

4 測評數(shù)據(jù)資源庫

4.1 測評數(shù)據(jù)資源庫的研究現(xiàn)狀

目前測評數(shù)據(jù)資源庫可劃分為三大類:(1)公共專業(yè)數(shù)據(jù)資源庫,如NASA(https://github.com/klainfo/NASADefectDataset)、Promise(http://promise.site.uottawa.ca/SERepository/datasets-page.html)、Softlab(https://github.com/klainfo/DefectData)和NETGENE(https://hg.st.cs.uni-saarland.de/projects/cg_data_sets/repository)。(2)公共非專業(yè)數(shù)據(jù)資源庫,如Harvard 數(shù)據(jù)資源庫(https://dataverse.harvard.edu/)。(3)個人專業(yè)數(shù)據(jù)資源庫,有部分學(xué)者在版本控制系統(tǒng),如CVS(concurrent versions system)、Git(Georgia Institute of Technology)、SVN(subversion),以及缺陷追蹤系統(tǒng),如Bugzilla(bug-tracking system)、JIRA、Mantis、Trac,和開發(fā)人員的相關(guān)往來郵件等的基礎(chǔ)上自行組建個人專業(yè)數(shù)據(jù)資源庫,如Zimmermann數(shù)據(jù)集(https://www.st.cs.uni-saarland.de/softevo/bug-data/eclipse/)、AEEEM數(shù)據(jù)集(http://bug.inf.usi.ch/)和ReLink 數(shù)據(jù)集[55]。Jing 等[56]和陳翔等[20]分別從數(shù)據(jù)來源、度量指標(biāo)等方面對比分析了部分測評數(shù)據(jù)集。

此外,由于在軟件系統(tǒng)中缺陷服從帕累托(Pareto)原則[3],即20%的模塊包含了80%的缺陷,真正含有缺陷的模塊是少數(shù),因此會出現(xiàn)類不平衡問題。國內(nèi)外學(xué)者針對不平衡分類問題相繼提出了各種解決方案,大體上可以分為:數(shù)據(jù)預(yù)處理層面的重采樣方法和劃分方法,特征層面的特征選擇方法,分類算法層面的分類器集成、代價敏感方法和單類學(xué)習(xí)方法。有關(guān)不平衡數(shù)據(jù)分類更詳細(xì)的總結(jié)煩請參考文獻(xiàn)[57-59]。

4.2 測評數(shù)據(jù)資源庫面臨的問題

目前測評數(shù)據(jù)資源庫主要存在三方面的問題。(1)測評數(shù)據(jù)資源庫較少,在此基礎(chǔ)上得出的實(shí)驗(yàn)結(jié)論具有一定的偏頗性,是否具有通用性,值得進(jìn)一步檢驗(yàn)。(2)部分測評數(shù)據(jù)集是從開源項(xiàng)目收集的,而開源軟件的開發(fā)方式與產(chǎn)業(yè)界商業(yè)軟件的開發(fā)方式存在著比較大的差異,前者一般由多人分布式開發(fā),后者由多人集中式開發(fā)。在開源軟件數(shù)據(jù)上構(gòu)建的缺陷預(yù)測模型在產(chǎn)業(yè)界的實(shí)用性比較差,甚至不如隨機(jī)猜想,是否與測評數(shù)據(jù)有關(guān),值得進(jìn)一步驗(yàn)證。(3)大部分?jǐn)?shù)據(jù)資源庫描述了模塊的缺陷傾向性,或者缺陷的數(shù)量,只有少數(shù)刻畫了缺陷的嚴(yán)重等級,無法滿足軟件產(chǎn)業(yè)界的需求。有了缺陷的嚴(yán)重等級數(shù)據(jù),項(xiàng)目經(jīng)理就可以將有限的人力和物力資源合理、高效地分配在真正需要審查/測試的軟件模塊上。

5 缺陷預(yù)測模型的構(gòu)建

5.1 缺陷預(yù)測模型構(gòu)建的研究現(xiàn)狀

缺陷預(yù)測模型的構(gòu)建方法隨著預(yù)測目標(biāo)的不同而各異。

5.1.1 缺陷傾向性預(yù)測模型的構(gòu)建

當(dāng)預(yù)測目標(biāo)是缺陷傾向性時,經(jīng)常采用分類法。最初是經(jīng)驗(yàn)預(yù)測階段,研究人員在軟件規(guī)模和軟件復(fù)雜度的基礎(chǔ)上憑經(jīng)驗(yàn)預(yù)測軟件缺陷;后來逐漸進(jìn)入到智能預(yù)測階段,Malhotra[14]指出機(jī)器學(xué)習(xí)方法是使用頻率最高的。典型的缺陷預(yù)測模型構(gòu)建方法如邏輯斯蒂回歸分析(logistic regression,LR)、樸素貝葉斯(na?ve Bayes,NB)、決策樹(decision tree,DT)、人工神經(jīng)網(wǎng)絡(luò)(artificial neural network,ANN)、隨機(jī)森林(random forest,RF)、泊松回歸(Poisson regression,PR)、負(fù)二項(xiàng)回歸(negative binomial regression,NBR)和支持向量機(jī)(support vector machine,SVM)等。

Hall 等[12]總結(jié)了2000—2010 年發(fā)表的208 篇文獻(xiàn),指出LR和NB是最優(yōu)的;陳翔等[20]統(tǒng)計了2016年7月以前發(fā)表的56篇文獻(xiàn),指出LR、NB、DT、SVM和RF 使用頻率最高,同時指出分類方法中參數(shù)取值的不同會影響預(yù)測性能;Tantithamthavorn 等[60]也分析了分類方法中不同的參數(shù)取值對預(yù)測性能的影響,建議把這種影響納入考慮范圍。

Jiang等[61]提出了一種半監(jiān)督的軟件缺陷預(yù)測方法ROCUS(random committee with under-sampling),該方法利用半監(jiān)督學(xué)習(xí)來解決標(biāo)記樣本數(shù)量少的問題,利用欠抽樣方法解決數(shù)據(jù)不均衡問題,并在8 個NASA數(shù)據(jù)集上進(jìn)行了實(shí)證。

王鐵建等[62]提出了一種基于核字典學(xué)習(xí)的軟件缺陷預(yù)測方法,該方法利用核方法將數(shù)據(jù)映射到一個高維空間,之后采用核字典基選擇策略學(xué)習(xí)得到核字典,最后預(yù)測模塊的缺陷傾向性,并在NASA 數(shù)據(jù)集上進(jìn)行了實(shí)證。

楊杰等[63]提出了基于Boosting 的代價敏感軟件缺陷預(yù)測方法,該方法用隨機(jī)屬性子集選擇法降低Boosting重抽樣過程中的維度災(zāi)難,為漏報和誤報增加不同的代價敏感因子,并在NASA數(shù)據(jù)集上進(jìn)行了實(shí)證。

傅藝綺等[64]提出了基于組合機(jī)器學(xué)習(xí)的軟件缺陷預(yù)測,該方法將LR、DT、NB和ANN等幾種算法的預(yù)測結(jié)果作為新的度量指標(biāo)加入數(shù)據(jù)集,之后運(yùn)用Stacking集成學(xué)習(xí)方法再次預(yù)測缺陷,在Eclipse數(shù)據(jù)集的實(shí)證驗(yàn)證了其有效性。

雖然軟件缺陷預(yù)測方法大多是基于機(jī)器學(xué)習(xí)的,但是也有研究人員從復(fù)雜網(wǎng)絡(luò)[65-67]、多目標(biāo)優(yōu)化[68-75]和深度學(xué)習(xí)[76-80]等方面入手。

(1)基于復(fù)雜網(wǎng)絡(luò)的軟件缺陷預(yù)測方法比較少。例如,Wu[65]通過UML(unified modeling language)類圖將軟件系統(tǒng)映射為有向復(fù)雜網(wǎng)絡(luò),之后研究了軟件網(wǎng)絡(luò)復(fù)雜性度量與典型的OO度量之間的關(guān)系,指出雖然兩者不顯著相關(guān),但是前者從不同側(cè)面對OO度量起到一個較好的補(bǔ)充;雖然軟件網(wǎng)絡(luò)復(fù)雜性度量對軟件缺陷預(yù)測方面有提高作用,但提高的程度不顯著。劉慶山[66]通過函數(shù)間的調(diào)用關(guān)系將軟件系統(tǒng)映射為有向復(fù)雜網(wǎng)絡(luò),之后采用網(wǎng)絡(luò)度量指標(biāo)數(shù)據(jù)對缺陷進(jìn)行預(yù)測,并指出網(wǎng)絡(luò)度量是有效的。Ma等[67]在軟件網(wǎng)絡(luò)度量指標(biāo)的基礎(chǔ)上進(jìn)行缺陷預(yù)測,并指出網(wǎng)絡(luò)度量在不同的系統(tǒng)上表現(xiàn)差異比較大,并在6 個Firefox 版本、5 個Eclipse 版本、9 個開源系統(tǒng)(JEdit、Ant、Camel、Ivy、Poi、Lucene、Xalan、Xerces 和Tomcat)的28個版本上進(jìn)行了實(shí)證。

(2)基于多目標(biāo)優(yōu)化的軟件缺陷預(yù)測方法也較少。Khoshgoftaar 等[68]提出了一種以誤分代價最小化、決策樹復(fù)雜度最小化和可用資源最優(yōu)為目標(biāo)的缺陷預(yù)測方法;Carvalho等[69]提出了一種以高缺陷檢測率和低誤報率為目標(biāo)的粒子群優(yōu)化方法MOPSO(multi-objective particle swarm optimization);楊曉杏[44]提出了一種結(jié)合代碼敏感SVM和多目標(biāo)優(yōu)化策略的非支配排序遺傳算法NSGA-II-based SVM 來對缺陷模塊序列進(jìn)行排序,其中高缺陷檢測率和低資源浪費(fèi)率是兩個優(yōu)化目標(biāo),并在17個Promise數(shù)據(jù)集上驗(yàn)證了其高效性;Canfora 等[70]提出了一種以高缺陷檢測率和LOC 最小化為目標(biāo)的缺陷預(yù)測方法MODEP(multi-objective defect predictor);Shukla 等[71]提出了一種以誤分代價最小化/召回率最大化為目標(biāo),或者可用資源最優(yōu)/召回率最大化為目標(biāo)的缺陷預(yù)測方法;Ryu 等[72]提出了一種以高缺陷檢測率、低誤報率和高整體性能為多目標(biāo)的樸素貝葉斯缺陷預(yù)測方法;Chen 等[73]在NSGA-II 的基礎(chǔ)上提出了一種以高缺陷檢測率和低資源使用率為多目標(biāo)的缺陷預(yù)測方法。

(3)基于深度學(xué)習(xí)的軟件缺陷預(yù)測方法也比較少。例如,甘露等[78]通過疊加多層限制玻爾茲曼機(jī)(restricted Boltzmann machine,RBM)對度量指標(biāo)進(jìn)行集成,在此基礎(chǔ)上進(jìn)行深度學(xué)習(xí),之后提出了基于深度信念網(wǎng)(deep belief networks,DBN)的軟件缺陷預(yù)測模型DBNSDPM(deep belief network software defect prediction model),并在5個NASA 數(shù)據(jù)集上進(jìn)行了實(shí)證,實(shí)驗(yàn)結(jié)果表明缺陷預(yù)測準(zhǔn)確性有顯著提高。針對特征冗余和高維性,周末等[79]提出了一種基于深度自編碼網(wǎng)絡(luò)的軟件缺陷預(yù)測方法,并在6 個NASA、Promise 和NETGENE 數(shù)據(jù)集上進(jìn)行了實(shí)證。針對特征冗余和數(shù)據(jù)不均衡性,徐海濤等[80]提出了一種結(jié)合稀疏自編碼神經(jīng)網(wǎng)絡(luò)(sparse autoencoder neural networks)和過采樣技術(shù)SMOTE 的軟件缺陷預(yù)測方法,并在NASA數(shù)據(jù)集上進(jìn)行了實(shí)證。

針對分類任務(wù)的缺陷預(yù)測時,有少數(shù)研究者考慮缺陷嚴(yán)重等級。Zhou等[81]將缺陷嚴(yán)重等級劃分為高低。Singh等[82]將其劃分為高中低。Tian等[83]將其劃分為Trival、Minor、Major、Ctritical 和Blocker。Zhang等[13]將 其 劃 分 為Trivial、Minor、Normal、Critical 和Blocker。Chen等[84]通過模塊間的依賴關(guān)系將軟件系統(tǒng)映射為有向復(fù)雜網(wǎng)絡(luò),之后在軟件網(wǎng)絡(luò)度量指標(biāo)的基礎(chǔ)上進(jìn)行高危缺陷預(yù)測,其中高危缺陷是指嚴(yán)重等級是Major、Critical 或Blocker,指出基于網(wǎng)絡(luò)度量指標(biāo)的高危缺陷預(yù)測性能可以與基于代碼度量指標(biāo)的高危缺陷預(yù)測性能相媲美,并在Firefox、Eclipse、Ant 和Hbase 上進(jìn)行了實(shí)證。喻維[85]采用主動學(xué)習(xí)和半監(jiān)督學(xué)習(xí)相結(jié)合的方法預(yù)測缺陷的嚴(yán)重程度。

5.1.2 缺陷數(shù)量/分布密度預(yù)測模型的構(gòu)建

當(dāng)預(yù)測目標(biāo)是缺陷的數(shù)量或分布密度時,通常采用多元線性回歸分析MLR(multiple linear regression)[1,6,86-89],例如Akiyama[1]提出了Akiyama 模型,用于刻畫LOC與缺陷數(shù)量之間的關(guān)系;Gao等[6]比較了以NBR 和PR 為代表的8 種廣義線性回歸模型的性能。此外,也有研究人員從其他方面入手解決上述問題。例如,Livshits 等[86]開發(fā)了一個缺陷檢測工具DynaMine,利用關(guān)聯(lián)規(guī)則挖掘那些因?yàn)槲磁鋵κ褂媚承┏绦驑?gòu)造(如方法調(diào)用等)而造成的缺陷,并在Eclipse 和JEdit 上進(jìn)行了驗(yàn)證;Nguyen 等[87]基于模塊間的相似性來預(yù)測缺陷的數(shù)量,K個近鄰模塊所含的缺陷數(shù)量的均值就是模塊所含缺陷數(shù)量的預(yù)測值;簡藝恒等[88]依據(jù)缺陷模塊和無缺陷模塊的比例,借助SMOTE多次過采樣得到多個數(shù)據(jù)集,之后利用回歸分析得到多個軟件缺陷數(shù)量預(yù)測模型,將上述多個模型的預(yù)測值的均值作為最終的預(yù)測值。

5.1.3 缺陷模塊排序模型的構(gòu)建

當(dāng)預(yù)測目標(biāo)是缺陷模塊排序時,一般采用分類法和回歸分析技術(shù),例如采用最小二乘法或最大似然法預(yù)測的多元線性回歸、RF、以NBR 為代表的廣義線性回歸和SVM等,也有研究人員從聚類、排序?qū)W習(xí)(learning to rank,LTR)方面入手解決該問題。

楊明[90]提出了一種基于聚類的缺陷模塊排序預(yù)測方法LSDB(largest-cluster started distance based),該方法在代碼級度量數(shù)據(jù)的基礎(chǔ)上,首先利用Kmeans 或者X-means 等算法對模塊進(jìn)行聚類,然后進(jìn)行簇間排序,最后進(jìn)行簇內(nèi)模塊排序。進(jìn)行簇間排序時,作者將包含模塊最多的簇排在第一位,計算剩余簇的中心點(diǎn)到第一個簇的中心點(diǎn)的歐式距離,按照距離升序排列。進(jìn)行簇內(nèi)模塊排序時,計算模塊與該簇中心點(diǎn)的歐式距離,按照距離升序排列。LSDB 方法預(yù)測出來的缺陷模塊序列是按照缺陷概率升序排列的。

隨后趙東曉[91]也提出了四種基于聚類的缺陷模塊排序預(yù)測方法,基本框架與楊明方法[90]一樣,不同之處在于簇間排序和簇內(nèi)模塊排序方法,不僅根據(jù)軟件缺陷服從Pareto 原則[3],而且還參考軟件模塊包含缺陷的概率與其規(guī)模成反比[4]來設(shè)定排序方法。第一種方法MSSB(minimum-size-cluster started size based)進(jìn)行簇間排序和簇內(nèi)模塊排序時均按照LOC升序排序。第二種方法SSDB(smallest-cluster started distance based)進(jìn)行簇間排序時,將包含模塊最少的簇排在第一位,剩余簇的中心點(diǎn)到第一個簇的中心點(diǎn)的歐式距離升序排列;對于簇內(nèi)模塊排序時,按照模塊與該簇中心點(diǎn)的歐式距離升序排列。第三種方法SSSB(smallest-cluster started size based)進(jìn)行簇間排序時,按照簇包含的模塊數(shù)量升序排列;對于簇內(nèi)模塊排序時,按照模塊的LOC 升序排列。第四種方法SSDSB(smallest-cluster started distance and size based)進(jìn)行簇間排序時,將包含模塊最少的簇排在第一位,按照剩余簇的中心點(diǎn)到第一個簇的中心點(diǎn)的歐式距離升序排列;對于簇內(nèi)模塊排序時,按照模塊的LOC升序排列。四種方法預(yù)測出來的缺陷模塊序列均是按照缺陷概率降序排列的。

田青青[92]提出了一種多次迭代的、基于反饋的圖像檢索框架的半監(jiān)督協(xié)同缺陷模塊序列排序方法SSADP:首先將未標(biāo)記缺陷傾向性的模塊按照LOC升序排列;然后選擇排在前面的2%模塊手工標(biāo)記上缺陷傾向性類標(biāo)簽,作為初始的訓(xùn)練數(shù)據(jù)集;最后訓(xùn)練分類器,并預(yù)測剩余模塊的缺陷傾向性,根據(jù)預(yù)測值降序排列軟件模塊,返回給用戶。

近年來,越來越多的研究者借助于多目標(biāo)優(yōu)化和機(jī)器學(xué)習(xí)中的排序?qū)W習(xí)[93]來解決缺陷模塊排序預(yù)測問題。楊曉杏等[44,94]在線性模型的基礎(chǔ)上提出了一種軟件缺陷模塊排序預(yù)測方法,該方法以FPA(faultpercentile-average)為優(yōu)化目標(biāo),利用組合差分進(jìn)化(composite differential evolution,CoDE)算法[95]來獲得參數(shù),并在6 個Zimmermann 數(shù)據(jù)集和5 個開源系統(tǒng)(Eclipse JDT core、Eclipse PDE UI、Equinox framework、Mylyn 和Apache Lucene)的數(shù)據(jù)集上驗(yàn)證了其有效性。隨后,Priya 等[96]引入玻爾茲曼機(jī)來增強(qiáng)排序?qū)W習(xí)的能力。Nguyen 等[87]將經(jīng)典的排序?qū)W習(xí)算法RankSVM 和RankBoost 應(yīng)用于缺陷模塊排序預(yù)測中,并在5 個開源系統(tǒng)(Eclipse JDT Core 3.4、Eclipse PDE UI 3.4.1、Mylyn 3.1、Equinox framework 3.4 和Apache Lucene 2.4.0)的數(shù)據(jù)集上驗(yàn)證了其有效性。You 等[97]在多元線性回歸分析的基礎(chǔ)上提出了一種軟件缺陷模塊排序預(yù)測方法ROCPDP(rankingoriented approach to cross-project defect prediction),利用梯度下降法來獲得參數(shù),并在5 個AEEEM 數(shù)據(jù)集和34個Promise數(shù)據(jù)集上驗(yàn)證了其有效性。

5.2 缺陷預(yù)測模型構(gòu)建面臨的問題

學(xué)者們從不同角度、采用不同方法和技術(shù),針對不同的軟件缺陷預(yù)測問題展開了深入、細(xì)致的研究和應(yīng)用,取得了豐碩的成果,為后續(xù)研究和應(yīng)用奠定了扎實(shí)的基礎(chǔ)。雖然在缺陷管理領(lǐng)域考慮嚴(yán)重程度和優(yōu)先級的工作開展得比較多[98-99],但是在缺陷預(yù)測領(lǐng)域考察缺陷嚴(yán)重程度研究相對少[9,81-85],兩者的區(qū)別在于前者已經(jīng)通過代碼審查/測試等途徑知道了缺陷的存在,只不過嚴(yán)重程度的標(biāo)識可能由于提交者初步確定時存在一些錯誤,需要進(jìn)行修正;而后者是不知道哪些模塊存在缺陷,需要通過預(yù)測為項(xiàng)目經(jīng)理和軟件工程師合理分配物力、人力資源在真正需要審查/測試的模塊上提供指導(dǎo)和幫助。針對分類任務(wù)的缺陷預(yù)測,只有少數(shù)學(xué)者考慮了缺陷嚴(yán)重等級[9,81-85];針對排序任務(wù)的缺陷預(yù)測,只有You等[97]將缺陷嚴(yán)重等級納入考慮。軟件產(chǎn)業(yè)界中的真實(shí)情況是軟件不僅包含缺陷,而且缺陷還有等級之分。如缺陷追蹤系統(tǒng)Bugzilla 和Eclipse 工程師不僅將缺陷劃分成Blocker(系統(tǒng)崩潰)、Critical(部分主要功能缺失,影響系統(tǒng)使用)、Major(部分功能缺失,不影響系統(tǒng)使用)、Normal(部分功能存在缺陷)、Minor(系統(tǒng)功能齊全,但存在瑕疵)、Trivial(小問題)、Enhancement(需要完善)等7個等級,而且還設(shè)置了優(yōu)先級Priority指標(biāo),從最高優(yōu)先級P1到最低優(yōu)先級P5。

根據(jù)軟件缺陷服從Pareto[3],而且模塊包含缺陷的概率與其規(guī)模成反比[4]的原則,在此舉了一個比較符合軟件產(chǎn)業(yè)界真實(shí)情況的例子。如表2 所示,3 個模塊包含了不同嚴(yán)重程度、數(shù)量不等的缺陷。表3給出了3個模塊在不同情況下的排列順序。

表3 中,當(dāng)進(jìn)行缺陷模塊排序預(yù)測時,在考慮代碼審查/測試工作量的情況下,3 個模塊的審查/測試順序是C、A、B。簡而言之,按照C、A、B 的順序?qū)?個模塊進(jìn)行代碼審查/測試最符合軟件產(chǎn)業(yè)界的真實(shí)情況。因?yàn)橹旅娜毕輹?dǎo)致系統(tǒng)崩潰,嚴(yán)重的缺陷使系統(tǒng)主要功能喪失,這兩種類型的缺陷是一定要修改的,不管缺陷所在模塊的規(guī)模大??;一般缺陷使系統(tǒng)部分功能無效,這種類型的缺陷也是需要修改的,但是需要考慮缺陷所在模塊的規(guī)模大??;提示只是警告,這種類型的缺陷可以在人力和物力資源充足的條件下修改。從成本收益的角度來講,模塊C、A、B的排序是最好的。

6 缺陷預(yù)測模型的評價

6.1 缺陷預(yù)測模型評價的研究現(xiàn)狀

目前,模型評價標(biāo)準(zhǔn)可劃分為針對分類預(yù)測能力的評價標(biāo)準(zhǔn)和基于代碼審查/軟件測試工作量感知的評價標(biāo)準(zhǔn)。評價分類預(yù)測能力的標(biāo)準(zhǔn)比較多,如準(zhǔn)確率(accuracy)、查準(zhǔn)率(precision)、召回率(recall)、F值、G-Mean(geometric mean of precision and recall)、AUC 和MCC(Matthews correlation coefficient),它們的值越大越好;I型錯誤率和II型錯誤率,它們的值越小越好。上述指標(biāo)的使用需要滿足一個前提條件,即項(xiàng)目經(jīng)理和軟件工程師有充足的人力和物力資源可以審查/測試所有的代碼模塊,但是在軟件產(chǎn)業(yè)界卻是不現(xiàn)實(shí)的,為此研究者們提出了基于代碼審查/軟件測試工作量感知的評價標(biāo)準(zhǔn),如基于代碼行的Alberg 圖(也稱為累積提升圖(cumulative lift chart,CLC))[8]、平均缺陷百分比FPA[11]和成本收益曲線下面積(area under the cost-effectiveness curve,AUCEC)[100]及PofB20指標(biāo)[101],它們的值越大越好。特別地,CLC和FPA線性相關(guān)[44,94],且FPA更簡單、更易理解。

Table 2 Example表2 示例

Table 3 Sequence表3 排列順序

6.2 缺陷預(yù)測模型評價面臨的問題

雖然基于代碼審查/軟件測試工作量感知的評價標(biāo)準(zhǔn)更符合軟件產(chǎn)業(yè)界的現(xiàn)實(shí)狀況,但是它們只評價了缺陷傾向性,而沒有評價缺陷的嚴(yán)重等級。

7 研究展望

在國內(nèi)外眾多學(xué)者和軟件開發(fā)人員的努力之下,基于軟件度量的靜態(tài)缺陷預(yù)測取得了斐然的成績,但仍存在一些問題有待于進(jìn)一步地研究和探討,特別是:

(1)針對排序任務(wù)的軟件缺陷預(yù)測進(jìn)行度量指標(biāo)篩選的工作欠缺。在軟件度量指標(biāo)篩選方面,研究者已經(jīng)對度量指標(biāo)存在冗余達(dá)成統(tǒng)一共識,因此有必要對其進(jìn)行篩選。雖然已經(jīng)存在若干度量指標(biāo)篩選方法,但大部分是針對分類任務(wù)的軟件缺陷預(yù)測開展了度量指標(biāo)的篩選,針對排序任務(wù)的度量指標(biāo)篩選比較少。度量指標(biāo)在不同任務(wù)的軟件缺陷預(yù)測時性能可能有所差異,可能會存在某些度量指標(biāo)在分類任務(wù)時性能良好,但是排序任務(wù)時性能差的情況,因此有必要針對排序任務(wù)的軟件缺陷預(yù)測進(jìn)行度量指標(biāo)的篩選,深度學(xué)習(xí)中的自編碼網(wǎng)絡(luò)可能是個不錯的選擇。

(2)未將缺陷嚴(yán)重等級納入全面考慮。①已有的大部分測評數(shù)據(jù)資源庫記載了模塊的缺陷傾向性,或者缺陷的數(shù)量,只有少數(shù)記載了缺陷的嚴(yán)重等級,無法滿足軟件產(chǎn)業(yè)界的需求。②大部分軟件缺陷預(yù)測只考慮了有無缺陷,較少考慮缺陷嚴(yán)重等級,這不符合產(chǎn)業(yè)界追求成本收益的目標(biāo)。③雖然有若干軟件缺陷預(yù)測模型的評價標(biāo)準(zhǔn),但它們只評價了缺陷傾向性,而沒有評價缺陷的嚴(yán)重等級,不符合軟件產(chǎn)業(yè)界的現(xiàn)實(shí)狀況。

(3)隨著云計算技術(shù)的發(fā)展,互聯(lián)網(wǎng)軟件開發(fā)出現(xiàn)了一些新的范式,如微服務(wù)架構(gòu)軟件[102]、無服務(wù)架構(gòu)軟件等。微服務(wù)架構(gòu)是Amazon、eBay和Netflix等公司建立的一種軟件體系設(shè)計模式,將復(fù)雜系統(tǒng)拆分成多個獨(dú)立的小系統(tǒng),具有敏捷開發(fā)、持續(xù)交付、持續(xù)集成等特點(diǎn);無服務(wù)架構(gòu)是微服務(wù)架構(gòu)的一種表現(xiàn)形式,將代碼放到谷歌Cloud Functions、微軟Azure Functions、亞馬遜AWS Lambda 等平臺上,由平臺來處理與服務(wù)器相關(guān)的具體細(xì)節(jié)問題,具有運(yùn)行維護(hù)簡單、開發(fā)效率高等特點(diǎn)。這些互聯(lián)網(wǎng)軟件開發(fā)的新模式隨之帶來了一些新問題和新挑戰(zhàn),例如一個復(fù)雜系統(tǒng)可能由多個采用不同的程序設(shè)計語言來編碼的獨(dú)立小系統(tǒng)組成,它們的基于代碼的度量數(shù)據(jù)存在較大差異;由于代碼存放在平臺上,因此通過日志來定位缺陷就比較困難。諸此種種導(dǎo)致傳統(tǒng)的軟件缺陷預(yù)測的技術(shù)和經(jīng)驗(yàn)不適用,即時缺陷預(yù)測可能是個不錯的處理辦法。

(4)近年來,如何解決缺陷預(yù)測在產(chǎn)業(yè)界實(shí)際軟件開發(fā)中所面臨的各種問題,提升軟件缺陷預(yù)測的實(shí)用性和經(jīng)濟(jì)性,為管理人員分配有限的人力和物力資源提供指導(dǎo),以便在付出最小代價的前提條件下,審查/測試出盡可能嚴(yán)重、盡可能多的軟件缺陷,進(jìn)一步把軟件缺陷預(yù)測從學(xué)術(shù)界推向產(chǎn)業(yè)界,這是目前亟待解決的問題。

雖然產(chǎn)業(yè)界的項(xiàng)目經(jīng)理和軟件工程師已經(jīng)意識到軟件缺陷預(yù)測在改善系統(tǒng)質(zhì)量方面起著重要作用,迫切希望將其運(yùn)用到軟件工程實(shí)踐活動中,也已有研究人員在微軟[16]、谷歌[17]和思科[18]等軟件產(chǎn)業(yè)界的知名公司進(jìn)行了軟件缺陷預(yù)測的實(shí)踐,但是卻發(fā)現(xiàn)它們實(shí)用性比較差,甚至不如隨機(jī)猜想,與學(xué)術(shù)界開展的如火如荼的軟件缺陷預(yù)測理論研究形成了鮮明對比。原因在于:①在產(chǎn)業(yè)界,軟件開發(fā)成本是有限的,不能把所有的人力和物力資源全部投入到代碼審查/軟件測試中。②在整個軟件生命期中,發(fā)現(xiàn)和修正缺陷占用了50%~75%的費(fèi)用[2],如何把發(fā)現(xiàn)和修正缺陷的費(fèi)用盡量降低,這是產(chǎn)業(yè)界所關(guān)心的。③真正含有缺陷的模塊是少數(shù),軟件缺陷服從帕累托(Pareto)原則[3],即20%的模塊包含了80%的缺陷。④項(xiàng)目經(jīng)理和軟件工程師不僅關(guān)心系統(tǒng)中是否含有缺陷和缺陷的數(shù)量,更關(guān)心缺陷的嚴(yán)重程度。事實(shí)上,缺陷嚴(yán)重程度不僅有等級之分,它們造成的后果也是不同的:致命的缺陷會導(dǎo)致系統(tǒng)崩潰,嚴(yán)重的缺陷使系統(tǒng)主要功能喪失,一般缺陷使系統(tǒng)部分功能無效。缺陷嚴(yán)重等級影響了代碼審查/軟件測試工作,致命(blocker)缺陷和嚴(yán)重(critical)缺陷是一定要修改的,一般(normal)缺陷是需要考慮缺陷所在模塊的規(guī)模大小來加以修改的,提示(enhancement)類型的缺陷可以在人力和物力資源充足的條件下修改。⑤學(xué)術(shù)界構(gòu)建的軟件缺陷預(yù)測模型大部分是基于開源項(xiàng)目數(shù)據(jù),而開源軟件的開發(fā)方式與產(chǎn)業(yè)界商業(yè)軟件的開發(fā)方式存在著比較大的差異,前者一般由多人分布式開發(fā),后者由多人集中式開發(fā),在前者上構(gòu)建的缺陷預(yù)測模型在后者的實(shí)用性比較差,甚至不如隨機(jī)猜想。已有的軟件缺陷預(yù)測方法和技術(shù)側(cè)重于缺陷的預(yù)測能力,未將產(chǎn)業(yè)界的實(shí)際情況加以深入考察。因此如何將有限的人力和物力資源合理、高效地分配在真正需要審查/測試的軟件模塊上是非常值得研究和非常經(jīng)濟(jì)實(shí)用的,缺陷排序預(yù)測可能是個有效的措施。

(5)軟件缺陷預(yù)測研究工作的再現(xiàn)性和可復(fù)制性至關(guān)重要,只有可再現(xiàn)性和可復(fù)制的工作才有可能運(yùn)用到軟件工程實(shí)踐活動中去;然而,現(xiàn)有研究工作的再現(xiàn)性和可復(fù)制性卻比較差。Mahmood等[103]選取208 項(xiàng)高引用的軟件缺陷預(yù)測研究工作進(jìn)行再現(xiàn)性和可復(fù)制性實(shí)驗(yàn),發(fā)現(xiàn)只有13 項(xiàng)(6%)是可復(fù)制的,而且有1項(xiàng)的結(jié)果與原始結(jié)果不一致。下一步的研究工作需要注重可再現(xiàn)性和可復(fù)制性。

猜你喜歡
軟件缺陷產(chǎn)業(yè)界度量
有趣的度量
人才的探照燈是時候該關(guān)注產(chǎn)業(yè)界了
模糊度量空間的強(qiáng)嵌入
基于源文件可疑度的靜態(tài)軟件缺陷檢測方法研究
迷向表示分為6個不可約直和的旗流形上不變愛因斯坦度量
基于NPE-SVM的軟件缺陷預(yù)測模型
開源程序的軟件缺陷分布特征的量化分析研究
中瑞兩局合作第六次會議及第四次產(chǎn)業(yè)界圓桌會在滬召開
河南科技(2017年12期)2017-03-05 12:26:45
中歐兩局與產(chǎn)業(yè)界圓桌會在京舉行
河南科技(2017年24期)2017-03-05 10:55:55
地質(zhì)異常的奇異性度量與隱伏源致礦異常識別
米林县| 仙游县| 嘉义县| 内江市| 望城县| 东阿县| 界首市| 滨海县| 清河县| 留坝县| 新邵县| 西丰县| 马尔康县| 岳西县| 通辽市| 陇川县| 瑞金市| 宜黄县| 高青县| 习水县| 卓资县| SHOW| 平乡县| 新源县| 富蕴县| 宕昌县| 会理县| 诸城市| 宜良县| 武宁县| 台南市| 祥云县| 隆回县| 襄垣县| 思茅市| 秭归县| 根河市| 阜阳市| 怀宁县| 张家港市| 汕头市|