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

?

融合測(cè)試異味的即時(shí)缺陷預(yù)測(cè)模型探究

2022-05-10 01:29殷瑞笛吳海濤高建華黃子杰
關(guān)鍵詞:度量異味代碼

殷瑞笛,吳海濤,高建華,黃子杰

1(上海師范大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù),上海 200234)

2(華東理工大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù),上海 200237)

1 引 言

在軟件維護(hù)和進(jìn)化過程中,開發(fā)人員不斷修改源代碼,以引入新功能或修復(fù)缺陷.然而,這些修改可能會(huì)引入新的缺陷[1],因此開發(fā)人員必須仔細(xì)驗(yàn)證代碼的可靠性,進(jìn)行軟件質(zhì)量保障(SQA)活動(dòng).SQA往往在開發(fā)或測(cè)試過程中進(jìn)行[2],或者在代碼審查時(shí)執(zhí)行[3].然而,對(duì)所有的代碼執(zhí)行SQA將耗費(fèi)大量的人力資源,研究人員通過缺陷預(yù)測(cè)為SQA的計(jì)劃提供依據(jù).缺陷預(yù)測(cè)[4]是一種關(guān)于源代碼或開發(fā)過程的信息構(gòu)建統(tǒng)計(jì)模型來預(yù)測(cè)軟件的缺陷,進(jìn)而將檢查和測(cè)試資源分配給更可能存在缺陷的源代碼部分的有效方法.

大多數(shù)現(xiàn)有的缺陷預(yù)測(cè)方法都是通過進(jìn)行長期預(yù)測(cè)即分析以前軟件版本中積累的信息,來預(yù)測(cè)哪些工件在未來版本中更容易出現(xiàn)缺陷.但Kamei等人[5,6]發(fā)現(xiàn)粗粒度、非即時(shí)的缺陷預(yù)測(cè)模型在實(shí)踐中的作用可能有限,因?yàn)樗鼈儾荒転殚_發(fā)人員提供即時(shí)的反饋,因此不能避免在將工件提交到存儲(chǔ)庫的過程中引入缺陷.為了克服這一限制,Kamei等人[5,6]提出了即時(shí)缺陷預(yù)測(cè),即針對(duì)細(xì)粒度的代碼提交特征進(jìn)行預(yù)測(cè),使開發(fā)人員可以關(guān)注具體的代碼提交,從而提高缺陷預(yù)測(cè)對(duì)開發(fā)活動(dòng)的響應(yīng)性.然而Kamei等人實(shí)驗(yàn)研究的即時(shí)缺陷預(yù)測(cè)模型中,所利用的也只是提交信息中的一部分,即代碼度量、過程度量和開發(fā)人員相關(guān)的因素.軟件測(cè)試作為軟件開發(fā)過程中的一個(gè)重要部分與生產(chǎn)代碼的質(zhì)量息息相關(guān)[7],并沒有在Kamei等人的研究中被利用.

為了保證軟件在更新迭代過程中的可靠性,開發(fā)者們引入了回歸測(cè)試以求保障新增的生產(chǎn)代碼的功能的正確性.然而,有研究發(fā)現(xiàn)[8,9],大部分開發(fā)人員更為重視軟件生產(chǎn)代碼的質(zhì)量,而忽略了測(cè)試代碼中存在的問題,從而使測(cè)試代碼的質(zhì)量普遍較低.Van Deursen 等人[10]對(duì)測(cè)試代碼的質(zhì)量進(jìn)行了系統(tǒng)的研究,歸納總結(jié)出了測(cè)試代碼中反復(fù)出現(xiàn)的設(shè)計(jì)問題,提出了測(cè)試異味這一概念.最近已有不少研究證明了測(cè)試異味的存在對(duì)生產(chǎn)代碼的質(zhì)量有著不良影響[7,11,12].然而,這些研究并沒有對(duì)測(cè)試異味與生產(chǎn)代碼可靠性的關(guān)聯(lián)進(jìn)行進(jìn)一步探究,例如,測(cè)試異味是否也可以作為一類有效的特征屬性來預(yù)測(cè)生產(chǎn)代碼中可能存在的缺陷.

為了探究上述問題,本文在Kamei等人[5,6]研究的基礎(chǔ)上,將提交信息中的測(cè)試代碼所包含的測(cè)試異味作為一個(gè)新角度的特征屬性融合到原有的即時(shí)缺陷預(yù)測(cè)模型中,構(gòu)建一個(gè)包含更多軟件開發(fā)過程信息的即時(shí)缺陷預(yù)測(cè)模型.在衡量新構(gòu)建的預(yù)測(cè)模型性能的同時(shí),本文也將對(duì)測(cè)試異味作為缺陷預(yù)測(cè)的特征屬性的有效性和不同測(cè)試異味對(duì)預(yù)測(cè)輸出的影響的差異性進(jìn)行探究.

本文的主要貢獻(xiàn)如下:

1)在原有的即時(shí)缺陷預(yù)測(cè)模型中[5],本文加入了測(cè)試異味這一新的特征屬性,構(gòu)建了一個(gè)包含軟件編寫、軟件測(cè)試以及軟件維護(hù)的更多角度的即時(shí)缺陷預(yù)測(cè)模型.

2)通過可加性解釋模型SHAP[13]對(duì)特征貢獻(xiàn)度進(jìn)行了分析,本文研究發(fā)現(xiàn)ECT,UT,AR,GF,MNT,ET這6種測(cè)試異味對(duì)模型輸出的影響更為突出,這也為開發(fā)人員在關(guān)注提交記錄和進(jìn)行問題診斷時(shí),提供了可著重關(guān)注的測(cè)試異味類型,節(jié)省了開發(fā)人員的工作量.

3)通過跨系統(tǒng)項(xiàng)目的探究,本文發(fā)現(xiàn)不同系統(tǒng)項(xiàng)目中的測(cè)試異味對(duì)即時(shí)缺陷模型的預(yù)測(cè)輸出的影響存在較大差異,但每個(gè)項(xiàng)目中都有多種測(cè)試異味對(duì)缺陷預(yù)測(cè)的貢獻(xiàn)度排在前20位,這也再次證明了開發(fā)人員在進(jìn)行SQA時(shí)應(yīng)該對(duì)測(cè)試異味給予一定的關(guān)注.

本文的結(jié)構(gòu)安排如下,第2節(jié)討論了與研究相關(guān)的工作.第3節(jié)說明了即時(shí)缺陷預(yù)測(cè)模型的構(gòu)建.在第4節(jié)簡述了實(shí)驗(yàn)的流程設(shè)計(jì),分析并討論了實(shí)驗(yàn)研究的結(jié)果,第5節(jié)討論了有效性威脅.最后,第6節(jié)總結(jié)了論文并概述了未來工作的方向.

2 相關(guān)工作

2.1 測(cè)試異味

作為源代碼的一個(gè)子集,測(cè)試代碼也可能存在設(shè)計(jì)問題,人們對(duì)正確維護(hù)和改進(jìn)測(cè)試代碼的設(shè)計(jì)越來越感興趣[14-16].研究人員和開發(fā)者已經(jīng)開始研究測(cè)試用例的質(zhì)量、識(shí)別測(cè)試代碼中的各種問題[8,9],并創(chuàng)造了“測(cè)試異味”這個(gè)術(shù)語來描述反復(fù)出現(xiàn)的測(cè)試設(shè)計(jì)問題,它們可能會(huì)損害測(cè)試的可靠性和可維護(hù)性.近期的研究[9,17,18]發(fā)現(xiàn)測(cè)試異味在軟件系統(tǒng)中廣泛存在,并且它們可能不會(huì)隨著系統(tǒng)的發(fā)展而消除.其他研究通過測(cè)量存在/不存在測(cè)試異味時(shí)理解測(cè)試代碼所花費(fèi)的時(shí)間,研究了測(cè)試異味對(duì)代碼理解的影響[19].此外,Athanasiou等人[20]通過衡量測(cè)試異味與軟件發(fā)布后出現(xiàn)缺陷的相關(guān)性,研究了測(cè)試異味對(duì)軟件質(zhì)量的影響.然而,這些研究僅強(qiáng)調(diào)了測(cè)試異味對(duì)軟件可靠性和可維護(hù)性的影響分析,而并未將測(cè)試異味作為軟件質(zhì)量保障(SQA)活動(dòng)的資源分配依據(jù),例如將其添加進(jìn)缺陷預(yù)測(cè)模型中,以探究測(cè)試異味對(duì)預(yù)測(cè)生產(chǎn)代碼缺陷的有效性.

2.2 代碼度量

代碼的結(jié)構(gòu)數(shù)據(jù)是用諸如McCabe的圈復(fù)雜度[21]或Chidamber和Kemerer等人研究中的結(jié)構(gòu)度量[22]等度量來計(jì)算的.上述而這些度量的有效性已在缺陷預(yù)測(cè)的實(shí)證研究中被廣泛證實(shí)[23-27].例如,Nagappan等人[28]發(fā)現(xiàn),基于代碼度量的模型在識(shí)別容易出現(xiàn)缺陷的類時(shí)可以達(dá)到高達(dá)83%的準(zhǔn)確率.而本次試驗(yàn)研究選擇部分Chidamber和Kemerer等人實(shí)驗(yàn)中的結(jié)構(gòu)度量指標(biāo)[22]作為代碼度量的數(shù)據(jù),共6個(gè)代碼度量,如表1所示.同時(shí)使用Chidamber和Kemerer等人實(shí)驗(yàn)中使用的代碼度量挖掘工具CK,來獲取所有項(xiàng)目的代碼度量數(shù)據(jù).

表1 代碼度量描述Table 1 Code metric description

2.3 過程度量

歷史數(shù)據(jù)是用諸如代碼行變更、變化熵或與開發(fā)人員相關(guān)的因素等度量來計(jì)算的[26,29-34].同時(shí),也有不少研究人員通過實(shí)驗(yàn)驗(yàn)證了歷史數(shù)據(jù)對(duì)于提升缺陷預(yù)測(cè)模型性能的有效性.例如,Moser等人[31]進(jìn)行了一項(xiàng)比較研究,分析了基于靜態(tài)分析度量和歷史信息度量的分類預(yù)測(cè)器并得出結(jié)論,在項(xiàng)目歷史信息上計(jì)算的度量表現(xiàn)更佳.

2.4 即時(shí)缺陷預(yù)測(cè)

即時(shí)缺陷預(yù)測(cè)指的是能夠?qū)?xì)粒度的代碼提交是否存在缺陷進(jìn)行預(yù)測(cè)的模型是由Kamei等人[5,6]提出的,它試圖進(jìn)一步減少開發(fā)人員的工作量.后來,Kamei等人還評(píng)估了即時(shí)模型在跨項(xiàng)目缺陷預(yù)測(cè)中的表現(xiàn)[6].他們發(fā)現(xiàn)模型在精確度和召回率方面具備良好性能,同時(shí)也節(jié)省了開發(fā)人員用于代碼審查的精力.

2.5 可加性解釋模型框架SHAP

SHAP[13,35,36]是基于Shapley值啟發(fā)的可加性模型解釋框架.對(duì)于每個(gè)預(yù)測(cè)樣本,模型都產(chǎn)生一個(gè)預(yù)測(cè)值,SHAP 值就是該樣本中每個(gè)特征所分配到的數(shù)值.假設(shè)第i個(gè)樣本為xi,第i個(gè)樣本的第j個(gè)特征為xij,模型對(duì)于第i個(gè)樣本的預(yù)測(cè)值為yi,整個(gè)模型的基線(通常是所有樣本目標(biāo)變量的均值)為ybase,

那么SHAP值服見式(1):

yi=ybase+f(xi1)+f(xi2)+f(xi3)+…+f(xik) (1)

其中,f(xik)為xik的SHAP值.f(xik)就是第i個(gè)樣本中第k個(gè)特征對(duì)最終預(yù)測(cè)值yi的貢獻(xiàn)值,當(dāng)f(xik)>0,說明該特征提升了預(yù)測(cè)值,反之,說明該特征使得預(yù)測(cè)值降低.

與簡單的特征重要性相比,SHAP值最大的優(yōu)勢(shì)是它能反映出每一個(gè)樣本中每個(gè)特征的影響力,而且還可以表現(xiàn)出其影響的正反作用.

3 即時(shí)缺陷預(yù)測(cè)模型的構(gòu)建

本次實(shí)驗(yàn)的即時(shí)缺陷預(yù)測(cè)模型的構(gòu)建主要分為3個(gè)步驟:1)確定進(jìn)行缺陷預(yù)測(cè)的3個(gè)角度所包含的特征屬性;2)對(duì)已選擇的特征進(jìn)行相關(guān)性分析;3)特征篩選和機(jī)器分類模型的選擇.

3.1 模型特征的確定

由于軟件開發(fā)涉及軟件開發(fā)、軟件測(cè)試、軟件維護(hù)這3個(gè)過程,本文受此啟發(fā),考慮建立一個(gè)涵蓋上述3種方面的即時(shí)缺陷預(yù)測(cè)模型.

對(duì)于軟件開發(fā)這一角度的特征屬性,本實(shí)驗(yàn)決定選用代碼度量.通過參考Chidamber和Kemerer等人[22]的實(shí)驗(yàn),選取了他們實(shí)驗(yàn)中的部分指標(biāo)作為本次實(shí)驗(yàn)的代碼度量,共有6個(gè),如表1所示.

在軟件測(cè)試方面,本次實(shí)驗(yàn)選擇Bavota等人[9]提出的測(cè)試異味中的17種,如表3所示,作為軟件測(cè)試這一角度的特征屬性添加進(jìn)由Kamei等人[5,6]提出的即時(shí)缺陷預(yù)測(cè)模型中.這些測(cè)試異味在以前的工作中被廣泛研究[9,37-40],它們與Java中的單元測(cè)試實(shí)踐相關(guān).為了識(shí)別測(cè)試異味,本文采用了由Peruma等人[41]實(shí)現(xiàn)的測(cè)試異味檢測(cè)工具tsDetect來分析所研究的系統(tǒng).而選擇tsDetect的原因主要有:1)tsDetect是靜態(tài)分析工具,可以實(shí)現(xiàn)測(cè)試異味的全自動(dòng)化檢測(cè)且無需編譯軟件;2)tsDetect可以同時(shí)檢測(cè)19種測(cè)試異味,可檢測(cè)的種類較為全面;3)在檢測(cè)測(cè)試異味時(shí),tsDetect能夠達(dá)到至少85%的準(zhǔn)確率和90%的召回率,其F-Score為96.5%[41].因?yàn)閠sDetect是在文件級(jí)的粒度上進(jìn)行測(cè)試異味的挖掘,且每條提交記錄中涉及多個(gè)系統(tǒng)文件的變更,所以本次實(shí)驗(yàn)選擇統(tǒng)計(jì)每條提交記錄中具有測(cè)試異味的文件數(shù)量,作為該條提交記錄所包含的測(cè)試異味數(shù)量特征.

表2 過程度量描述Table 2 Process metric description

表3 測(cè)試異味描述Table 3 Test smells description

在軟件維護(hù)方面,本文參考Kamei等人[5,6]采用的由項(xiàng)目歷史信息計(jì)算得到的過程度量指標(biāo),如表2所示,共包含14個(gè)度量,分別從系統(tǒng)各組成部分的變更、代碼行的變更、是否修復(fù)了缺陷、文件修改變更頻率和關(guān)聯(lián)開發(fā)者的經(jīng)驗(yàn)等五個(gè)角度描述了提交的特征.為了獲取每條提交記錄的過程度量數(shù)據(jù),本文采用了由Rosen等人[42]實(shí)現(xiàn)的一種語言無關(guān)的自動(dòng)化分析和預(yù)測(cè)工具Commit Guru,為本次實(shí)驗(yàn)提供了所有代碼提交的完整數(shù)據(jù)以及相關(guān)的歷史信息度量.

3.2 特征選擇

由于本次實(shí)驗(yàn)共有37個(gè)特征屬性,包含了17種測(cè)試異味,14種過程度量指標(biāo)和6種代碼度量指標(biāo),為了防止因特征間存在多重共線性以及因特征屬性過多而導(dǎo)致的機(jī)器學(xué)習(xí)模型的泛化能力降低,本文對(duì)過程度量和代碼度量的特征屬性進(jìn)行了相關(guān)性分析.

本文通過相關(guān)性熱力圖對(duì)代碼度量和過程度量的指標(biāo)進(jìn)行了特征間的相關(guān)性分析,鑒于文章版面有限,只展示了代碼度量的相關(guān)性熱力圖,如圖1所示,并將代碼度量和過程度量指標(biāo)的最終篩選結(jié)果展示在表4中.

表4 代碼度量以及過程度量篩選結(jié)果Table 4 Code metric and process metric screening results

(2)

r描述的是兩個(gè)變量間線性相關(guān)強(qiáng)弱的程度,r的絕對(duì)值越大表明相關(guān)性越強(qiáng).一般認(rèn)為:|r|≥0.8時(shí),可認(rèn)為兩變量間極高度相關(guān);0.6≤|r|<0.8,可認(rèn)為兩變量高度相關(guān);0.4|r|<0.6,可認(rèn)為兩變量中度相關(guān);0.2≤|r|<0.4,可認(rèn)為兩變量低度相關(guān);|r|<0.2,可認(rèn)為兩變量基本不相關(guān).

根據(jù)圖1所示的關(guān)于代碼度量各特征屬性間的相關(guān)系數(shù),本文將相關(guān)系數(shù)絕對(duì)值大于0.6的兩個(gè)特征屬性中的一個(gè)剔除,例如代碼度量中的特征屬性CBO和RFC的相關(guān)系數(shù)為0.62,表明這兩種特征屬性是高度相關(guān)的,所以實(shí)驗(yàn)中隨機(jī)選擇將RFC剔除,保留CBO.同理,根據(jù)基于過程度量的相關(guān)性熱力圖分析得出的各特征屬性間的相關(guān)系數(shù),本文將相關(guān)系數(shù)絕對(duì)值大于0.6的兩個(gè)特征屬性中的一個(gè)剔除,例如過程度量中的特征屬性ND和NF的相關(guān)系數(shù)為0.9,表明這兩種特征屬性高度相關(guān),所以實(shí)驗(yàn)中隨機(jī)將ND剔除,保留NF.

圖1 代碼度量屬性相關(guān)性熱力圖Fig.1 Code metric characteristic correlation heatmap

經(jīng)過篩選,最終保留了10個(gè)過程度量和4個(gè)代碼度量,如表4所示.

3.3 分類算法和模型驗(yàn)證

如表5所示,實(shí)驗(yàn)數(shù)據(jù)集存在類不平衡的現(xiàn)象.為了減輕非平衡數(shù)據(jù)集對(duì)即時(shí)缺陷預(yù)測(cè)模型的性能造成的影響,本次實(shí)驗(yàn)對(duì)數(shù)據(jù)集進(jìn)行了欠采樣[43],即減少大類的數(shù)據(jù)樣本個(gè)數(shù),以使包含缺陷的提交記錄與不包含缺陷的提交記錄數(shù)據(jù)量更加相近.同時(shí),鑒于本次實(shí)驗(yàn)包含較多特征屬性且數(shù)據(jù)集不平衡,實(shí)驗(yàn)中首選了隨機(jī)森林作為機(jī)器分類學(xué)習(xí)模型.隨機(jī)森林分類模型是通過建立多個(gè)決策樹并將他們?nèi)诤掀饋淼玫揭粋€(gè)更加準(zhǔn)確和穩(wěn)定的模型,是bagging 思想和隨機(jī)選擇特征的結(jié)合.隨機(jī)森林[44]構(gòu)造了多個(gè)決策樹,當(dāng)需要對(duì)某個(gè)樣本進(jìn)行預(yù)測(cè)時(shí),統(tǒng)計(jì)森林中的每棵樹對(duì)該樣本的預(yù)測(cè)結(jié)果,然后通過投票法從這些預(yù)測(cè)結(jié)果中選出最后的結(jié)果.其最大的優(yōu)點(diǎn)就是對(duì)于類別不平衡數(shù)據(jù),隨機(jī)森林能夠平衡誤差,且不用降維也可以處理高維特征.

表5 實(shí)驗(yàn)項(xiàng)目描述Table 5 Experimental systems description

為了證實(shí)隨機(jī)森林的適用性,本實(shí)驗(yàn)也在邏輯回歸、向量空間機(jī)、樸素貝葉斯和多層感知器這幾種常見的機(jī)器分類模型上進(jìn)行了測(cè)試,并采用了10折交叉驗(yàn)證策略[45].該策略允許所有的觀察樣本都用于訓(xùn)練和測(cè)試目的,而且已經(jīng)在缺陷預(yù)測(cè)的上下文中被廣泛使用[46].該策略將原始數(shù)據(jù)集隨機(jī)劃分為10個(gè)大小相等的子集.在這10個(gè)子集中,一個(gè)被保留為訓(xùn)練集,其余9個(gè)被用作訓(xùn)練集.交叉驗(yàn)證然后重復(fù)10次,允許10個(gè)子集中的每一個(gè)恰好成為測(cè)試集一次[45].實(shí)驗(yàn)結(jié)果進(jìn)一步證明了隨機(jī)森林的效果最好.

4 實(shí) 驗(yàn)

為了驗(yàn)證測(cè)試異味對(duì)即時(shí)缺陷預(yù)測(cè)模型的有效性,本文將就以下3個(gè)問題展開實(shí)驗(yàn)與結(jié)果分析:

RQ1:測(cè)試異味特征是否可以提高即時(shí)缺陷預(yù)測(cè)模型的性能?

RQ2:加入測(cè)試異味的即時(shí)預(yù)缺陷預(yù)測(cè)模型中各特征屬性對(duì)模型預(yù)測(cè)輸出的貢獻(xiàn)度如何?

RQ3:測(cè)試異味這一類特征屬性在不同項(xiàng)目缺陷預(yù)測(cè)的貢獻(xiàn)度上是否存在差別?

4.1 實(shí)驗(yàn)準(zhǔn)備

本文將通過5個(gè)在軟件開發(fā)領(lǐng)域應(yīng)用廣泛且一直有版本更新的較為活躍的開源系統(tǒng)來驗(yàn)證本次實(shí)驗(yàn)設(shè)計(jì)的3個(gè)問題,所選系統(tǒng)的詳細(xì)信息如表5所示.選擇這5個(gè)系統(tǒng)的原因是:

1)本次實(shí)驗(yàn)挖掘測(cè)試異味以及計(jì)算代碼結(jié)構(gòu)度量的工具只適用于由Java語言編寫的項(xiàng)目,而這5個(gè)系統(tǒng)都是基于編程語言Java開發(fā)設(shè)計(jì)的.

2)這5個(gè)系統(tǒng)的量級(jí)大小不一,開發(fā)并投入實(shí)際應(yīng)用以及版本更替的時(shí)長也不相同,提交記錄的數(shù)量也有很大差別,這有利于本文對(duì)模型跨項(xiàng)目的研究.

3)這5個(gè)系統(tǒng)提交記錄中包含缺陷的提交記錄的占比不同,且這5個(gè)系統(tǒng)的實(shí)際應(yīng)用領(lǐng)域也互不相同,可以進(jìn)一步驗(yàn)證本文所提出的即時(shí)缺陷預(yù)測(cè)模型的泛用性.

4.2 實(shí)驗(yàn)流程

本次實(shí)驗(yàn)的流程主要分為3個(gè)步驟,分別是數(shù)據(jù)集的選擇和清洗、即時(shí)缺陷預(yù)測(cè)模型的構(gòu)建以及結(jié)果數(shù)據(jù)的評(píng)估與分析,如圖2所示.

圖2 實(shí)驗(yàn)流程Fig.2 Experiment process

4.2.1 數(shù)據(jù)的獲取及預(yù)處理

首先,通過Christoffer 等人[42]開發(fā)的系統(tǒng)分析工具Commit Guru,獲取到本次試驗(yàn)所涉及的5個(gè)項(xiàng)目的過程度量指標(biāo)數(shù)據(jù)集.

因?yàn)椴煌?xiàng)目的開發(fā)時(shí)間長短不一,且包含的提交記錄數(shù)量較多,所以本文只選取了每個(gè)項(xiàng)目一段時(shí)間內(nèi)的提交記錄,用于本次試驗(yàn)研究.

之后,針對(duì)每個(gè)項(xiàng)目所選取的提交記錄,利用測(cè)試異味檢測(cè)工具,tsDetect[41]來挖掘每條提交記錄中Java文件包含的測(cè)試異味,因?yàn)楸敬螌?shí)驗(yàn)研究的對(duì)象為生產(chǎn)代碼,所以可以將那些存在測(cè)試異味但沒有對(duì)應(yīng)的生產(chǎn)代碼文件的測(cè)試文件剔除.

同時(shí),針對(duì)每條提交記錄中所涉及的Java文件,本文通過Chidamber和Kemerer[22]等人實(shí)驗(yàn)中代碼結(jié)構(gòu)指標(biāo)的計(jì)算工具CK,計(jì)算出表1所示的代碼度量,因?yàn)镃K也是在文件級(jí)輸出每個(gè)Java文件的結(jié)構(gòu)指標(biāo),并用具體的數(shù)字表示,所以本文選擇用每條提交記錄中所有Java文件的代碼結(jié)構(gòu)數(shù)據(jù)的均值,來表示該條提交記錄的代碼度量的數(shù)據(jù)指標(biāo).

4.2.2 即時(shí)缺陷預(yù)測(cè)模型的構(gòu)建

在確定了本次實(shí)驗(yàn)包含的軟件開發(fā)、軟件測(cè)試、軟件維護(hù)3個(gè)角度的特征屬性后,本文針對(duì)可能存在高度相關(guān)性的特征屬性進(jìn)行了相關(guān)性分析,最終篩選得到了4個(gè)代碼度量和10個(gè)過程度量,結(jié)果如表4所示.

為了減輕因?qū)嶒?yàn)數(shù)據(jù)集不平衡給實(shí)驗(yàn)結(jié)果帶來的影響,實(shí)驗(yàn)首先對(duì)獲取到的數(shù)據(jù)集進(jìn)行了欠采樣處理[43],其次首選了隨機(jī)森林這一對(duì)非平衡數(shù)據(jù)集不敏感的機(jī)器分類模型,但是為了保證實(shí)驗(yàn)結(jié)果的可靠性,本次實(shí)驗(yàn)也在邏輯回歸,樸素貝葉斯,多層感知機(jī)等這類常見的分類模型上進(jìn)行了測(cè)試,并采用了10折交叉驗(yàn)證策略[44],測(cè)試結(jié)果證實(shí)了一開始的選擇,隨機(jī)森林的分類效果最好,被選作本次實(shí)驗(yàn)的機(jī)器分類學(xué)習(xí)模型.

4.2.3 模型性能的評(píng)估與結(jié)果分析

本次實(shí)驗(yàn)通過計(jì)算經(jīng)典的性能指標(biāo),包括精度、召回率、F1值和AUC-ROC[47-50]來驗(yàn)證測(cè)試異味對(duì)即時(shí)缺陷預(yù)測(cè)模型的有效性,并且評(píng)估本次實(shí)驗(yàn)構(gòu)建的即時(shí)缺陷預(yù)測(cè)模型的跨項(xiàng)目缺陷預(yù)測(cè)的性能.

實(shí)驗(yàn)基于可解釋性人工智能算法SHAP[13]計(jì)算每個(gè)特征對(duì)預(yù)測(cè)結(jié)果的貢獻(xiàn)度,通過SHAP的3個(gè)特性,即局部精確性、允許缺失和一致性以及模擬式的計(jì)算思想,考慮各個(gè)特征組合關(guān)鍵詞對(duì)模型結(jié)果的影響,以滿足即時(shí)缺陷預(yù)測(cè)模型這類高精度復(fù)雜集成模型的解釋.

4.3 實(shí)驗(yàn)結(jié)果分析

4.3.1 RQ1:即時(shí)缺陷預(yù)測(cè)模型的性能

為了回答RQ1,本文將實(shí)驗(yàn)分為兩組,第一組實(shí)驗(yàn)不添加測(cè)試異味作為特征屬性,記作BasePrediction,第二組實(shí)驗(yàn)將測(cè)試異味作為特征屬性添加進(jìn)即時(shí)缺陷預(yù)測(cè)模型中,記作tsBasePrediction.本文通過對(duì)比經(jīng)典的性能指標(biāo),包括精度、召回率、F1值和AUC-ROC[47-50]的值來評(píng)估測(cè)試異味對(duì)即時(shí)缺陷預(yù)測(cè)模型的有效性.

精度Precision用于表示所有預(yù)測(cè)值為1的樣本中被正確預(yù)測(cè)的比例,如式(3)所示.其中TP表示真正例,即預(yù)測(cè)值是1,真實(shí)值是1的樣本;FP表示假正例,即預(yù)測(cè)值是1,真實(shí)值是0的樣本.

(3)

召回率Recall表示檢測(cè)率在所有實(shí)際值為1的樣本中被正確預(yù)測(cè)為1的比例,如式(4)所示.其中TP表示真正例,即預(yù)測(cè)值是1,真實(shí)值是1的樣本;FN表示假反例,即預(yù)測(cè)值是0,真實(shí)值是1的樣本.

(4)

F1值是統(tǒng)計(jì)學(xué)中用來衡量二分類模型精確度的一種指標(biāo).它同時(shí)兼顧了分類模型的精確率和召回率.F1值可以看作是模型精確率和召回率的一種調(diào)和平均,它的最大值是1,最小值是0,如式(5)所示.

(5)

ROC曲線是二值分類問題的一個(gè)評(píng)價(jià)指標(biāo).它是一個(gè)概率曲線,在不同的閾值下繪制TPR(真正例率)與FPR(假正例率)的關(guān)系圖,從本質(zhì)上把“信號(hào)”與“噪聲”分開.AUC-ROC[47]的值即為ROC曲線下的面積,是分類器區(qū)分類的能力的度量,用作ROC曲線的總結(jié).AUC-ROC的值越高,模型在區(qū)分正類和負(fù)類方面的性能越好(通常認(rèn)為AUC-ROC值大于0.7時(shí),分類預(yù)測(cè)模型的性能可評(píng)估為優(yōu)良[51]).

利用從5個(gè)系統(tǒng)中獲取到的相關(guān)特征屬性的數(shù)據(jù)集,對(duì)本次實(shí)驗(yàn)構(gòu)建的即時(shí)缺陷預(yù)測(cè)模型進(jìn)行了驗(yàn)證,結(jié)果如表6所示.

表6 模型性能對(duì)比Table 6 Model performance comparison

根據(jù)表6所示的數(shù)據(jù)結(jié)果可以看出本次實(shí)驗(yàn)構(gòu)建的即時(shí)缺陷預(yù)測(cè)模型的性能效果是較好的(AUC-ROC>0.7).沒有加入測(cè)試異味作為特征屬性的即時(shí)缺陷預(yù)測(cè)模型的精度最差的能到達(dá)到64.8%,最好的能達(dá)到77.7%,這說明本次試驗(yàn)的模型在預(yù)測(cè)一個(gè)提交記錄是否有缺陷時(shí),其預(yù)測(cè)結(jié)果最少也有近65%是正確的.而在加入了測(cè)試異味作為特征屬性后,即時(shí)缺陷預(yù)測(cè)模型對(duì)各項(xiàng)目提交記錄是否含有缺陷的預(yù)測(cè)精度最少提高了1.4%,最多提高了3.9%,同時(shí)即時(shí)缺陷預(yù)測(cè)模型的最差精度也由原來64.5%,提高到了68.7%.這一結(jié)果說明了測(cè)試異味在提高即時(shí)缺陷預(yù)測(cè)模型的預(yù)測(cè)精度方面是有一定正向作用的.

對(duì)于性能評(píng)估指Recall和F1值,可以發(fā)現(xiàn)不加入測(cè)試異味作為特征屬性時(shí),模型的Recall和F1值最差也可分別達(dá)到64.4%和63.7%,這意味著該模型的預(yù)測(cè)結(jié)果最少也有64%以上是正確的,而在加入了測(cè)試異味作為特征屬性以后,模型的Recall有了0.8%-4%左右的提升,F(xiàn)1值有2.3%-4.6%左右的提升,同時(shí)模型的Recall和F1值最差也可分別達(dá)到66.7%和66.9%,總體上來看模型的Recall和F1值也有2.3%和3.2%的提升.針對(duì)分類器區(qū)分類的能力的度量,AUC-ROC值,可以發(fā)現(xiàn)從總體上看,在不加入測(cè)試異味作為特征屬性前,模型的AUC-ROC值最低為66.6%,而在加入了測(cè)試異味作為特征屬性之后,模型的AUC-ROC值最低為72.0%,有了5.4%的提升,從每個(gè)項(xiàng)目提交記錄的預(yù)測(cè)情況來看,在加入測(cè)試異味作為特征屬性之后,模型的AUC-ROC值分別有了2.5%-6.7%的提升,而這一結(jié)果也再次證明了將測(cè)試異味作為特征屬性加入到即時(shí)缺陷預(yù)測(cè)模型中,對(duì)于模型預(yù)測(cè)性能的提高是有效的.

4.3.2 RQ2:模型中各特征屬性的貢獻(xiàn)度排序

為了進(jìn)一步探究測(cè)試異味是否可以作為有效的預(yù)測(cè)因子來提高即時(shí)缺陷預(yù)測(cè)模型,本文利用SHAP[13]對(duì)本次實(shí)驗(yàn)構(gòu)建的即時(shí)缺陷預(yù)測(cè)模型中各特征屬性對(duì)模型預(yù)測(cè)結(jié)果輸出的貢獻(xiàn)度進(jìn)行了排序,結(jié)果如圖3所示.

圖3 各特征屬性的貢獻(xiàn)度排序Fig.3 Contribution ranking of each feature attribute

圖3是基于SHAP值的密度散點(diǎn)圖,其中SHAP值代表該特征屬性對(duì)模型預(yù)測(cè)輸出的影響的大小,密度散點(diǎn)圖中的一個(gè)點(diǎn)對(duì)應(yīng)于研究中的一條提交記錄,點(diǎn)在x軸上的位置代表了該特征對(duì)模型預(yù)測(cè)該提交記錄是否含有缺陷的貢獻(xiàn)度,x軸上的值的絕對(duì)值越大,說明該特征對(duì)模型的預(yù)測(cè)輸出影響越大,而x軸上的值的正負(fù)代表了特征對(duì)模型預(yù)測(cè)輸出影響的正負(fù),本次實(shí)驗(yàn)中若SHAP值為正則說明該特征屬性提升了預(yù)測(cè)該條記錄有缺陷的可能性,若SHAP值為負(fù)則說明該特征屬性降低了預(yù)測(cè)該條記錄有缺陷的可能性.當(dāng)多個(gè)點(diǎn)在x軸上同一位置著陸時(shí),它們堆積起來以顯示密度.

圖3左邊展示的即為本次實(shí)驗(yàn)?zāi)P椭袑?duì)模型預(yù)測(cè)結(jié)果貢獻(xiàn)度排在前20位的特征屬性的降序排列.可以看到,本次試驗(yàn)構(gòu)建的即時(shí)缺陷預(yù)測(cè)模型中對(duì)模型輸出影響最大的特征屬性是LD,對(duì)模型影響程度排在第20位的是ET,對(duì)模型預(yù)測(cè)輸出的貢獻(xiàn)度排在前20特征中測(cè)試異味共有6種,分別是ECT,UT,AR,GF,MNT,ET.其中對(duì)模型預(yù)測(cè)結(jié)果影響最大測(cè)試異味是ECT,從圖3中散點(diǎn)及其對(duì)應(yīng)的著色分布來看,當(dāng)測(cè)試異味ECT在某條提交記錄中的分布密度偏高時(shí),ECT對(duì)模型預(yù)測(cè)該條提交記錄含有缺陷的影響要比總體貢獻(xiàn)度排在之前的Entropy要大,同樣情況的還有測(cè)試異味UT和GF,從它們的散點(diǎn)及著色分記錄中的分布密度偏高時(shí),UT對(duì)模型預(yù)測(cè)該條提交記錄含有缺陷的影響要比總體貢獻(xiàn)度排在之前的DIT要大,GF對(duì)模型預(yù)測(cè)該條提交記錄含有缺陷的影響要比總體貢獻(xiàn)度排在之前的NS要大.這說明對(duì)于測(cè)試異味分布密度較高的提交記錄來說,開發(fā)人員給予測(cè)試異味更多的關(guān)注是有必要的,因?yàn)闇y(cè)試異味是可以作為一個(gè)有效的參考因素來分析預(yù)測(cè)該提交記錄是否含有缺陷.

4.3.3 RQ3:測(cè)試異味在跨項(xiàng)目中缺陷預(yù)測(cè)輸出的貢獻(xiàn)度的表現(xiàn)

為了探究測(cè)試異味在不同系統(tǒng)中對(duì)缺陷預(yù)測(cè)的貢獻(xiàn)度是否存在差異,本文研究了不同系統(tǒng)的提交記錄數(shù)據(jù)中測(cè)試異味這一類特征屬性對(duì)即時(shí)缺陷預(yù)測(cè)模型預(yù)測(cè)輸出的貢獻(xiàn)度排序是否不同,考慮到每個(gè)項(xiàng)目中的測(cè)試異味的分布情況可能不同,所以本文對(duì)每個(gè)項(xiàng)目中的測(cè)試異味的分布情況進(jìn)行了統(tǒng)計(jì),結(jié)果如表7所示.

表7 各項(xiàng)目提交記錄中的測(cè)試異味分布Table 7 Distribution of test smells in the commits of systems

其中每個(gè)項(xiàng)目中都會(huì)出現(xiàn)分布極其稀疏的測(cè)試異味種類,因?yàn)檫^分稀疏的數(shù)據(jù)對(duì)模型的影響很小,且可能對(duì)模型的性能造成影響,本次實(shí)驗(yàn)直接刪除分布占比低于5%的特征屬性.例如ST在項(xiàng)目Crate中的分布占比僅為2.7%,對(duì)模型的貢獻(xiàn)率很小,所以在Crate這一項(xiàng)目的實(shí)驗(yàn)中,刪除了ST這一特征屬性.

經(jīng)過數(shù)據(jù)處理和實(shí)驗(yàn)后,各項(xiàng)目中特征屬性的貢獻(xiàn)度排序如圖4-圖8所示.

圖4 Apache wicket的SAHP散點(diǎn)圖Fig.4 SHAP scatter plots of wicket

圖5 Apache tomcat的SAHP散點(diǎn)圖Fig.5 SHAP scatter plots of tomcat

圖6 Hibernate-validator的SAHP散點(diǎn)圖Fig.6 SHAP scatter plots of Hibernate-validator

圖7 Crate的SAHP散點(diǎn)圖Fig.7 SHAP scatter plots of Crate

圖8 Apache cassandra的SAHP散點(diǎn)圖Fig.8 SHAP scatter plots of cassandra

可以看到,不同的系統(tǒng)中,不同的特征屬性對(duì)模型預(yù)測(cè)結(jié)果的影響也是不同的.

對(duì)于系統(tǒng)Apache wicket,LD,NF,Entropy,EXP這4個(gè)特征屬性對(duì)模型預(yù)測(cè)一條提交記錄是否含有缺陷的影響是最大的,排在前4位.但是,當(dāng)一條提交記錄中刪減的代碼行數(shù)(LD)或者變更的文件數(shù)(NF)過多時(shí),LD和NF這兩個(gè)特征屬性對(duì)預(yù)測(cè)這條提交記錄是否含有缺陷的影響更大.同樣,對(duì)那些涉及了具有很長開發(fā)經(jīng)歷的開發(fā)人員(EXP)的提交記錄來說,EXP對(duì)預(yù)測(cè)這條提交記錄是否含有缺陷的影響要大于代碼信息增益(Entropy).而對(duì)于這個(gè)系統(tǒng)中存在的測(cè)試異味,可以從圖4中看出,當(dāng)UT的存在數(shù)量較多時(shí),UT對(duì)模型預(yù)測(cè)該條提交記錄是否含有缺陷的影響比變更的文件數(shù)量(NF)的影響要大.同樣的,當(dāng)LT這種測(cè)試異味的存在數(shù)量較多時(shí),LT對(duì)模型預(yù)測(cè)該條提交記錄是否含有缺陷的影響比文件上一次涉及的變更數(shù)(NUC)要大.

對(duì)于系統(tǒng)Apache Tomcat,提交記錄中變更子系統(tǒng)數(shù)(NS)這一特征屬性對(duì)模型預(yù)測(cè)結(jié)果的總體影響要比UT這一測(cè)試異味的影響大,但是對(duì)于少數(shù)包含大量UT的提交記錄來說,UT對(duì)于模型預(yù)測(cè)結(jié)果的影響更大.

對(duì)于系統(tǒng)Hibernate-validator,提交記錄中文件的平均變更時(shí)間間隔(AGE)這一特征屬性對(duì)模型預(yù)測(cè)結(jié)果的影響總體上要大于MNT和ECT這兩種測(cè)試異味,但是對(duì)于具有較多的MNT和ECT分布的提交記錄來說,MNT和ECT對(duì)模型的預(yù)測(cè)輸出影響更大.

對(duì)于系統(tǒng)Crate,提交記錄中文件上一次涉及的變更數(shù)(NUC)這一特征屬性對(duì)模型預(yù)測(cè)結(jié)果的總體影響要比DA這一測(cè)試異味的影響大,但是對(duì)于少數(shù)包含大量DA的提交記錄來說,DA對(duì)于模型預(yù)測(cè)結(jié)果的影響更大.

對(duì)于系統(tǒng)Apache Cassandra,雖然測(cè)試異味這一角度的幾種特征屬性在對(duì)模型預(yù)測(cè)輸出的貢獻(xiàn)度排在最后幾位,但是當(dāng)這幾種測(cè)試異味的分布密度較高時(shí),它們對(duì)模型的預(yù)測(cè)輸出的影響要大于排在他們之前的提交記錄涉及的代碼變更行數(shù)(LT),提交記錄中代碼的對(duì)象類之間的耦合度(CBO)以及提交記錄涉及的變更子系統(tǒng)數(shù)(NS)這3個(gè)特征屬性.

根據(jù)對(duì)這5個(gè)系統(tǒng)實(shí)驗(yàn)結(jié)果的分析,再一次證實(shí)了測(cè)試異味對(duì)即時(shí)缺陷預(yù)測(cè)模型的預(yù)測(cè)輸出的影響是不可忽略的,對(duì)于那些測(cè)試異味分布密度較高的系統(tǒng)來說,測(cè)試異味對(duì)缺陷預(yù)測(cè)的貢獻(xiàn)度要比傳統(tǒng)的代碼度量和過程度量更大.因此,開發(fā)人員在對(duì)軟件可能存在的缺陷進(jìn)行判斷預(yù)測(cè)時(shí),應(yīng)對(duì)常見的測(cè)試異味類型給予一定的關(guān)注,當(dāng)發(fā)現(xiàn)某些測(cè)試異味的分布密度較高時(shí),在判斷其關(guān)聯(lián)的生產(chǎn)代碼是否存在缺陷時(shí),將測(cè)試異味加入到缺陷預(yù)測(cè)的模型中,對(duì)提高模型性能是有一定幫助的.

5 有效性威脅分析

5.1 外部有效性分析

首先,本次實(shí)驗(yàn)只在5個(gè)項(xiàng)目上進(jìn)行了實(shí)驗(yàn)研究,這使得本次實(shí)驗(yàn)構(gòu)建的即時(shí)缺陷預(yù)測(cè)模型的穩(wěn)定性有待進(jìn)一步的擴(kuò)展實(shí)驗(yàn)研究.其次是本次實(shí)驗(yàn)由于實(shí)驗(yàn)工具都是基于Java語言開發(fā)的,這使得實(shí)驗(yàn)研究的對(duì)象也限制在了基于Java語言開發(fā)設(shè)計(jì)的開源系統(tǒng),這使得本次實(shí)驗(yàn)構(gòu)建的模型對(duì)于其他編程語言開發(fā)設(shè)計(jì)的項(xiàng)目的有效性有待進(jìn)一步研究討論.

5.2 內(nèi)部有效性分析

本次實(shí)驗(yàn)研究中的數(shù)據(jù)都是通過相關(guān)的工具獲取的,測(cè)試異味是通過tsDetect[41]這一開源工具捕獲的,代碼度量則是通過CK[22]計(jì)算得到的,而過程度量以及提交記錄是否包含缺陷則是通過Commit Guru[42]獲得的,雖然這些工具的性能都經(jīng)過人工驗(yàn)證,但與實(shí)際情況相比還是會(huì)存在一定程度的誤差,使得本次的實(shí)驗(yàn)數(shù)據(jù)會(huì)存在一定的錯(cuò)漏,這會(huì)對(duì)本次實(shí)驗(yàn)構(gòu)建的模型的性能造成一定的影響.

6 總結(jié)與展望

本次實(shí)驗(yàn)在5個(gè)項(xiàng)目上,實(shí)驗(yàn)并對(duì)比了新模型與舊模型的性能,以探究測(cè)試異味對(duì)即時(shí)缺陷預(yù)測(cè)模型的有效性和差異性,以及跨項(xiàng)目后測(cè)試異味對(duì)缺陷預(yù)測(cè)的貢獻(xiàn)度是否存在差別.實(shí)驗(yàn)結(jié)果顯示,加入測(cè)試異味后,模型的AUC_ROC值提升了2.5%-6.7%,精度提高1.4%-3.9%,召回率提高0.8%-4%,F(xiàn)1值提高2.3%-4.6%,這表明測(cè)試異味對(duì)提高即時(shí)缺陷預(yù)測(cè)模型的性能是有效的.根據(jù)可加性解釋模型SHAP[13]分析的各特征屬性對(duì)模型預(yù)測(cè)輸出的貢獻(xiàn)度的排序,貢獻(xiàn)度排在前20位的特征屬性中有6種測(cè)試異味,分別為ECT,UT,AR,GF,MNT,ET,其中ECT對(duì)模型輸出貢獻(xiàn)度排在第9位,而ET則排在第20位,這表明不同測(cè)試異味對(duì)缺陷預(yù)測(cè)的貢獻(xiàn)度是有差別.同時(shí),不同的系統(tǒng)中的測(cè)試異味對(duì)模型預(yù)測(cè)輸出的貢獻(xiàn)度排序也存在較大差異,例如,系統(tǒng) Apache wicket中,UT和LT的貢獻(xiàn)度排在了第5和第10位,而在系統(tǒng)Apache tomcat中,UT和LT的貢獻(xiàn)度則排在了第18和第19位.

對(duì)于未來的工作,首先可以考慮將實(shí)驗(yàn)的項(xiàng)目數(shù)量增加并且將范圍擴(kuò)展到工業(yè)以及其他不同類別的系統(tǒng),以探究測(cè)試異味對(duì)即時(shí)缺陷預(yù)測(cè)模型有效性的普遍適用性.其次,本次實(shí)驗(yàn)是在提交這一級(jí)別上進(jìn)行的,之后將考慮在不同的粒度上開展實(shí)驗(yàn)探究,如文件或者類一級(jí)別.最后,針對(duì)模型性能提高這一問題,將會(huì)考慮將人工智能AI加入到未來的實(shí)驗(yàn)當(dāng)中.

猜你喜歡
度量異味代碼
Android 應(yīng)用程序的代碼異味檢測(cè)工具與方法綜述
鮑文慧《度量空間之一》
不欣賞自己的人,難以快樂
突出知識(shí)本質(zhì) 關(guān)注知識(shí)結(jié)構(gòu)提升思維能力
三參數(shù)射影平坦芬斯勒度量的構(gòu)造
用這些告別異味吧!夏天就要清清爽爽過!
神秘的代碼
一周機(jī)構(gòu)凈增(減)倉股前20名
重要股東二級(jí)市場(chǎng)增、減持明細(xì)
生活小竅門2則