天天看點

《中國人工智能學會通訊》——8.43 基于缺陷标注挖掘軟體缺陷

除通過描述程式的正常模式以發現軟體缺陷外,另一類有效的軟體缺陷挖掘技術則是通過直接對帶有人工缺陷标注的程式子產品進行學習模組化,建立從程式子產品的特征表示到軟體缺陷的映射關系,以預測給定程式子產品的是否可能包含缺陷。

基于缺陷标注挖掘軟體缺陷的一般流程如圖 1所示。首先人工對軟體源代碼進行詳細軟體測試,獲得每個子產品的缺陷情況标注。然後,利用軟體度量 (software metric) [8] 技術提取多種與軟體子產品的缺陷相關的代碼級統計名額 ( 如代碼長度、代碼分支數、代碼的圈複雜度等 ) 作為描述軟體子產品的特征,進而将程式代碼轉化為一組特征向量。基于特征向量表示的子產品及其缺陷情況标注,通過監督學習得到預測模型,對新的子產品的缺陷情況進行預測。

《中國人工智能學會通訊》——8.43 基于缺陷标注挖掘軟體缺陷

特征與學習算法

基于缺陷标注挖掘軟體缺陷的模組化過程有兩個關鍵步驟,第一,如何提取适合于預測子產品缺陷情況的特征;第二,如何選取合适的學習方法。 在特征提取方面,Menzies et al [9] 提出利用代碼的靜态特征 ( 包括 LOC ( 代碼長度 )、McCabe 複雜度、Halstead 複雜度等 ) 來描述軟體子產品用于缺陷挖掘。在此基礎上,Zimmermann et al [10] 提出了圖結構特征。Kim et al [11] 提出了軟體時空局部性特征,并基于此預測軟體子產品的缺陷情況。除設計和使用新的軟體度量作為特征以外,還可以基于現有特征建構更有利于進行軟體缺陷挖掘的特征[12-13] ,或是從源代碼出發直接學習新型特征表示[14] 。

在學習算法的選取方面,研究者們早期對不同的學習算法在軟體缺陷挖掘任務上的表現進行了研究,使用的學習算法包括樸素貝葉斯分類器[15] 、邏輯回歸[16] 、神經網絡 [17]等。Lessmann et al [18] 在11 個基準缺陷預測的資料集 NASA 上,通過大量實驗對比了 19 個預測模型方法 (SVM、邏輯回歸、決策樹、樸素貝葉斯等 ),揭示出沒有任何算法在所有資料上都一緻優于其他算法,進而也為類似研究畫上了句号。

應對昂貴的人工标注

由于軟體子產品的缺陷标注需要程式員對代碼進行詳細測試或人工代碼檢查,會消耗大量軟體品質保障資源。對于一個剛完成的開發軟體項目通常僅能獲得極少量的缺陷标注。利用如此少量的資料進行學習模組化,難以獲得良好的性能。

為 緩 解昂貴人工缺陷标注導緻訓練樣本不足這一問題,一種思路是利用有較多缺陷标注積累的早期版本或者軟體項目來擴充訓練資料。然而,由于發現不同項目的代碼特征分布相差大,直接進行跨軟體項目的缺陷挖掘性能很差[19] 。

針對這一問題,Turhan et al [20] 利用最近鄰方法從其他公司的缺陷資料中篩選出與本項目資料分布相似的子產品,并利用這些子產品來幫助預測目前項目的缺陷,獲得了性能的改善;Nam et al [21] 基于遷移學習技術将其他項目的缺陷資訊映射到目前軟體項目并加以利用,提升了跨項目缺陷預測的性能。

除利用其他項目的曆史資料資源外,另一種思路是充分利用待預測的軟體子產品中蘊涵的分布資訊來輔助提升學習性能。Seliya et al [22-23] 最早将半監督學習技術引入軟體缺陷挖掘 , 他們使用基于限制的 k- 均值算法來對目前的軟體子產品資料進行半監督聚類,并據此标注軟體子產品的缺陷情況;Lu et al [24]使用了一種基于自我訓練的半監督分類方法對軟體缺陷進行預測,在此基礎上,通過對軟體子產品資料進行降維,進而獲得更好的性能[25] 。由于在實際應用中,包含軟體缺陷的子產品數量往往遠少于正常子產品數量。Jiang et al [26] 讨論了缺陷子產品分布不平衡對學習性能造成的影響,并提出了一種的能夠應對資料分布不平衡的半監督學習方法 ROCUS,較直接進行監督學習性能提升超過了 70%。Li et al [27]提出代價敏感半監督軟體缺陷預測方法,能夠在高風險應用場景中更加有效地識别高風險缺陷。為進一步降低人工标注開銷,Li et al [28] 在半監督學習中進一步引入主動學習機制,通過主動挑選出最困難的子產品獲得人工缺陷标注并加以學習,在有限測試資源投放的情況下獲得了盡可能大的性能提升。

面向更多實際問題

在基于缺陷标注的軟體缺陷挖掘中,除需要有效應對昂貴人工标注為學習模組化帶來的困難,還需要考慮其他的各種實際問題,以提升軟體缺陷挖掘在實際軟體開發中的可用性。Jiang et al [29] 指出不同開發人員的編碼習慣和風格會導緻缺陷模式各異,是以需要針對不同開發人員建構預測模型,進而獲得更優的缺陷預測性能。Tantithamthavorn etal [30] 研究了軟體資料所包含噪聲對缺陷預測結果的影響。Peters et al [31] 研究了跨項目挖掘中的隐私保護問題,提出了 LACE2 模型減少資料分享帶來的隐私洩露隐患。Tan et al [32] 提出了軟體缺陷挖掘的評估和模組化應該考慮時序關系。

繼續閱讀