本發(fā)明屬于跨公司軟件缺陷預測技術領域,特別是涉及一種基于遷移學習和缺陷數(shù)量信息的跨公司軟件缺陷預測方法。
背景技術:
(1)軟件項目缺陷預測技術
軟件產業(yè)作為信息產業(yè)的重要組成部分,在促進產業(yè)結構調整、經(jīng)濟發(fā)展方式轉變、工業(yè)化與信息化融合及維護國家安全方面均發(fā)揮著重要作用。然而隨著軟件應用領域的不斷擴展,和設計復雜度的不斷提升,軟件項目的質量問題越來越難把控。在這種需求背景下,高效的軟件缺陷預測技術越來越引起人們的關注。
軟件缺陷預測技術可以在軟件系統(tǒng)開發(fā)早期,高效的預測系統(tǒng)各個軟件模塊是否存在缺陷,并根據(jù)預測結果,合理分配測試人力資源,從而有效降低測試成本并減小測試周期。此外,對于每個具體的軟件項目來說,不同時期修復缺陷的成本是完全不同的,一般來說,其修復成本是隨時間呈正比例上升的。比如,文獻1其中提到,1985到1987年,therac-25輻射治療設備卷入多宗因輻射劑量嚴重超標引發(fā)的醫(yī)療事故,其罪魁禍首是醫(yī)療設備電力軟件的bug,導致大量患者接受了高達100倍的預定治療劑量,其中三人直接死于輻射劑量超標,。假定我們能在軟件測試的早期就發(fā)現(xiàn)并修復這個bug,上述悲劇將不再重演。
現(xiàn)有的缺陷預測技術主要包括:缺陷數(shù)量預測技術、缺陷分布預測技術和軟件預測模型技術。
其中缺陷數(shù)量預測技術一般用來確定整體項目缺陷的個數(shù),如文獻2,其中akahashi將代碼與具體的文檔數(shù)量對應起來,給出了缺陷密度的估計式:§=67.98+0.46f1-9.69f2-0.08f3,其中§為缺陷率(單位:thenumberoferrors/kloc,kloc為千行代碼),f1為程序規(guī)約變更的頻率(單位:thenumberofpages/kloc),f2為程序員技能(單位:years),f3為程序設計文檔頁數(shù)(單位:thenumberofpages/kloc)。
缺陷分布預測技術則利用分類或回歸技術,如線性判別分析lda(1ineardiscriminantanalysis),分類回歸樹cart(classificationandregressiontree),支持向量機svm(supportvectormachine),人工神經(jīng)網(wǎng)絡ann(artificialneuralnetwork),邏輯回歸lr(logisticregression),多元線性回歸mlr(multiplelinearregression)等方法,來對模塊是否存在缺陷進行預測。
不同于上述兩種技術一般選定一些特殊度量元來通過分類回歸找到缺陷模塊的方法,軟件預測模型技術則基于歷史缺陷數(shù)據(jù)構建模型。相比而言,這種方法更能將一些其他的缺陷影響因素考慮在內,比如團隊因素等,且無需人為的參數(shù)調整。因此,軟件預測模型技術也成為了當今主流的軟件缺陷預測技術。
(2)跨公司軟件項目缺陷預測技術
然而在一些實際測試場景中,當需要用軟件模型預測技術來對一些新的公司的軟件項目進行缺陷預測時,并沒有大量的歷史的缺陷數(shù)據(jù)來供我們來訓練模型。但在網(wǎng)絡上存在很多高質量的開源軟件項目缺陷數(shù)據(jù)集,因此就有學者試圖從這些跨公司的開源項目缺陷數(shù)據(jù)集出發(fā),來訓練預測模型從而對新的公司的軟件項目進行缺陷預測。然而直接使用跨項目的缺陷數(shù)據(jù)集來對新公司的軟件項目進行缺陷預測還存在一些問題,原因是不同項目之間可能存在著不同的特征分布,直接套用跨公司的軟件缺陷預測經(jīng)驗可能會導致預測精度過低。
文獻3中馬櫻等人提出了一種transfernaivebayes(tnb)算法,tnb算法考慮了源數(shù)據(jù)和目標數(shù)據(jù)來自不同公司的跨公司預測場景,為了較好利用跨公司數(shù)據(jù),tnb運用了遷移學習的方法來建立一個更有效的預測模型。遷移學習的目標是將從一個環(huán)境中學習到的知識用來解決新環(huán)境中的任務。因此,遷移學習用來解決跨項目缺陷預測過程中出現(xiàn)的問題尤為合適。遷移學習處理原始跨項目缺陷數(shù)據(jù)的基本思路是:對于原始的跨項目缺陷數(shù)據(jù),其與待預測數(shù)據(jù)之間的相似度越高,賦予的權重越高。在此基礎上,那些跟我們待預測數(shù)據(jù)相似度高的跨項目缺陷數(shù)據(jù)就能在預測結果中起到更大的作用,同時也能削弱不相關的跨項目缺陷數(shù)據(jù)對預測結果的影響。
(3)樸素貝葉斯
這里之所以選擇貝葉斯算法作為我們預測模型的基礎,是因為,當遇到一個需要考慮多個因素來得到最終預測概率的問題,許多算法會在計算過程中忽略弱特征的影響,而貝葉斯算法卻是使用所有的特征來修正預測結果,這很適合需要考慮多個因素的缺陷預測問題。盡管單個分離的特征對結果造成的影響很小,但組合起來卻能對最終的結果產生大的影響。
使用貝葉斯算法進行預測的思想基礎是:假定一個待預測實例為x,它可能所屬的類別c為:{′y′,′n′},′y′和′n′分別代表有缺陷和無缺陷。對于待預測實例x,其屬于有缺陷和無缺陷類別的后驗概率分別為p(′y′|x)和p(′n′|x),如果p(′y′|x)≥p(′n′|x),即x屬于有缺陷類別的后驗概率大于等于其屬于無缺陷類別的后驗概率,那么認為實例x有缺陷,反之,無缺陷?;谪惾~斯定理,p(′c′|x)可寫為
[文獻1]leveson,nancyg.;turner,clarks.(july1993)."aninvestigationofthetherac-25accidents".ieeecomputer.26(7):18–41.
[文獻2]王青,伍書劍,李明樹."軟件缺陷預測技術".journalofsoftware,vol.19,no.7,july2008,pp.1565—1580.
[文獻3]may,luog,zengx,etal.transferlearningforcross-companysoftwaredefectprediction[j].information&softwaretechnology,2012,54(3):248–256.
技術實現(xiàn)要素:
針對現(xiàn)有的基于遷移學習的跨項目缺陷預測方法中存在的類不平衡和數(shù)據(jù)間距離相等時權值排名無法確定的問題,即當兩個實例和待預測數(shù)據(jù)之間擁有相同的相似度時,哪一個實例該被賦予更高的權值,或者,在類不平衡問題中,大量無缺陷實例權值的累加會導致有缺陷實例權值對結果的影響微乎其微,這種不良影響該如何消除的問題,本發(fā)明提供了一種基于遷移學習和缺陷數(shù)量信息的跨公司軟件缺陷預測方法。
本發(fā)明所采用的技術方案是:一種基于遷移學習和缺陷數(shù)量信息的跨公司軟件缺陷預測方法,其特征在于,包括以下步驟:
步驟1:標注每個跨項目實例即訓練數(shù)據(jù)有多少個缺陷;
步驟2:根據(jù)經(jīng)驗提取實例內的度量屬性;
步驟3:數(shù)據(jù)預處理;
步驟4:基于加權跨項目實例集構建貝葉斯缺陷預測模型;
步驟5:根據(jù)貝葉斯缺陷預測模型預測本項目實例是否有缺陷。
本發(fā)明對現(xiàn)有跨項目缺陷數(shù)據(jù)的權值計算方法進行改進,提出一種基于遷移學習和缺陷數(shù)量信息的跨公司軟件缺陷預測方法,即在根據(jù)遷移學習計算權值的基礎上,考慮缺陷個數(shù)信息的加成作用,有效避免了不平衡問題對預測結果造成的影響,從而提高了跨項目缺陷預測的精度。
附圖說明
圖1本發(fā)明實施的流程示意圖;
圖2本發(fā)明實施的構建貝葉斯預測模型示意圖。
具體實施方式
為了便于本領域普通技術人員理解和實施本發(fā)明,下面結合附圖及實施例對本發(fā)明作進一步的詳細描述,應當理解,此處所描述的實施示例僅用于說明和解釋本發(fā)明,并不用于限定本發(fā)明。
請見圖1和圖2,本發(fā)明提供的一種基于遷移學習和缺陷數(shù)量信息的跨公司軟件缺陷預測方法,包括以下步驟:
步驟1:人工標注每個跨項目實例有多少個缺陷;
對存在缺陷的實例標注缺陷個數(shù)為n(n>0),無缺陷的實例標注缺陷個數(shù)為0;
步驟2:根據(jù)經(jīng)驗提取實例內的度量屬性ai;
本實施例選取了20個度量屬性,它們分別為:加權方法數(shù)(wmc),繼承樹深度(dit),子節(jié)點數(shù)(noc),對象類之間的耦合度(cbo),類的響應(rfc),內聚缺乏度(lcom),傳入耦合(ca),傳出耦合(ce),公開方法數(shù)(npm),代碼行數(shù)(loc),數(shù)據(jù)訪問度量(dam),聚合度量(moa),功能抽象度量(mfa),方法間的內聚度(cam),繼承耦合(ic),方法間耦合(cbm),平均方法復雜度(amc),最大mccabe環(huán)形復雜度(max_cc),平均mccabe環(huán)形復雜度(avg_cc);
步驟3:數(shù)據(jù)預處理;
步驟3.1:計算每個跨項目實例x和本項目實例集之間的相似度;
首先計算本項目實例集即待預測實例中每個屬性的取值范圍,即每個屬性的最小值和最大值組成的左閉右閉區(qū)間。比如有跨公司的缺陷數(shù)據(jù)x1=(1,2,2,0),x2=(2,1,3,0),x3=(2,2,4,3),其中前三位分別為三個屬性的屬性值,最后一位的數(shù)字表示缺陷的個數(shù)?,F(xiàn)在來預測一個新項目的實例y1=(2,2,3)有無缺陷。那么該本項目實例集的每個屬性取值范圍為:第一個屬性取值范圍為[2,2],第二個屬性取值范圍為[2,2],第三個屬性取值范圍為[3,3]。然后判斷跨項目實例的每個屬性是否在該取值范圍內,那么該跨項目實例與本項目實例集之間的相似度si為,跨項目實例中的屬性滿足上述取值范圍的個數(shù)。對于x1=(1,2,2,0),只有第二個屬性在對應屬性的取值范圍里,故s1=1,對于x2=(2,1,3,0),則第一和第三個屬性在對應屬性的取值范圍里,故s2=2,對于x3=(2,2,4,3),則第一和第二個屬性在對應屬性的取值范圍里,故s3=2。
步驟3.2:基于根據(jù)相似度si來確定每個跨項目實例的初始權重wi;
參考萬有引力公式,本實施例定義每個跨項目實例的初始權重為:
步驟3.3:考慮跨項目實例的缺陷個數(shù)信息來調整初始權重wi的值;
即在步驟3.2的基礎上乘以該跨項目實例缺陷的個數(shù)。假定第i個跨項目實例的缺陷個數(shù)為ni,那么該跨項目實例的最終權值為
步驟4:構建加權貝葉斯預測模型;
由背景介紹可知,要計算實例x分別屬于有缺陷和無缺陷的后驗概率p('y'|x)和p('n'|x),需要分別計算
接下來本實施例將依次來計算有無缺陷的先驗概率p('c'),c={'y','n'},有無缺陷條件下的每個屬性的條件概率p(aj|'c')以及本項目實例的歸一化證據(jù)因子p(x)。
首先,有無缺陷的先驗概率為:
接下來在有無缺陷條件跨項目實例每個屬性的條件概率為:
最后本實施例來計算本項目實例的歸一化證據(jù)因子:
步驟5:根據(jù)步驟4所得的先驗概率和有無缺陷條件下的條件概率來預測本項目實例的特征分布有無缺陷;
本項目實例被預測為有無缺陷的概率為
本實施例可由本領域技術人員采用計算機軟件技術依據(jù)下述技術細節(jié)自行實現(xiàn)。
應當理解的是,本說明書未詳細闡述的部分均屬于現(xiàn)有技術。
應當理解的是,上述針對較佳實施例的描述較為詳細,并不能因此而認為是對本發(fā)明專利保護范圍的限制,本領域的普通技術人員在本發(fā)明的啟示下,在不脫離本發(fā)明權利要求所保護的范圍情況下,還可以做出替換或變形,均落入本發(fā)明的保護范圍之內,本發(fā)明的請求保護范圍應以所附權利要求為準。