殷瑞笛,吳海濤,高建華,黃子杰
1(上海師范大學 計算機科學與技術,上海 200234)
2(華東理工大學 計算機科學與技術,上海 200237)
在軟件維護和進化過程中,開發(fā)人員不斷修改源代碼,以引入新功能或修復缺陷.然而,這些修改可能會引入新的缺陷[1],因此開發(fā)人員必須仔細驗證代碼的可靠性,進行軟件質量保障(SQA)活動.SQA往往在開發(fā)或測試過程中進行[2],或者在代碼審查時執(zhí)行[3].然而,對所有的代碼執(zhí)行SQA將耗費大量的人力資源,研究人員通過缺陷預測為SQA的計劃提供依據.缺陷預測[4]是一種關于源代碼或開發(fā)過程的信息構建統(tǒng)計模型來預測軟件的缺陷,進而將檢查和測試資源分配給更可能存在缺陷的源代碼部分的有效方法.
大多數現有的缺陷預測方法都是通過進行長期預測即分析以前軟件版本中積累的信息,來預測哪些工件在未來版本中更容易出現缺陷.但Kamei等人[5,6]發(fā)現粗粒度、非即時的缺陷預測模型在實踐中的作用可能有限,因為它們不能為開發(fā)人員提供即時的反饋,因此不能避免在將工件提交到存儲庫的過程中引入缺陷.為了克服這一限制,Kamei等人[5,6]提出了即時缺陷預測,即針對細粒度的代碼提交特征進行預測,使開發(fā)人員可以關注具體的代碼提交,從而提高缺陷預測對開發(fā)活動的響應性.然而Kamei等人實驗研究的即時缺陷預測模型中,所利用的也只是提交信息中的一部分,即代碼度量、過程度量和開發(fā)人員相關的因素.軟件測試作為軟件開發(fā)過程中的一個重要部分與生產代碼的質量息息相關[7],并沒有在Kamei等人的研究中被利用.
為了保證軟件在更新迭代過程中的可靠性,開發(fā)者們引入了回歸測試以求保障新增的生產代碼的功能的正確性.然而,有研究發(fā)現[8,9],大部分開發(fā)人員更為重視軟件生產代碼的質量,而忽略了測試代碼中存在的問題,從而使測試代碼的質量普遍較低.Van Deursen 等人[10]對測試代碼的質量進行了系統(tǒng)的研究,歸納總結出了測試代碼中反復出現的設計問題,提出了測試異味這一概念.最近已有不少研究證明了測試異味的存在對生產代碼的質量有著不良影響[7,11,12].然而,這些研究并沒有對測試異味與生產代碼可靠性的關聯進行進一步探究,例如,測試異味是否也可以作為一類有效的特征屬性來預測生產代碼中可能存在的缺陷.
為了探究上述問題,本文在Kamei等人[5,6]研究的基礎上,將提交信息中的測試代碼所包含的測試異味作為一個新角度的特征屬性融合到原有的即時缺陷預測模型中,構建一個包含更多軟件開發(fā)過程信息的即時缺陷預測模型.在衡量新構建的預測模型性能的同時,本文也將對測試異味作為缺陷預測的特征屬性的有效性和不同測試異味對預測輸出的影響的差異性進行探究.
本文的主要貢獻如下:
1)在原有的即時缺陷預測模型中[5],本文加入了測試異味這一新的特征屬性,構建了一個包含軟件編寫、軟件測試以及軟件維護的更多角度的即時缺陷預測模型.
2)通過可加性解釋模型SHAP[13]對特征貢獻度進行了分析,本文研究發(fā)現ECT,UT,AR,GF,MNT,ET這6種測試異味對模型輸出的影響更為突出,這也為開發(fā)人員在關注提交記錄和進行問題診斷時,提供了可著重關注的測試異味類型,節(jié)省了開發(fā)人員的工作量.
3)通過跨系統(tǒng)項目的探究,本文發(fā)現不同系統(tǒng)項目中的測試異味對即時缺陷模型的預測輸出的影響存在較大差異,但每個項目中都有多種測試異味對缺陷預測的貢獻度排在前20位,這也再次證明了開發(fā)人員在進行SQA時應該對測試異味給予一定的關注.
本文的結構安排如下,第2節(jié)討論了與研究相關的工作.第3節(jié)說明了即時缺陷預測模型的構建.在第4節(jié)簡述了實驗的流程設計,分析并討論了實驗研究的結果,第5節(jié)討論了有效性威脅.最后,第6節(jié)總結了論文并概述了未來工作的方向.
作為源代碼的一個子集,測試代碼也可能存在設計問題,人們對正確維護和改進測試代碼的設計越來越感興趣[14-16].研究人員和開發(fā)者已經開始研究測試用例的質量、識別測試代碼中的各種問題[8,9],并創(chuàng)造了“測試異味”這個術語來描述反復出現的測試設計問題,它們可能會損害測試的可靠性和可維護性.近期的研究[9,17,18]發(fā)現測試異味在軟件系統(tǒng)中廣泛存在,并且它們可能不會隨著系統(tǒng)的發(fā)展而消除.其他研究通過測量存在/不存在測試異味時理解測試代碼所花費的時間,研究了測試異味對代碼理解的影響[19].此外,Athanasiou等人[20]通過衡量測試異味與軟件發(fā)布后出現缺陷的相關性,研究了測試異味對軟件質量的影響.然而,這些研究僅強調了測試異味對軟件可靠性和可維護性的影響分析,而并未將測試異味作為軟件質量保障(SQA)活動的資源分配依據,例如將其添加進缺陷預測模型中,以探究測試異味對預測生產代碼缺陷的有效性.
代碼的結構數據是用諸如McCabe的圈復雜度[21]或Chidamber和Kemerer等人研究中的結構度量[22]等度量來計算的.上述而這些度量的有效性已在缺陷預測的實證研究中被廣泛證實[23-27].例如,Nagappan等人[28]發(fā)現,基于代碼度量的模型在識別容易出現缺陷的類時可以達到高達83%的準確率.而本次試驗研究選擇部分Chidamber和Kemerer等人實驗中的結構度量指標[22]作為代碼度量的數據,共6個代碼度量,如表1所示.同時使用Chidamber和Kemerer等人實驗中使用的代碼度量挖掘工具CK,來獲取所有項目的代碼度量數據.
表1 代碼度量描述Table 1 Code metric description
歷史數據是用諸如代碼行變更、變化熵或與開發(fā)人員相關的因素等度量來計算的[26,29-34].同時,也有不少研究人員通過實驗驗證了歷史數據對于提升缺陷預測模型性能的有效性.例如,Moser等人[31]進行了一項比較研究,分析了基于靜態(tài)分析度量和歷史信息度量的分類預測器并得出結論,在項目歷史信息上計算的度量表現更佳.
即時缺陷預測指的是能夠對細粒度的代碼提交是否存在缺陷進行預測的模型是由Kamei等人[5,6]提出的,它試圖進一步減少開發(fā)人員的工作量.后來,Kamei等人還評估了即時模型在跨項目缺陷預測中的表現[6].他們發(fā)現模型在精確度和召回率方面具備良好性能,同時也節(jié)省了開發(fā)人員用于代碼審查的精力.
SHAP[13,35,36]是基于Shapley值啟發(fā)的可加性模型解釋框架.對于每個預測樣本,模型都產生一個預測值,SHAP 值就是該樣本中每個特征所分配到的數值.假設第i個樣本為xi,第i個樣本的第j個特征為xij,模型對于第i個樣本的預測值為yi,整個模型的基線(通常是所有樣本目標變量的均值)為ybase,
那么SHAP值服見式(1):
yi=ybase+f(xi1)+f(xi2)+f(xi3)+…+f(xik) (1)
其中,f(xik)為xik的SHAP值.f(xik)就是第i個樣本中第k個特征對最終預測值yi的貢獻值,當f(xik)>0,說明該特征提升了預測值,反之,說明該特征使得預測值降低.
與簡單的特征重要性相比,SHAP值最大的優(yōu)勢是它能反映出每一個樣本中每個特征的影響力,而且還可以表現出其影響的正反作用.
本次實驗的即時缺陷預測模型的構建主要分為3個步驟:1)確定進行缺陷預測的3個角度所包含的特征屬性;2)對已選擇的特征進行相關性分析;3)特征篩選和機器分類模型的選擇.
由于軟件開發(fā)涉及軟件開發(fā)、軟件測試、軟件維護這3個過程,本文受此啟發(fā),考慮建立一個涵蓋上述3種方面的即時缺陷預測模型.
對于軟件開發(fā)這一角度的特征屬性,本實驗決定選用代碼度量.通過參考Chidamber和Kemerer等人[22]的實驗,選取了他們實驗中的部分指標作為本次實驗的代碼度量,共有6個,如表1所示.
在軟件測試方面,本次實驗選擇Bavota等人[9]提出的測試異味中的17種,如表3所示,作為軟件測試這一角度的特征屬性添加進由Kamei等人[5,6]提出的即時缺陷預測模型中.這些測試異味在以前的工作中被廣泛研究[9,37-40],它們與Java中的單元測試實踐相關.為了識別測試異味,本文采用了由Peruma等人[41]實現的測試異味檢測工具tsDetect來分析所研究的系統(tǒng).而選擇tsDetect的原因主要有:1)tsDetect是靜態(tài)分析工具,可以實現測試異味的全自動化檢測且無需編譯軟件;2)tsDetect可以同時檢測19種測試異味,可檢測的種類較為全面;3)在檢測測試異味時,tsDetect能夠達到至少85%的準確率和90%的召回率,其F-Score為96.5%[41].因為tsDetect是在文件級的粒度上進行測試異味的挖掘,且每條提交記錄中涉及多個系統(tǒng)文件的變更,所以本次實驗選擇統(tǒng)計每條提交記錄中具有測試異味的文件數量,作為該條提交記錄所包含的測試異味數量特征.
表2 過程度量描述Table 2 Process metric description
表3 測試異味描述Table 3 Test smells description
在軟件維護方面,本文參考Kamei等人[5,6]采用的由項目歷史信息計算得到的過程度量指標,如表2所示,共包含14個度量,分別從系統(tǒng)各組成部分的變更、代碼行的變更、是否修復了缺陷、文件修改變更頻率和關聯開發(fā)者的經驗等五個角度描述了提交的特征.為了獲取每條提交記錄的過程度量數據,本文采用了由Rosen等人[42]實現的一種語言無關的自動化分析和預測工具Commit Guru,為本次實驗提供了所有代碼提交的完整數據以及相關的歷史信息度量.
由于本次實驗共有37個特征屬性,包含了17種測試異味,14種過程度量指標和6種代碼度量指標,為了防止因特征間存在多重共線性以及因特征屬性過多而導致的機器學習模型的泛化能力降低,本文對過程度量和代碼度量的特征屬性進行了相關性分析.
本文通過相關性熱力圖對代碼度量和過程度量的指標進行了特征間的相關性分析,鑒于文章版面有限,只展示了代碼度量的相關性熱力圖,如圖1所示,并將代碼度量和過程度量指標的最終篩選結果展示在表4中.
表4 代碼度量以及過程度量篩選結果Table 4 Code metric and process metric screening results
(2)
r描述的是兩個變量間線性相關強弱的程度,r的絕對值越大表明相關性越強.一般認為:|r|≥0.8時,可認為兩變量間極高度相關;0.6≤|r|<0.8,可認為兩變量高度相關;0.4|r|<0.6,可認為兩變量中度相關;0.2≤|r|<0.4,可認為兩變量低度相關;|r|<0.2,可認為兩變量基本不相關.
根據圖1所示的關于代碼度量各特征屬性間的相關系數,本文將相關系數絕對值大于0.6的兩個特征屬性中的一個剔除,例如代碼度量中的特征屬性CBO和RFC的相關系數為0.62,表明這兩種特征屬性是高度相關的,所以實驗中隨機選擇將RFC剔除,保留CBO.同理,根據基于過程度量的相關性熱力圖分析得出的各特征屬性間的相關系數,本文將相關系數絕對值大于0.6的兩個特征屬性中的一個剔除,例如過程度量中的特征屬性ND和NF的相關系數為0.9,表明這兩種特征屬性高度相關,所以實驗中隨機將ND剔除,保留NF.
圖1 代碼度量屬性相關性熱力圖Fig.1 Code metric characteristic correlation heatmap
經過篩選,最終保留了10個過程度量和4個代碼度量,如表4所示.
如表5所示,實驗數據集存在類不平衡的現象.為了減輕非平衡數據集對即時缺陷預測模型的性能造成的影響,本次實驗對數據集進行了欠采樣[43],即減少大類的數據樣本個數,以使包含缺陷的提交記錄與不包含缺陷的提交記錄數據量更加相近.同時,鑒于本次實驗包含較多特征屬性且數據集不平衡,實驗中首選了隨機森林作為機器分類學習模型.隨機森林分類模型是通過建立多個決策樹并將他們融合起來得到一個更加準確和穩(wěn)定的模型,是bagging 思想和隨機選擇特征的結合.隨機森林[44]構造了多個決策樹,當需要對某個樣本進行預測時,統(tǒng)計森林中的每棵樹對該樣本的預測結果,然后通過投票法從這些預測結果中選出最后的結果.其最大的優(yōu)點就是對于類別不平衡數據,隨機森林能夠平衡誤差,且不用降維也可以處理高維特征.
表5 實驗項目描述Table 5 Experimental systems description
為了證實隨機森林的適用性,本實驗也在邏輯回歸、向量空間機、樸素貝葉斯和多層感知器這幾種常見的機器分類模型上進行了測試,并采用了10折交叉驗證策略[45].該策略允許所有的觀察樣本都用于訓練和測試目的,而且已經在缺陷預測的上下文中被廣泛使用[46].該策略將原始數據集隨機劃分為10個大小相等的子集.在這10個子集中,一個被保留為訓練集,其余9個被用作訓練集.交叉驗證然后重復10次,允許10個子集中的每一個恰好成為測試集一次[45].實驗結果進一步證明了隨機森林的效果最好.
為了驗證測試異味對即時缺陷預測模型的有效性,本文將就以下3個問題展開實驗與結果分析:
RQ1:測試異味特征是否可以提高即時缺陷預測模型的性能?
RQ2:加入測試異味的即時預缺陷預測模型中各特征屬性對模型預測輸出的貢獻度如何?
RQ3:測試異味這一類特征屬性在不同項目缺陷預測的貢獻度上是否存在差別?
本文將通過5個在軟件開發(fā)領域應用廣泛且一直有版本更新的較為活躍的開源系統(tǒng)來驗證本次實驗設計的3個問題,所選系統(tǒng)的詳細信息如表5所示.選擇這5個系統(tǒng)的原因是:
1)本次實驗挖掘測試異味以及計算代碼結構度量的工具只適用于由Java語言編寫的項目,而這5個系統(tǒng)都是基于編程語言Java開發(fā)設計的.
2)這5個系統(tǒng)的量級大小不一,開發(fā)并投入實際應用以及版本更替的時長也不相同,提交記錄的數量也有很大差別,這有利于本文對模型跨項目的研究.
3)這5個系統(tǒng)提交記錄中包含缺陷的提交記錄的占比不同,且這5個系統(tǒng)的實際應用領域也互不相同,可以進一步驗證本文所提出的即時缺陷預測模型的泛用性.
本次實驗的流程主要分為3個步驟,分別是數據集的選擇和清洗、即時缺陷預測模型的構建以及結果數據的評估與分析,如圖2所示.
圖2 實驗流程Fig.2 Experiment process
4.2.1 數據的獲取及預處理
首先,通過Christoffer 等人[42]開發(fā)的系統(tǒng)分析工具Commit Guru,獲取到本次試驗所涉及的5個項目的過程度量指標數據集.
因為不同項目的開發(fā)時間長短不一,且包含的提交記錄數量較多,所以本文只選取了每個項目一段時間內的提交記錄,用于本次試驗研究.
之后,針對每個項目所選取的提交記錄,利用測試異味檢測工具,tsDetect[41]來挖掘每條提交記錄中Java文件包含的測試異味,因為本次實驗研究的對象為生產代碼,所以可以將那些存在測試異味但沒有對應的生產代碼文件的測試文件剔除.
同時,針對每條提交記錄中所涉及的Java文件,本文通過Chidamber和Kemerer[22]等人實驗中代碼結構指標的計算工具CK,計算出表1所示的代碼度量,因為CK也是在文件級輸出每個Java文件的結構指標,并用具體的數字表示,所以本文選擇用每條提交記錄中所有Java文件的代碼結構數據的均值,來表示該條提交記錄的代碼度量的數據指標.
4.2.2 即時缺陷預測模型的構建
在確定了本次實驗包含的軟件開發(fā)、軟件測試、軟件維護3個角度的特征屬性后,本文針對可能存在高度相關性的特征屬性進行了相關性分析,最終篩選得到了4個代碼度量和10個過程度量,結果如表4所示.
為了減輕因實驗數據集不平衡給實驗結果帶來的影響,實驗首先對獲取到的數據集進行了欠采樣處理[43],其次首選了隨機森林這一對非平衡數據集不敏感的機器分類模型,但是為了保證實驗結果的可靠性,本次實驗也在邏輯回歸,樸素貝葉斯,多層感知機等這類常見的分類模型上進行了測試,并采用了10折交叉驗證策略[44],測試結果證實了一開始的選擇,隨機森林的分類效果最好,被選作本次實驗的機器分類學習模型.
4.2.3 模型性能的評估與結果分析
本次實驗通過計算經典的性能指標,包括精度、召回率、F1值和AUC-ROC[47-50]來驗證測試異味對即時缺陷預測模型的有效性,并且評估本次實驗構建的即時缺陷預測模型的跨項目缺陷預測的性能.
實驗基于可解釋性人工智能算法SHAP[13]計算每個特征對預測結果的貢獻度,通過SHAP的3個特性,即局部精確性、允許缺失和一致性以及模擬式的計算思想,考慮各個特征組合關鍵詞對模型結果的影響,以滿足即時缺陷預測模型這類高精度復雜集成模型的解釋.
4.3.1 RQ1:即時缺陷預測模型的性能
為了回答RQ1,本文將實驗分為兩組,第一組實驗不添加測試異味作為特征屬性,記作BasePrediction,第二組實驗將測試異味作為特征屬性添加進即時缺陷預測模型中,記作tsBasePrediction.本文通過對比經典的性能指標,包括精度、召回率、F1值和AUC-ROC[47-50]的值來評估測試異味對即時缺陷預測模型的有效性.
精度Precision用于表示所有預測值為1的樣本中被正確預測的比例,如式(3)所示.其中TP表示真正例,即預測值是1,真實值是1的樣本;FP表示假正例,即預測值是1,真實值是0的樣本.
(3)
召回率Recall表示檢測率在所有實際值為1的樣本中被正確預測為1的比例,如式(4)所示.其中TP表示真正例,即預測值是1,真實值是1的樣本;FN表示假反例,即預測值是0,真實值是1的樣本.
(4)
F1值是統(tǒng)計學中用來衡量二分類模型精確度的一種指標.它同時兼顧了分類模型的精確率和召回率.F1值可以看作是模型精確率和召回率的一種調和平均,它的最大值是1,最小值是0,如式(5)所示.
(5)
ROC曲線是二值分類問題的一個評價指標.它是一個概率曲線,在不同的閾值下繪制TPR(真正例率)與FPR(假正例率)的關系圖,從本質上把“信號”與“噪聲”分開.AUC-ROC[47]的值即為ROC曲線下的面積,是分類器區(qū)分類的能力的度量,用作ROC曲線的總結.AUC-ROC的值越高,模型在區(qū)分正類和負類方面的性能越好(通常認為AUC-ROC值大于0.7時,分類預測模型的性能可評估為優(yōu)良[51]).
利用從5個系統(tǒng)中獲取到的相關特征屬性的數據集,對本次實驗構建的即時缺陷預測模型進行了驗證,結果如表6所示.
表6 模型性能對比Table 6 Model performance comparison
根據表6所示的數據結果可以看出本次實驗構建的即時缺陷預測模型的性能效果是較好的(AUC-ROC>0.7).沒有加入測試異味作為特征屬性的即時缺陷預測模型的精度最差的能到達到64.8%,最好的能達到77.7%,這說明本次試驗的模型在預測一個提交記錄是否有缺陷時,其預測結果最少也有近65%是正確的.而在加入了測試異味作為特征屬性后,即時缺陷預測模型對各項目提交記錄是否含有缺陷的預測精度最少提高了1.4%,最多提高了3.9%,同時即時缺陷預測模型的最差精度也由原來64.5%,提高到了68.7%.這一結果說明了測試異味在提高即時缺陷預測模型的預測精度方面是有一定正向作用的.
對于性能評估指Recall和F1值,可以發(fā)現不加入測試異味作為特征屬性時,模型的Recall和F1值最差也可分別達到64.4%和63.7%,這意味著該模型的預測結果最少也有64%以上是正確的,而在加入了測試異味作為特征屬性以后,模型的Recall有了0.8%-4%左右的提升,F1值有2.3%-4.6%左右的提升,同時模型的Recall和F1值最差也可分別達到66.7%和66.9%,總體上來看模型的Recall和F1值也有2.3%和3.2%的提升.針對分類器區(qū)分類的能力的度量,AUC-ROC值,可以發(fā)現從總體上看,在不加入測試異味作為特征屬性前,模型的AUC-ROC值最低為66.6%,而在加入了測試異味作為特征屬性之后,模型的AUC-ROC值最低為72.0%,有了5.4%的提升,從每個項目提交記錄的預測情況來看,在加入測試異味作為特征屬性之后,模型的AUC-ROC值分別有了2.5%-6.7%的提升,而這一結果也再次證明了將測試異味作為特征屬性加入到即時缺陷預測模型中,對于模型預測性能的提高是有效的.
4.3.2 RQ2:模型中各特征屬性的貢獻度排序
為了進一步探究測試異味是否可以作為有效的預測因子來提高即時缺陷預測模型,本文利用SHAP[13]對本次實驗構建的即時缺陷預測模型中各特征屬性對模型預測結果輸出的貢獻度進行了排序,結果如圖3所示.
圖3 各特征屬性的貢獻度排序Fig.3 Contribution ranking of each feature attribute
圖3是基于SHAP值的密度散點圖,其中SHAP值代表該特征屬性對模型預測輸出的影響的大小,密度散點圖中的一個點對應于研究中的一條提交記錄,點在x軸上的位置代表了該特征對模型預測該提交記錄是否含有缺陷的貢獻度,x軸上的值的絕對值越大,說明該特征對模型的預測輸出影響越大,而x軸上的值的正負代表了特征對模型預測輸出影響的正負,本次實驗中若SHAP值為正則說明該特征屬性提升了預測該條記錄有缺陷的可能性,若SHAP值為負則說明該特征屬性降低了預測該條記錄有缺陷的可能性.當多個點在x軸上同一位置著陸時,它們堆積起來以顯示密度.
圖3左邊展示的即為本次實驗模型中對模型預測結果貢獻度排在前20位的特征屬性的降序排列.可以看到,本次試驗構建的即時缺陷預測模型中對模型輸出影響最大的特征屬性是LD,對模型影響程度排在第20位的是ET,對模型預測輸出的貢獻度排在前20特征中測試異味共有6種,分別是ECT,UT,AR,GF,MNT,ET.其中對模型預測結果影響最大測試異味是ECT,從圖3中散點及其對應的著色分布來看,當測試異味ECT在某條提交記錄中的分布密度偏高時,ECT對模型預測該條提交記錄含有缺陷的影響要比總體貢獻度排在之前的Entropy要大,同樣情況的還有測試異味UT和GF,從它們的散點及著色分記錄中的分布密度偏高時,UT對模型預測該條提交記錄含有缺陷的影響要比總體貢獻度排在之前的DIT要大,GF對模型預測該條提交記錄含有缺陷的影響要比總體貢獻度排在之前的NS要大.這說明對于測試異味分布密度較高的提交記錄來說,開發(fā)人員給予測試異味更多的關注是有必要的,因為測試異味是可以作為一個有效的參考因素來分析預測該提交記錄是否含有缺陷.
4.3.3 RQ3:測試異味在跨項目中缺陷預測輸出的貢獻度的表現
為了探究測試異味在不同系統(tǒng)中對缺陷預測的貢獻度是否存在差異,本文研究了不同系統(tǒng)的提交記錄數據中測試異味這一類特征屬性對即時缺陷預測模型預測輸出的貢獻度排序是否不同,考慮到每個項目中的測試異味的分布情況可能不同,所以本文對每個項目中的測試異味的分布情況進行了統(tǒng)計,結果如表7所示.
表7 各項目提交記錄中的測試異味分布Table 7 Distribution of test smells in the commits of systems
其中每個項目中都會出現分布極其稀疏的測試異味種類,因為過分稀疏的數據對模型的影響很小,且可能對模型的性能造成影響,本次實驗直接刪除分布占比低于5%的特征屬性.例如ST在項目Crate中的分布占比僅為2.7%,對模型的貢獻率很小,所以在Crate這一項目的實驗中,刪除了ST這一特征屬性.
經過數據處理和實驗后,各項目中特征屬性的貢獻度排序如圖4-圖8所示.
圖4 Apache wicket的SAHP散點圖Fig.4 SHAP scatter plots of wicket
圖5 Apache tomcat的SAHP散點圖Fig.5 SHAP scatter plots of tomcat
圖6 Hibernate-validator的SAHP散點圖Fig.6 SHAP scatter plots of Hibernate-validator
圖7 Crate的SAHP散點圖Fig.7 SHAP scatter plots of Crate
圖8 Apache cassandra的SAHP散點圖Fig.8 SHAP scatter plots of cassandra
可以看到,不同的系統(tǒng)中,不同的特征屬性對模型預測結果的影響也是不同的.
對于系統(tǒng)Apache wicket,LD,NF,Entropy,EXP這4個特征屬性對模型預測一條提交記錄是否含有缺陷的影響是最大的,排在前4位.但是,當一條提交記錄中刪減的代碼行數(LD)或者變更的文件數(NF)過多時,LD和NF這兩個特征屬性對預測這條提交記錄是否含有缺陷的影響更大.同樣,對那些涉及了具有很長開發(fā)經歷的開發(fā)人員(EXP)的提交記錄來說,EXP對預測這條提交記錄是否含有缺陷的影響要大于代碼信息增益(Entropy).而對于這個系統(tǒng)中存在的測試異味,可以從圖4中看出,當UT的存在數量較多時,UT對模型預測該條提交記錄是否含有缺陷的影響比變更的文件數量(NF)的影響要大.同樣的,當LT這種測試異味的存在數量較多時,LT對模型預測該條提交記錄是否含有缺陷的影響比文件上一次涉及的變更數(NUC)要大.
對于系統(tǒng)Apache Tomcat,提交記錄中變更子系統(tǒng)數(NS)這一特征屬性對模型預測結果的總體影響要比UT這一測試異味的影響大,但是對于少數包含大量UT的提交記錄來說,UT對于模型預測結果的影響更大.
對于系統(tǒng)Hibernate-validator,提交記錄中文件的平均變更時間間隔(AGE)這一特征屬性對模型預測結果的影響總體上要大于MNT和ECT這兩種測試異味,但是對于具有較多的MNT和ECT分布的提交記錄來說,MNT和ECT對模型的預測輸出影響更大.
對于系統(tǒng)Crate,提交記錄中文件上一次涉及的變更數(NUC)這一特征屬性對模型預測結果的總體影響要比DA這一測試異味的影響大,但是對于少數包含大量DA的提交記錄來說,DA對于模型預測結果的影響更大.
對于系統(tǒng)Apache Cassandra,雖然測試異味這一角度的幾種特征屬性在對模型預測輸出的貢獻度排在最后幾位,但是當這幾種測試異味的分布密度較高時,它們對模型的預測輸出的影響要大于排在他們之前的提交記錄涉及的代碼變更行數(LT),提交記錄中代碼的對象類之間的耦合度(CBO)以及提交記錄涉及的變更子系統(tǒng)數(NS)這3個特征屬性.
根據對這5個系統(tǒng)實驗結果的分析,再一次證實了測試異味對即時缺陷預測模型的預測輸出的影響是不可忽略的,對于那些測試異味分布密度較高的系統(tǒng)來說,測試異味對缺陷預測的貢獻度要比傳統(tǒng)的代碼度量和過程度量更大.因此,開發(fā)人員在對軟件可能存在的缺陷進行判斷預測時,應對常見的測試異味類型給予一定的關注,當發(fā)現某些測試異味的分布密度較高時,在判斷其關聯的生產代碼是否存在缺陷時,將測試異味加入到缺陷預測的模型中,對提高模型性能是有一定幫助的.
首先,本次實驗只在5個項目上進行了實驗研究,這使得本次實驗構建的即時缺陷預測模型的穩(wěn)定性有待進一步的擴展實驗研究.其次是本次實驗由于實驗工具都是基于Java語言開發(fā)的,這使得實驗研究的對象也限制在了基于Java語言開發(fā)設計的開源系統(tǒng),這使得本次實驗構建的模型對于其他編程語言開發(fā)設計的項目的有效性有待進一步研究討論.
本次實驗研究中的數據都是通過相關的工具獲取的,測試異味是通過tsDetect[41]這一開源工具捕獲的,代碼度量則是通過CK[22]計算得到的,而過程度量以及提交記錄是否包含缺陷則是通過Commit Guru[42]獲得的,雖然這些工具的性能都經過人工驗證,但與實際情況相比還是會存在一定程度的誤差,使得本次的實驗數據會存在一定的錯漏,這會對本次實驗構建的模型的性能造成一定的影響.
本次實驗在5個項目上,實驗并對比了新模型與舊模型的性能,以探究測試異味對即時缺陷預測模型的有效性和差異性,以及跨項目后測試異味對缺陷預測的貢獻度是否存在差別.實驗結果顯示,加入測試異味后,模型的AUC_ROC值提升了2.5%-6.7%,精度提高1.4%-3.9%,召回率提高0.8%-4%,F1值提高2.3%-4.6%,這表明測試異味對提高即時缺陷預測模型的性能是有效的.根據可加性解釋模型SHAP[13]分析的各特征屬性對模型預測輸出的貢獻度的排序,貢獻度排在前20位的特征屬性中有6種測試異味,分別為ECT,UT,AR,GF,MNT,ET,其中ECT對模型輸出貢獻度排在第9位,而ET則排在第20位,這表明不同測試異味對缺陷預測的貢獻度是有差別.同時,不同的系統(tǒng)中的測試異味對模型預測輸出的貢獻度排序也存在較大差異,例如,系統(tǒng) Apache wicket中,UT和LT的貢獻度排在了第5和第10位,而在系統(tǒng)Apache tomcat中,UT和LT的貢獻度則排在了第18和第19位.
對于未來的工作,首先可以考慮將實驗的項目數量增加并且將范圍擴展到工業(yè)以及其他不同類別的系統(tǒng),以探究測試異味對即時缺陷預測模型有效性的普遍適用性.其次,本次實驗是在提交這一級別上進行的,之后將考慮在不同的粒度上開展實驗探究,如文件或者類一級別.最后,針對模型性能提高這一問題,將會考慮將人工智能AI加入到未來的實驗當中.