摘要:為了能盡早發(fā)現(xiàn)軟件中存在的缺陷,使用傳統(tǒng)的機器學(xué)習(xí)方法來預(yù)測軟件模塊的缺陷傾向性,選取了NASA公開數(shù)據(jù)集中的部分?jǐn)?shù)據(jù)集,針對軟件缺陷預(yù)測中類不平衡的問題,分別采取了隨機欠采樣和隨機過采樣的方案,再使用邏輯回歸算法和隨機森林算法分別對數(shù)據(jù)集進行訓(xùn)練和預(yù)測,使用了查準(zhǔn)率(Precision)、查全率(Recall)、ROC曲線下面積(AUC)作為模型的評價指標(biāo),并給出了對比實驗的結(jié)果。
關(guān)鍵詞:機器學(xué)習(xí);軟件缺陷預(yù)測;傾向性預(yù)測;邏輯回歸;隨機森林
中圖分類號:TP311.5? ? ? 文獻標(biāo)識碼:A
文章編號:1009-3044(2022)07-0067-04
1 引言
隨著軟件行業(yè)的快速發(fā)展,軟件數(shù)量劇增,軟件的形式趨于多樣化,而且軟件的復(fù)雜程度不斷提高、規(guī)模不斷增大,軟件開發(fā)人員人數(shù)增多,軟件質(zhì)量問題日益突出。軟件缺陷是影響軟件質(zhì)量的關(guān)鍵因素,而軟件質(zhì)量問題又是導(dǎo)致軟件危機的重要原因。軟件缺陷是指軟件中存在的錯誤或故障,在軟件的開發(fā)過程中難免會在軟件產(chǎn)品中隱藏許多缺陷,這些缺陷有可能會導(dǎo)致軟件系統(tǒng)不能正常運行,嚴(yán)重的甚至?xí)?dǎo)致財產(chǎn)、人身安全的重大損失。
如果能盡早發(fā)現(xiàn)軟件中存在的錯誤并盡早修正這些錯誤,就可以避免在實際運行時發(fā)生錯誤而導(dǎo)致的損失,而且能減少開發(fā)的成本和時間,提高軟件質(zhì)量,減少軟件危機帶來的影響。如何充分做好軟件的測試工作,保障軟件質(zhì)量,提高軟件的可靠性,是軟件工程中的一個重要研究課題。
隨著人工智能技術(shù)的發(fā)展,如果能在傳統(tǒng)的軟件工程方法學(xué)中結(jié)合機器學(xué)習(xí)及深度學(xué)習(xí)等先進的技術(shù)來預(yù)測軟件缺陷,盡早地預(yù)測出軟件中哪些模塊可能存在缺陷、缺陷數(shù)量、缺陷的嚴(yán)重程度等,就可以提高軟件測試的智能化程度,給軟件質(zhì)量提供有力的保障,并在一定程度上緩解軟件危機。在企業(yè)的實際應(yīng)用中,通過機器學(xué)習(xí)技術(shù)來預(yù)測軟件缺陷,通過對軟件缺陷的嚴(yán)重程度進行排序,優(yōu)先處理較嚴(yán)重的軟件缺陷,就可以在有限的時間、成本、人力等資源限制之內(nèi),優(yōu)化資源的分配,提高軟件測試的效率及效果,提升軟件質(zhì)量,節(jié)約企業(yè)的成本,提高項目的成功率。
軟件缺陷預(yù)測是軟件工程領(lǐng)域的熱點問題,國內(nèi)外眾多學(xué)者對軟件缺陷的預(yù)測進行了研究,提出了多種研究方法并取得了豐富的研究成果,比較常見的技術(shù)是使用統(tǒng)計學(xué)和機器學(xué)習(xí)(包括深度學(xué)習(xí))的技術(shù)來進行軟件缺陷預(yù)測[1]。
預(yù)測軟件模塊缺陷的傾向性就是預(yù)測軟件模塊中是否存在軟件缺陷,這是一個二分類問題。在預(yù)測軟件模塊缺陷傾向性時,常用的算法有邏輯回歸、SVM(支持向量機)、貝葉斯網(wǎng)絡(luò)、決策樹、集成學(xué)習(xí)、神經(jīng)網(wǎng)絡(luò)等有監(jiān)督學(xué)習(xí)算法,K-means、譜聚類等無監(jiān)督學(xué)習(xí)算法,基于圖、主動半監(jiān)督學(xué)習(xí)、半監(jiān)督字典學(xué)習(xí)方法等半監(jiān)督學(xué)習(xí)算法[2]。
目前已經(jīng)有一些公開的軟件缺陷庫可供研究,但是這些數(shù)據(jù)集中普遍樣本數(shù)較少,且在數(shù)據(jù)集中存在嚴(yán)重的類不平衡問題,因此本文主要采用傳統(tǒng)的機器學(xué)習(xí)方法來研究軟件缺陷的傾向性預(yù)測的問題,并對比各機器學(xué)習(xí)算法的實驗結(jié)果。
2 方案設(shè)計
方案設(shè)計的總體思路是先選取合適的數(shù)據(jù)集,在程序中讀取數(shù)據(jù)集中的數(shù)據(jù),使用數(shù)據(jù)可視化等方法和手段去觀察和分析數(shù)據(jù)集中樣本的情況,例如樣本是否存在缺失值、異常值,是否存在類不平衡的問題等。根據(jù)觀察的結(jié)果對讀取的數(shù)據(jù)進行預(yù)處理,如果存在缺失值和異常值的情況,則對缺失值進行填充,異常值進行刪除或者是根據(jù)一定的策略,用均值或上下樣本的值進行替換;如果樣本中存在類不平衡的問題,則需要對樣本進行上采樣或下采樣,使得數(shù)據(jù)集中的樣本基本達到類平衡。之后根據(jù)具體的問題選擇合適的機器學(xué)習(xí)模型及模型評價指標(biāo),對數(shù)據(jù)集進行劃分之后,使用訓(xùn)練集對機器學(xué)習(xí)模型進行訓(xùn)練,使用驗證集調(diào)整模型參數(shù),最后使用測試集對模型的效果進行評價。通過對比模型的評價指標(biāo)得分,從中選取最適合的機器學(xué)習(xí)模型來對實際應(yīng)用中軟件的缺陷傾向性進行預(yù)測。
2.1 數(shù)據(jù)集
軟件缺陷數(shù)據(jù)集按來源可分為商業(yè)數(shù)據(jù)集和公共數(shù)據(jù)集這兩大類。因為商業(yè)數(shù)據(jù)集一般不易獲得,因此研究人員常用的公共軟件缺陷數(shù)據(jù)集,包括NASA、PROMISE等軟件缺陷數(shù)據(jù)集。使用公共數(shù)據(jù)來進行研究,有利于實驗復(fù)現(xiàn)。
文中使用的數(shù)據(jù)集是NASA軟件缺陷數(shù)據(jù)集,從中選取了12個數(shù)據(jù)集作為實驗數(shù)據(jù)。在NASA軟件缺陷數(shù)據(jù)集中,每個無缺陷的模塊對應(yīng)一條標(biāo)記為無缺陷的樣本,每個有缺陷的模塊對應(yīng)一條標(biāo)記為有缺陷樣本。通過對這些數(shù)據(jù)集中的樣本進行統(tǒng)計分析,得到每個數(shù)據(jù)集中的樣本數(shù)、特征數(shù)、無缺陷模塊數(shù)、有缺陷模塊數(shù)以及缺陷率如表1所示。
根據(jù)帕累托法則,在軟件中,約有80%的錯誤集中在20%的代碼中,因而在大部分的軟件缺陷數(shù)據(jù)集中,大部分模塊是無缺陷模塊,只有少部分模塊是有缺陷模塊,并且無缺陷模塊的數(shù)量要遠大于有缺陷的模塊。從表1中的12個軟件缺陷數(shù)據(jù)集的統(tǒng)計數(shù)據(jù)中也可以較直觀地看出,在NASA大部分的軟件缺陷數(shù)據(jù)集中,無缺陷樣本數(shù)要遠大于有缺陷樣本數(shù)。因此,在軟件缺陷的預(yù)測問題中,類不平衡的問題格外突出。在數(shù)據(jù)集中存在類不平衡,就會產(chǎn)生誤報和漏報的問題。在進行軟件缺陷預(yù)測時,將有缺陷樣本預(yù)測為無缺陷樣本,就會導(dǎo)致漏報;而將無缺陷樣本預(yù)測為有缺陷樣本,就會產(chǎn)生誤報。而漏報和誤報的代價是不同的,誤報會導(dǎo)致在測試時增加測試人員、測試時間等成本,而漏報則會在軟件交付給客戶之后產(chǎn)生不可預(yù)計的后果。因此,需要在軟件缺陷預(yù)測的過程中處理類不平衡的問題。
2.2 數(shù)據(jù)預(yù)處理
數(shù)據(jù)預(yù)處理部分主要包括異常值處理、降維處理、類不平衡處理、數(shù)據(jù)差異處理等。異常值處理又包括異常值的檢測和異常值處理。異常值的檢測可以通過可視化的方法來初步判斷哪些是異常值,常用的工具有散點圖、箱線圖等。異常值的處理有刪除、填充等方式,可以根據(jù)閾值將異常值刪除,或用上下樣本的正常值進行填充。
文中首先對數(shù)據(jù)集中的樣本進行缺失值、異常值、標(biāo)準(zhǔn)化等常規(guī)的預(yù)處理之后,再根據(jù)軟件缺陷預(yù)測問題中類不平衡的問題,在數(shù)據(jù)層面上再對數(shù)據(jù)進行進一步的處理。
在處理類不平衡問題時,目前的研究主要從數(shù)據(jù)層面和算法層面來處理[3]。從數(shù)據(jù)層面處理類不平衡問題,主要有抽樣法和數(shù)據(jù)集劃分法等。在算法層面處理類不平衡問題,主要有代價敏感法、集成學(xué)習(xí)法、閾值移動法等。本文采用隨機過采樣和隨機欠采樣的方法來處理軟件缺陷數(shù)據(jù)集中類的不平衡問題,分別通過隨機過采樣和隨機欠采樣的方式獲取兩個處理之后的數(shù)據(jù)集,再用相同的模型去進行訓(xùn)練,然后比較兩種方案的實驗結(jié)果。
在隨機欠采樣方案中,首先計算出數(shù)據(jù)集中標(biāo)記為有缺陷樣本的數(shù)量,然后在標(biāo)記為無缺陷的樣本中,隨機選取與有缺陷樣本同樣數(shù)量的樣本,再將有缺陷樣本和無缺陷樣本進行組合得到下采樣之后的數(shù)據(jù),在這個基礎(chǔ)上進行模型的訓(xùn)練與預(yù)測。
在隨機過采樣方案中,采用的是SMOTE過采樣技術(shù),使用SMOTE算法來生成新的標(biāo)記為有缺陷的樣本,與之前的樣本進行合并,從而得到隨機上采樣之后的數(shù)據(jù)集,達到類之間的基本平衡。
2.3 選取評價指標(biāo)
預(yù)測軟件缺陷傾向性是一個二分類問題,在分類問題中評價模型預(yù)測性能時常用的評價指標(biāo)有Accuracy(準(zhǔn)確率)、Precision(查準(zhǔn)率)、Recall(查全率)、AUC(ROC曲線下面積)等[4]。本文選取Precision(查準(zhǔn)率)、Recall(查全率)、AUC(ROC曲線下面積)作為模型的評價指標(biāo)。
對于二分類問題,分類結(jié)果常用混淆矩陣來表示,如表2所示。
其中TP代表真正例的數(shù)量,F(xiàn)P代表假正例的數(shù)量,TN代表正反例的數(shù)量,F(xiàn)N代表假反例的數(shù)量。
查準(zhǔn)率Precision表示在所有預(yù)測為正例的樣本中,真正例的比例。其定義如式(1)所示:
查全率Recall表示在所有正樣本中,預(yù)測正確的比例。其定義如式(2)所示:
把數(shù)據(jù)集中標(biāo)記為無缺陷的軟件模塊作為正例,標(biāo)記為有缺陷的軟件模塊作為反例,則P表示在所有預(yù)測為無缺陷樣本中,標(biāo)記為無缺陷樣本的比例。R表示在所有標(biāo)記為無缺陷樣本中,將標(biāo)記為無缺陷樣本預(yù)測為無缺陷樣本的比例。
因為在進行軟件缺陷預(yù)測時,需要比較多個學(xué)習(xí)器的性能,因此選取了AUC作為模型的一個評價指標(biāo)。在進行多個學(xué)習(xí)器性能的比較時,常用的指標(biāo)是AUC(ROC曲線下面積)。ROC曲線是以“真正例率”和“假正例率”作為坐標(biāo)系的縱軸和橫軸進行繪制,AUC代表ROC曲線下的面積。AUC越大,則學(xué)習(xí)器的性能越好。
2.4 邏輯回歸模型
邏輯回歸(Logistic Regression)是做分類任務(wù)時一種比較基礎(chǔ)的機器學(xué)習(xí)算法,因為軟件缺陷傾向性問題是一個二分類問題,因此可以使用邏輯回歸模型去解決軟件傾向性預(yù)測的問題。
在線性回歸模型中,使用輸入樣本的特性的線性組合來產(chǎn)生預(yù)測值,如式(3)所示:
在二分類問題中,在線性回歸模型的基礎(chǔ)上,邏輯回歸模型中使用了Sigmoid函數(shù)將線性回歸模型中得到的預(yù)測值映射到[0,1]區(qū)間,完成了從預(yù)測值到概率值的轉(zhuǎn)化,從而可以得到相應(yīng)類別的預(yù)測概率值。Sigmoid函數(shù)如式(4)所示:
邏輯回歸模型可以直接對樣本屬于各類別的可能性進行建模,并且得到各類別相應(yīng)的概率預(yù)測。
2.5 隨機森林模型
隨機森林(Random Forest)是一種集成學(xué)習(xí)算法,以決策樹作為基學(xué)習(xí)器,使用Bagging進行集成,構(gòu)建出泛化能力更強的學(xué)習(xí)器。隨機森林由多棵決策樹組成,每棵決策樹從樣本的屬性集合中,隨機選擇一個包含k個屬性的子集,再從中選出最優(yōu)屬性用于劃分,最后在預(yù)測分類時,根據(jù)每棵樹的結(jié)果來投票決定樣本所屬的類別。隨機森林算法比較簡單,也有不錯的性能表現(xiàn)。
文中選取了以上兩種傳統(tǒng)機器學(xué)習(xí)算法來建立軟件缺陷的預(yù)測模型,并對比兩種算法在兩種采樣方案中的性能。
3 實驗結(jié)果分析
實驗在Anaconda3環(huán)境下,采用Python語言編寫,完成程序的編寫和調(diào)試。首先對數(shù)據(jù)集按照上采樣和下采樣兩種方案進行處理,在兩種方案下重新構(gòu)造類平衡的數(shù)據(jù)集,然后將新構(gòu)造的數(shù)據(jù)集劃分為訓(xùn)練集和測試集,分別使用了邏輯回歸算法和隨機森林算法使用訓(xùn)練集對模型進行訓(xùn)練,使用測試集來進行預(yù)測得到最終預(yù)測結(jié)果,對預(yù)測結(jié)果使用之前選定的Precision(查準(zhǔn)率)、Recall(查全率)、AUC(ROC曲線下面積)等指標(biāo)進行評分,并對實驗的結(jié)果進行對比分析。
3.1 隨機欠采樣方案
在隨機欠采樣方案中,在標(biāo)記為無缺陷的樣本中,隨機選取與有缺陷樣本同樣數(shù)量的樣本,再將有缺陷樣本和無缺陷樣本進行組合,得到新的類平衡的數(shù)據(jù)集[5]。由于軟件缺陷數(shù)據(jù)集中存在類不平衡問題,標(biāo)記為無缺陷樣本數(shù)要相對多于標(biāo)記為有缺陷樣本數(shù),因此得到新數(shù)據(jù)集中的樣本數(shù)就會較少。
3.2 隨機過采樣方案
在隨機過采樣方案中,使用SMOTE算法[6],對標(biāo)記為有缺陷的少數(shù)樣本進行分析,生成新的標(biāo)記為有缺陷的樣本,與原先的標(biāo)記為無缺陷樣本合并為新的類平衡的數(shù)據(jù)集,在此基礎(chǔ)上進行模型的訓(xùn)練。由于標(biāo)記為無缺陷樣本數(shù)量較多,因此合成之后的新數(shù)據(jù)集中的樣本數(shù)會增多。
3.3 實驗結(jié)果分析
根據(jù)實驗結(jié)果數(shù)據(jù),繪制出Recall值對比的折線圖如圖1。
繪制出Precision值對比的折線圖如圖2所示。
從實驗結(jié)果可以看出,隨機上采樣方案的總體性能優(yōu)于隨機下采樣方案。這是由于隨機欠采樣生成的新數(shù)據(jù)集樣本數(shù)量較少,模型訓(xùn)練不充分,存在欠擬合現(xiàn)象。而在隨機過采樣方案中,合成了新的標(biāo)記為有缺陷的樣本,新的樣本集數(shù)量增多,減少了模型欠擬合的風(fēng)險。
從總體上看,隨機森林算法總體上優(yōu)于邏輯回歸算法。由于隨機森林算法采用的是集成學(xué)習(xí)算法,集成了多個基學(xué)習(xí)器,因此泛化能力更強,在查準(zhǔn)率Precision上比邏輯回歸算法表現(xiàn)更好。
4 結(jié)束語
軟件缺陷預(yù)測是軟件工程領(lǐng)域的熱點問題,主要從軟件模塊的缺陷傾向性、軟件模塊中缺陷數(shù)量、軟件模塊中缺陷的嚴(yán)重程度等方面來對軟件缺陷進行預(yù)測。
文中主要研究了軟件缺陷傾向性預(yù)測的問題。針對目前常見的公開軟件缺陷數(shù)據(jù)集中數(shù)據(jù)樣本數(shù)量較少的現(xiàn)狀,采取了一些經(jīng)典的機器學(xué)習(xí)算法,如邏輯回歸算法、隨機森林算法來對軟件模塊的缺陷傾向性進行預(yù)測。對于在軟件缺陷數(shù)據(jù)集中存在嚴(yán)重類不平衡的問題,分別采取了隨機上采樣和隨機下采樣的方案生成新的數(shù)據(jù)集,通過實驗對比這兩種方案的性能表現(xiàn)。在選擇模型的評價指標(biāo)時,使用了分類問題中常用的一些指標(biāo),如精確率(Precision)、召回率(Recall)、AUC(Area Under ROC Curve)等作為模型的評價指標(biāo),并給出了不同的采樣方案、不同的算法對比實驗的結(jié)果。
在后續(xù)的工作中,將繼續(xù)研究如何使用傳統(tǒng)的機器學(xué)習(xí)方法來預(yù)測軟件模塊中存在的缺陷數(shù)量,以及在有缺陷的模塊中缺陷的嚴(yán)重程度,并進一步研究如何更好地解決軟件缺陷預(yù)測問題中存在的嚴(yán)重類不平衡問題。
參考文獻:
[1] 宮麗娜,姜淑娟,姜麗.軟件缺陷預(yù)測技術(shù)研究進展[J].軟件學(xué)報,2019,30(10):3090-3114.
[2] 吳方君.靜態(tài)軟件缺陷預(yù)測研究進展[J].計算機科學(xué)與探索,2019,13(10):1621-1637.
[3] 劉文英,林亞林,李克文,等.一種軟件缺陷不平衡數(shù)據(jù)分類新方法[J].山東科技大學(xué)學(xué)報(自然科學(xué)版),2021,40(2):84-94.
[4] 葛修婷,潘婭.機器學(xué)習(xí)技術(shù)在軟件測試領(lǐng)域的應(yīng)用[J].西南科技大學(xué)學(xué)報,2018,33(4):90-97.
[5] 李冉,周麗娟,王華.面向類不平衡數(shù)據(jù)集的軟件缺陷預(yù)測模型[J].計算機應(yīng)用研究,2018,35(9):2806-2810.
[6] 王海,江峰,杜軍威,等.過采樣與集成學(xué)習(xí)方法在軟件缺陷預(yù)測中的對比研究[J].計算機與現(xiàn)代化,2020(6):83-88.
【通聯(lián)編輯:謝媛媛】
收稿日期:2021-12-08
基金項目:廣東白云學(xué)院2021年度校級科研項目:基于機器學(xué)習(xí)的軟件缺陷預(yù)測研究(項目編號:2021BYKY19)
作者簡介:顏慧(1979—),女,廣西橫州人,講師,碩士,研究方向為軟件工程、機器學(xué)習(xí)。