房泳珂 嵇海進 雷堯 楊珊 徐會艷
摘要:軟件缺陷預測技術是建立在軟件歷史信息基礎上的預測模型,判斷軟件模塊是否存在軟件缺陷,從而實現(xiàn)測試資源的優(yōu)化分配,實現(xiàn)軟件測試工作效率的提高。隨著軟件缺陷預測技術的快速發(fā)展,許多機器學習方法相繼被引入進來,以期提高軟件缺陷預測的能力。文章針對基于機器學習的軟件缺陷預測方法,系統(tǒng)地進行了分類和總結。
關鍵詞:軟件測試;軟件缺陷預測;項目內(nèi)缺陷預測;跨項目缺陷預測;機器學習
中圖分類號:TP311.5? ? ? 文獻標識碼:A
文章編號:1009-3044(2022)25-0047-02
開放科學(資源服務) 標識碼(OSID) :
1 概述
隨著軟件技術的發(fā)展,軟件系統(tǒng)已經(jīng)深入日常生活的方方面面,在各行各業(yè)扮演著越來越重要的角色。然而隨著軟件規(guī)模的不斷擴大和軟件功能的不斷增強,軟件變得越來越復雜,軟件系統(tǒng)中所存在的軟件缺陷也越來越多,同時由于項目經(jīng)費、項目時間等因素的限制,對軟件項目進行詳細、全面的測試也就變得越來越困難,給軟件測試帶來了巨大的挑戰(zhàn),如何提高軟件測試的效率成為當務之急。
軟件缺陷預測技術[1]正是解決上述問題的有效方法,它通過研究軟件代碼和開發(fā)過程中產(chǎn)生的歷史信息,分析和建立預測模型,在軟件測試之前對各個軟件模塊進行預測,并基于預測的結果進行測試資源的合理分配,從而達到提高軟件測試效率的目的。鑒于軟件缺陷預測技術對于軟件測試的重要實踐意義,許多學者積極開展相關研究,目前軟件缺陷預測技術已經(jīng)成為軟件工程學科一個熱點[2]。
基于機器學習的軟件缺陷預測方法在2005年第一個軟件缺陷數(shù)據(jù)倉庫PROMISE 公布之后,得到了進一步的發(fā)展[3]。本文針對基于機器學習的軟件缺陷預測方法,系統(tǒng)地進行了分類和總結,并分析了這些方法存在的不足。
2? 軟件缺陷預測技術及其分類
軟件缺陷預測是在軟件測試之前進行的,它通過研究軟件代碼和開發(fā)過程中產(chǎn)生的歷史信息,分析和建立預測模型,具體的預測過程如圖1 所示。
第一步:在軟件缺陷預測模型的建立過程中,首先要提取歷史軟件模塊的度量元信息(也就是特征) 和歷史軟件模塊的缺陷類別(有缺陷或者無缺陷) ,可以作為軟件缺陷預測模型的訓練數(shù)據(jù)集。這里的軟件模塊可以是一個文件、一個包或者一個函數(shù)等。
第二步:預處理。主要采用特征工程等方法對軟件的歷史信息進行預處理。
第三步:建立預測模型。采用機器學習方法進行模型的構建,并對預測模型進行訓練。
第四步:對新的軟件模型模塊進行預測。具體來說就是提取新軟件模塊的度量元(特征) ,并采用軟件缺陷預測模型判斷新的軟件模塊的缺陷類別(有缺陷或者無缺陷) 。
根據(jù)訓練數(shù)據(jù)的來源不同,分為項目內(nèi)缺陷預測和跨項目缺陷預測兩類[3]。
3 軟件缺陷預測方法
3.1 項目內(nèi)缺陷預測方法
項目內(nèi)缺陷預測方法采用的訓練數(shù)據(jù)是本項目歷史版本中軟件模塊的數(shù)據(jù)信息,即訓練數(shù)據(jù)和測試數(shù)據(jù)都屬于同一個軟件項目,訓練數(shù)據(jù)和測試數(shù)據(jù)的樣本分布基本是相同的。項目內(nèi)缺陷預測方法是早期傳統(tǒng)軟件缺陷預測的內(nèi)容,研究人員提出了很多缺陷預測方法,下面就從不相關和冗余特征處理、分類不平衡處理和分類器構建這三個方面進行總結分析。
3.1.1 不相關和冗余特征處理
不相關和冗余特征也會降低缺陷預測模型的預測效果。為了降低其對預測效果的影響,通常有三種方法。
1) 特征加權方法
訓練數(shù)據(jù)集中的不同特征與類別標簽的關聯(lián)度是不同的,有些特征和類別特征甚至是沒有任何關聯(lián)的。為了體現(xiàn)不同特征對預測效果的影響,特征加權方法通過為每個特征分配不同的權值來體現(xiàn)特征和類別標簽的關聯(lián)度,關聯(lián)度越高的特征,其權值越高,關聯(lián)度越低的特征,其權值越低。其中衡量特征和類別標簽關聯(lián)度的方法包括卡方、信息增益、信息增益率等方法。比如,Zhou等人[4]通過卡方來衡量特征和類別信息的關聯(lián)度,并為每個特征分配不同的權值,實驗結果表明該方法能夠有效提高軟件缺陷預測的效果。
2) 特征選擇方法
該方法通過選擇若干個與類別標簽關聯(lián)度最高的特征,去除不相關或者冗余的特征來提高軟件缺陷預測的效果。比如Xu等人[5]采用基于ReliefF的聚類方法進行特征選擇,經(jīng)過選擇原特征集的特征子集,進行軟件缺陷預測并在NASA數(shù)據(jù)集上進行了實驗,實驗結果表明該方法能夠有效提高軟件缺陷預測的效果。
3) 特征提取方法
特征提取方法不同于特征加權方法,特征提取方法是一種降維算法,同時該方法能夠保留原有訓練數(shù)據(jù)集的原始結構,以達到去除不相關和冗余特征的目的。比如,Xu等人[6]運用核主成分分析的方法進行特征提取,并取得了較好的預測效果。
3.1.2 分類不平衡處理
分類不平衡問題指的是在軟件缺陷數(shù)據(jù)集中,無缺陷軟件模塊的數(shù)量遠遠大于有缺陷模塊的數(shù)量,這種分類不平衡問題的存在,會影響軟件缺陷預測的效果。常見解決辦法主要有三種:1) 過采樣;2) 欠采用;3) 合成少數(shù)類過采樣技術。過采樣技術主要是指隨機復制少數(shù)類樣本,以達到分類平衡的目的;欠采樣主要通過隨機刪除多數(shù)類樣本的方式來達到分類平衡的目的;合成少數(shù)類過采樣技術,主要是指在近鄰之間插入合成的少數(shù)類樣本,以防止過擬合。
3.1.3 分類器的構建
分類器的構建是軟件缺陷預測模型的重要組成部分,許多機器學習方法被引入軟件缺陷預測中來用以分類器的構建,以提高軟件缺陷預測的效果。常用分類器如樸素貝葉斯、支持向量機、邏輯回歸和隨機森林等方法。同時許多機器學習領域新技術被引入軟件缺陷預測中來,如Nevendra等人[7]在項目內(nèi)缺陷預測的預測模型構建中,將深度學習方法引入進來,并通過實驗證明了所提方法的有效性。
3.2? 跨項目缺陷預測方法
項目內(nèi)缺陷預測模型的訓練數(shù)據(jù)集和測試數(shù)據(jù)都來自同一個項目,當需要對一個新項目或者缺乏歷史數(shù)據(jù)的項目進行缺陷預測時,傳統(tǒng)的項目內(nèi)缺陷預測方法就不再可行。研究人員提出使用其他項目的歷史數(shù)據(jù)對新項目進行缺陷預測成為一種替代方案,也就是跨項目缺陷預測。
跨項目缺陷預測和項目內(nèi)缺陷預測相比,主要是訓練數(shù)據(jù)集和測試數(shù)據(jù)集的來源不同,因此數(shù)據(jù)預處理方法與項目內(nèi)缺陷預測中的數(shù)據(jù)預處理方法有所不同。如Liu等人[8]提出了一種兩階段的跨項目缺陷預測方法,該方法設計了一種源項目評價方法,主要用來篩選和目標項目高度相似的項目,以獲取訓練數(shù)據(jù)集,然后基于這個訓練數(shù)據(jù)集,采用遷移成分分析的擴展方法構建了兩個預測模型,最后綜合兩個模型的預測結果作為最終的預測結果,實驗結果表明了該方法的有效性。
在模型建立的其他方面,如不相關和冗余特征的處理,分類不平衡問題和分類器的構建等,和項目內(nèi)方法類似。
4 結論
本文從項目內(nèi)和跨項目兩個方面對軟件缺陷預測技術進行了分析與總結,其中每個方面又從不相關和冗余特征處理,分類不平衡處理和分類器的構建三個角度進行描述,并詳細分析了每個分類中缺陷預測模型的基本原理,為以后的研究奠定基礎,具有一定實用價值。
參考文獻:
[1] 滕俊元,高猛,鄭小萌,等.噪聲可容忍的軟件缺陷預測特征選擇方法[J].計算機科學,2021,48(12):131-139.
[2] Liu C,Yang D,Xia X,et al.A two-phase transfer learning model for cross-project defect prediction[J].Information and Software Technology,2018,107:125-136.
[3] 于巧.基于機器學習的軟件缺陷預測方法研究[D].徐州:中國礦業(yè)大學,2017.
[4] Zhou L J,Li R,Zhang S D,et al.Imbalanced data processing model for software defect prediction[J].Wireless Personal Communications,2018,102(2):937-950.
[5] Xu X, Chen W, Wang X. RFC: a feature selection algorithm for software defect prediction[J]. Journal of Systems Engineering and Electronics,2021,32(2): 389-398.
[6] Xu Z,Liu J,Luo X P,et al.Software defect prediction based on kernel PCA and weighted extreme learning machine[J].Information and Software Technology,2018,106:182-200.
[7] Nevendra M,Singh P.Software Defect Prediction using Deep Learning[J]. Acta Polytechnica Hungarica,2021,18(10):173-189.
【通聯(lián)編輯:唐一東】