本發(fā)明屬于軟件缺陷預測技術領域,特別是涉及一種基于特征選擇和集成學習的軟件缺陷個數(shù)預測方法。
背景技術:
(1)軟件缺陷個數(shù)預測技術
軟件已經(jīng)成為影響國民經(jīng)濟、軍事、政治乃至社會生活的重要因素。高可靠和復雜的軟件系統(tǒng)依賴于其采用的軟件的可靠性。軟件的缺陷是導致相關系統(tǒng)出錯、失效、崩潰甚至機毀人亡的潛在根源。所謂缺陷,到目前為止,學術界,產(chǎn)業(yè)界有很多相關的術語和定義,比如故障、缺陷、bug、錯誤、失誤、失效、失敗等。根據(jù)iso9000對缺陷的定義為:滿足與預期或者規(guī)定用途有關的要求,缺陷是軟件中已經(jīng)存在的一個部分,可以通過修改軟件而濾除。然而軟件技術發(fā)展至今,任何檢驗、驗證手段都不可能發(fā)現(xiàn)并排除所有的缺陷,軟件作為一種無形的產(chǎn)物,雖然不會磨損用壞,卻隨時可能因為我們不易查知的原因出現(xiàn)故障甚至失效。事實上,從第一個軟件誕生,就伴隨出現(xiàn)軟件缺陷的檢測和預測技術。檢測技術在于發(fā)現(xiàn)缺陷,而預測技術則在于預測還未發(fā)現(xiàn)的缺陷。20世紀70年代,出現(xiàn)了利用統(tǒng)計學習技術,根據(jù)歷史數(shù)據(jù)以及已經(jīng)發(fā)現(xiàn)的缺陷等軟件度量數(shù)據(jù)預測軟件系統(tǒng)的缺陷數(shù)目及類型。缺陷預測技術的目的在于統(tǒng)計計算機軟件系統(tǒng)的缺陷數(shù),以決定系統(tǒng)是否可以交付使用。缺陷預測技術為軟件質(zhì)量的提高和保證起著非常重要的作用,同時也促進了軟件工程技術向前大大的發(fā)展了一步。
軟件缺陷預測過程的第一步是收集和標注軟件實例。一個軟件實例能夠被標記為有缺陷和無缺陷。第二步,抽取軟件實例的度量屬性。到目前為止,研究人員從不同的角度提出了許多軟件度量屬性,而與軟件缺陷預測密切相關的度量屬性主要有代碼度量、mccabe度量和halstead度量三種。代碼度量是最直接、應用最普遍的度量屬性。通過對程序進行簡單的計數(shù),我們可以得到相關代碼的度量值。它包含總行數(shù)(loc)、空白行數(shù)目(locb)、注釋行數(shù)目(locc)、代碼行數(shù)目(loce)和代碼和注釋總數(shù)目(locec)。(文獻:[1]包曉露,王小娟,賈有良、申來安。軟件測試基礎:方法與度量[m].北京:人民郵電出版社,2007:74-76.)。軟件復雜性通過程序結構的復雜性表現(xiàn)出來,而程序結構的復雜性主要值的是實例內(nèi)部程序的復雜性。macabe度量的正是實例內(nèi)部程序的復雜性。它由三種度量組成,分別為環(huán)形復雜度(cyclomaticcomplexity)、基本復雜度(essentialcomplexity)和設計復雜度(dessigncomplexity)。halstead度量不僅度量了程序長度,還描述了程序的最小實現(xiàn)和實際實現(xiàn)之間的關系,并據(jù)此闡述程序語言的等級高低。halstead度量方法充分考慮了程序中出現(xiàn)的算子和操作數(shù),它包括軟件長度(n)、容量(v)、級別(l)、難度(d)、工作量(e)、時間(t)、誤差估計(b)、程序消息(i)等度量。第三步,建立缺陷預測模型,缺陷預測模型本質(zhì)上屬于模式識別的范疇。而缺陷預測模型的建立過程就是通過一定的機器學習算法來搭建模型結構并確定度量屬性之間依賴強度的過程,即為模型的結構學習和參數(shù)學習過程。第四步,通過模型預測結果,由于建立好的缺陷預測模型可以通過自身模型結構和模型參數(shù)來量化描述度量屬性與預測結果之間的因果關系,這樣給定一個軟件實例的度量屬性數(shù)據(jù)集,使用訓練好的預測模型就可以得到該實例是否存在缺陷,即完成軟件缺陷預測的過程。
(2)軟件缺陷個數(shù)預測技術
但這些軟件缺陷預測技術通常只給出有缺陷或無缺陷的二分類結果。如有關文獻:[1]
x.yang,k.tang,x.yao,“alearning-to-rankapproachtosoftwaredefectprediction,”ieeetransactionsonreliability,2015,64(1):234-246.指出,如果只按照有無缺陷來分配有限的測試資源,可能會造成資源分配的浪費。如果我們能夠準確的預測出缺陷個數(shù),使軟件測試人員主要關注那些擁有更多缺陷的軟件模塊,就可使軟件測試工作更為有效。因此,預測軟件缺陷個數(shù)相比于單純的預測軟件模塊是否有缺陷更利于優(yōu)化軟件測試資源的分配。目前為止,已有許多研究使用回歸模型預測缺陷數(shù)目。一些學者研究了遺傳編程,決策樹回歸以及多層感知器進行缺陷數(shù)目的預測,結果表明這些模型具有良好的性能。有關文獻:[2]m.chen,y.ma,“anempiricalstudyonpredictingdefectnumbers,”28thinternationalconferenceonsoftwareengineeringandknowledgeengineering,2015:397-402.chen等人使用六種回歸算法來構建缺陷數(shù)目預測模型,最后發(fā)現(xiàn),使用決策樹回歸構建的模型在多數(shù)情況下具有最高的預測準確率。在另一個相似的研究中,有關文獻:[3]s.s.rathore,s.kumar,“predictingnumberoffaultsinsoftwaresystemusinggeneticprogramming,”procediacomputerscience,2015,62:303-311.rathore等人提出了另一種實驗方法來評估六種回歸算法。結果發(fā)現(xiàn)決策樹回歸,多層感知和線性回歸在多數(shù)情況下取得最佳性能。
然而,這些回歸算法具有不同的預測能力,算法的性能會因為數(shù)據(jù)集的不同而不同,實驗證明沒有一種算法可以在所有情況下有取得最佳性能。此外,這些回歸模型的性能仍然容易受到不相關的、冗余的模型特征的影響。
(3)回歸技術
回歸分析是一種預測性的建模技術,它研究的是因變量(目標)和自變量(預測器)之間的關系以及多個自變量對因變量的影響。這種技術通常用于預測分析,時間序列模型以及發(fā)現(xiàn)變量之間的因果關系。
1)線性回歸。線性回歸是一種用于對因變量與一個或多個獨立變量之間的線性關系進行建模的統(tǒng)計方法。一個線性回歸模型如下式所示:
y=b0+b1x1+b2x2+…+bnxn
其中y是因變量,x1,x2,...,xn是獨立變量,b1,b2,...,bn是獨立變量的回歸系數(shù),b0是誤差項。
2)嶺回歸。當自變量之間有高度相關關系時,即使最小二乘法是無偏的,它們的方差也會很大。嶺回歸實際上是一種改良的最小二乘估計法,通過放棄最小二乘法的無偏性,以損失部分信息、降低精度為代價獲得回歸系數(shù)更為符合實際、更可靠的回歸方法,對病態(tài)數(shù)據(jù)的擬合要強于最小二乘法。最小二乘法如下式所示:
xb=y(tǒng)
當x列滿秩時,有
b=x+y=(xtx)-1xty
x+表示x的廣義逆。當xtx的行列式接近于0時,嶺回歸為其主對角元素都加上了一個數(shù)k,降低矩陣為奇異的風險。如下式所示:
b(k)=(xtx+ki)-1xty
隨著k的增大,b(k)中各元素bi(k)的絕對值均趨于不斷變小,它們相對于正確值bi的偏差也越來越大。k趨于無窮大時,b(k)趨于0。b(k)隨k的改變而變化的軌跡,就稱為嶺跡。
3)決策樹回歸。它通過學習從數(shù)據(jù)特征推斷的簡單決策樹來預測目標變量的值。決策樹從根節(jié)點自上而下構建,并使用分割標準將數(shù)據(jù)分成包含具有相似值的實例的子集。選擇最大化減少預期誤差的屬性作為根節(jié)點。該過程在非葉分支上遞歸運行,直到所有數(shù)據(jù)被處理。
4)梯度boosting回歸。它以弱預測模型(通常是決策樹)的形式產(chǎn)生預測模型,像其他提升方法一樣的階段性方式構建模型。它允許優(yōu)化任意可微分損失函數(shù)。在每個階段,回歸樹適合于給定損失函數(shù)的負梯度。
5)最近鄰回歸。最近鄰回歸是基于k最近鄰的算法,并且一個實例的回歸值是根據(jù)其最鄰近的標簽的平均值來計算的?;镜淖罱徎貧w使用均勻權重:即本地鄰域中的每個點對查詢點的分類均一致。在某些情況下,加權點可能是有利的,使得附近點對遠程點的貢獻更多。
6)多層感知器回歸。多層感知器是生物神經(jīng)網(wǎng)絡工作中的預測算法,它由一系列以層的形式相互連接權重的處理元件組成,利用一種反向傳播來增加網(wǎng)絡。多層感知器回歸模型如下式所示:
netk=w1kx1+w2kx2+…+wnkxn+bk
ok=f(netk)
其中ok是因變量,x1,x2,...,xn是獨立變量,w1k,w2k,...,wnk是與每個輸入層相關聯(lián)的權重,函數(shù)f(netk)是激活函數(shù)。
技術實現(xiàn)要素:
本發(fā)明提供的技術方案是一種基于特征選擇和集成學習的軟件缺陷個數(shù)預測方法,包括以下步驟:
步驟1,挖掘軟件歷史數(shù)據(jù),從中抽取出n個有用的軟件模塊。軟件模塊粒度可根據(jù)實際應用場景,可設置為文件、包、類或函數(shù)。然后標記軟件模塊中缺陷的個數(shù)。
步驟2,提取軟件模塊中與軟件缺陷有關的特征,提取了20個屬性特征:加權方法數(shù)(wmc),繼承樹深度(dit),孩子數(shù)(noc),對象類之間的耦合度(cbo),類的響應(rfc),內(nèi)聚缺乏度(lcom),傳入耦合(ca),傳出耦合(ce),公開方法數(shù)(npm),代碼行數(shù)(loc),數(shù)據(jù)訪問度量(dam),聚合度量(moa),功能抽象度量(mfa),方法間的內(nèi)聚度(cam),繼承耦合(ic),方法間耦合(cbm),平均方法復雜度(amc),最大mccabe環(huán)形復雜度(max_cc),平均mccabe環(huán)形復雜度(avg_cc)。這20個特征形成了原始的特征集s={a1,a2,…,a20}。在提取n個軟件模塊的特征和缺陷個數(shù)后形成了缺陷數(shù)據(jù)集d={(x1,y1),(x2,y2),…,(xn,yn)},其中xi=(a1,a2,…,a20)是從第i個軟件模塊中提取出的20維的特征向量值,yi是第i個軟件模塊的缺陷個數(shù)。
步驟3,首先通過以d為訓練集在原始特征集s上訓練出m個基礎回歸模型h1(x),h2(x),…,hm(x)。這些基礎的回歸模型包含了在背景技術中介紹的線性回歸、嶺回歸、決策樹回歸、梯度boosting回歸、最近鄰回歸和多層感器知回歸。每個基本的回歸模型預測給定模塊的缺陷個數(shù)。然后構建集成回歸模型
步驟4,利用步驟3中訓練出的集成回歸模型h(x)對缺陷數(shù)據(jù)集d中的n個軟件模塊進行預測,計算得到該集成回歸模型在缺陷數(shù)據(jù)集d上的預測準確率。預測準確率采用均方根誤差rmse表示,計算公式為:
其中yi表示對第i個軟件模塊的缺陷個數(shù)真實值,
步驟5,采用基于包裹式的特征選擇方法來濾除不相關和冗余的特征,具體包括:
步驟5.1,從當前特征子集sk(k為當前特征子集中包含的特征個數(shù))中濾除掉一個特征,由于sk中的每個特征都是可以被濾除的,所以對當前特征子集sk濾除掉一個特征后,有k個不同的特征子集sk-1。
步驟5.2,基于這k個不同的特征子集sk-1,訓練出k個不同的集成回歸模型,分別計算這k個不同的集成回歸模型對原始缺陷數(shù)據(jù)集d中n個軟件模塊進行預測時的rmse值。
步驟5.3,如果基于特征子集sk-1上訓練得出的擁有最低的rmse值的集成回歸模型的rmse值小于在原始特征子集sk上訓練得到的rmse值,則說明在特征子集sk-1上訓練得到的集成回歸模型具有更高的準確率,當前的特征子集sk-1相比于原始的特征子集sk更有用。因此,則保留當前的特征子集sk-1,然后重復步驟5.1、5.2、5.3。如果基于特征子集sk-1上訓練得出的擁有最低的rmse值的集成回歸模型的rmse值大于在原始特征子集sk上訓練得到的rmse值,則說明在原始特征子集sk上訓練得到的集成回歸模型具有更高的準確率,原始的特征集sk相比于當前的特征子集sk-1更有用,則停止特征選擇步驟,得到篩選后的特征子集s’。
步驟6,通過以d為訓練集在特征選擇后的特征子集s’上訓練出m個基礎回歸模型h1,h2,…,hm。這些基本的回歸模型包含了在背景技術中介紹的線性回歸、嶺回歸、決策樹回歸、梯度boosting回歸、最近鄰回歸和多層感器知回歸。然后構建集成回歸模
步驟7,預測待預測的軟件模塊的缺陷個數(shù)。
步驟7.1,提取待預測的軟件模塊中的特征s’,形成這個軟件模塊的特征向量值x’。
步驟7.2,將步驟7.1得到的待預測的軟件模塊的特征向量值x’帶入到步驟6中訓練的集成回歸模型中,求得該軟件模塊的缺陷個數(shù)。
針對現(xiàn)有的軟件缺陷個數(shù)預測模型具有不同的預測能力,預測的性能會根據(jù)數(shù)據(jù)集的不同而不同的問題,而且這些模型的性能也容易受到軟件缺陷個數(shù)預測數(shù)據(jù)集中不相關的、冗余的特征的影響的問題,因此本發(fā)明利用集成學習技術將多個回歸模型相結合來預測軟件缺陷個數(shù),相比于單個的回歸模型,提高了軟件缺陷個數(shù)預測的準確性。并在此基礎上利用包裹式的特征選擇方法通過評估每個特征對回歸模型性能的貢獻來濾除掉軟件缺陷個數(shù)預測數(shù)據(jù)集中不相關的、冗余的特征,得到一個新的特征集,該特征集對于建立軟件缺陷個數(shù)預測模型更為有效,以此提高了預測的準確性。
附圖說明
圖1本發(fā)明實施例的基于特征選擇和集成學習的軟件缺陷個數(shù)預測流程圖。
圖2本發(fā)明實施例的基于包裹式的特征選擇方法示例圖。
具體實施方式
本發(fā)明設計的基于特征選擇和集成學習的軟件缺陷個數(shù)預測方法流程圖見附圖1,所有步驟可由本領域技術人員采用計算機軟件技術實現(xiàn)流程自動運行。實施例具體實現(xiàn)過程如下:
步驟1,挖掘軟件歷史數(shù)據(jù),從中抽取出n個有用的軟件模塊。軟件模塊粒度可根據(jù)實際應用場景,可設置為文件、包、類或函數(shù)。然后標記軟件模塊中缺陷的個數(shù)。
步驟2,提取軟件模塊的屬性特征,為了闡述方便,假設在實施例中提取了5個屬性特征:a1,a2,a3,a4,a5。
本實施例在提取5個模塊的度量屬性和缺陷個數(shù)后形成了缺陷數(shù)據(jù)集d={(x1,y1),(x2,y2),(x3,y3),(x4,y4),(x5,y5)},其中xi是表示從第i個軟件模塊中提取的5維特征向量,xi=(a1,a2,a3,a4,a5),yi是第i個軟件模塊的缺陷個數(shù)。
缺陷數(shù)據(jù)集中包含的模塊如下:x1={(3.0,1.0,0.0,8.0,14.0),5},x2={(13.0,1.0,0.0,1.0,17.0),4},x3={(4.0,1.0,0.0,4.0,4.0),5},x4={(10.0,1.0,0.0,6.0,31.0),0},x5={(2.0,0.367,15.143,3.0,1.1429),0}。
步驟3,首先通過以d為訓練集在原始特征集s上訓練出m個基礎回歸模型h1(x),h2(x),…,hm(x)。這些基本的回歸模型包含了在背景技術中介紹的線性回歸、嶺回歸、決策樹回歸、梯度boosting回歸、最近鄰回歸和多層感器知回歸。然后構建集成回歸模型
h(x)=1/6×[h1(a1,a2,a3,a4,a5)+h2(a1,a2,a3,a4,a5)+h3(a1,a2,a3,a4,a5)+h4(a1,a2,a3,a4,a5)+h5(a1,a2,a3,a4,a5)+h6(a1,a2,a3,a4,a5)]
步驟4,利用步驟3中訓練出的集成回歸模型h(x)對缺陷數(shù)據(jù)集d中的五個軟件模塊進行預測,求得第一個軟件模塊的缺陷個數(shù)預測值為c1=4,第二個軟件模塊的缺陷個數(shù)預測值為c2=3,第三個軟件模塊的缺陷個數(shù)預測值為c3=0,第四個軟件模塊的缺陷個數(shù)預測值為c4=2,第五個軟件模塊的缺陷個數(shù)預測值為c5=3,計算得到該集成回歸模型在缺陷數(shù)據(jù)集d上的預測準確率,該預測準確率采用均方根誤差rmse表示,其計算公式為:
其中yi表示對第i個軟件模塊的缺陷個數(shù)真實值,
步驟5,采用基于包裹式的特征選擇方法來濾除不相關和冗余的特征。
步驟5.1,從當前特征子集sk(k為當前特征子集中包含的特征個數(shù))中濾除掉一個特征,由于sk中的每個特征都是可以被濾除的,所以對當前特征子集sk濾除掉一個特征后,有k個不同的特征子集sk-1。本實施例中首先對原始特征集s={a1,a2,a3,a4,a5}濾除掉一個特征后,有5種不同的特征子集:{a2,a3,a4,a5}、{a1,a3,a4,a5}、{a1,a2,a4,a5}、{a1,a2,a3,a5}、{a1,a2,a3,a4}。
步驟5.2,基于這k個不同的特征子集sk-1,訓練出k個不同的集成回歸模型,分別計算這k個不同的集成回歸模型對原始缺陷數(shù)據(jù)集d中軟件模塊進行預測時的rmse值。本實施例中利用{a2,a3,a4,a5}這個特征子集構建集成回歸模型:
h1(x)=1/6×[h1(a2,a3,a4,a5)+h2(a2,a3,a4,a5)+h3(a2,a3,a4,a5)+h4(a2,a3,a4,a5)+h5(a1,a2,a3,a4,a5)+h6(a1,a2,a3,a4,a5)]
利用{a1,a3,a4,a5}這個特征子集構建集成回歸模型:
h2(x)=1/6×[h1(a1,a3,a4,a5)+h2(a1,a3,a4,a5)+h3(a1,a3,a4,a5)+h4(a1,a3,a4,a5)+h5(a1,a2,a3,a4,a5)+h6(a1,a2,a3,a4,a5)]
利用{a1,a2,a4,a5}這個特征子集構建集成回歸模型:
h3(x)=1/6×[h1(a1,a2,a4,a5)+h2(a1,a2,a4,a5)+h3(a1,a2,a4,a5)+h4(a1,a2,a4,a5)+h5(a1,a2,a3,a4,a5)+h6(a1,a2,a3,a4,a5)]
利用{a1,a2,a3,a5}這個特征子集構建集成回歸模型:
h4(x)=1/6×[h1(a1,a2,a3,a5)+h2(a1,a2,a3,a5)+h3(a1,a2,a3,a5)+h4(a1,a2,a3,a5)+h5(a1,a2,a3,a4,a5)+h6(a1,a2,a3,a4,a5)]
利用{a1,a2,a3,a4}這個特征子集構建集成回歸模型:
h5(x)=1/6×[h1(a1,a2,a3,a4)+h2(a1,a2,a3,a4)+h3(a1,a2,a3,a4)+h4(a1,a2,a3,a4)+h5(a1,a2,a3,a4)+h6(a1,a2,a3,a4)]
計算這五個集成回歸模型對缺陷數(shù)據(jù)集d中軟件模塊進行預測時的rmse值。對于集成回歸模型h1(x),預測缺陷數(shù)據(jù)集d中5個軟件模塊的缺陷個數(shù)分別為c2=2,c3=3,c4=0,c5=1,求得rmse1=1.14;對于集成學習回歸模型h2(x),預測缺陷數(shù)據(jù)集d中5個軟件模塊的缺陷個數(shù)分別為c1=3,c2=3,c3=3.00,c4=2,c5=2,求得rmse2=0.55;對于集成學習回歸模型h3(x),預測缺陷數(shù)據(jù)集d中5個軟件模塊的缺陷個數(shù)分別為c1=0,c2=1,c3=3,c4=3,c5=2,求得rmse3=1.30;對于集成學習回歸模型h4(x),預測缺陷數(shù)據(jù)集d中5個軟件模塊的缺陷個數(shù)分別為c1=2,c2=3,c3=2,c4=3,c5=0,求得rmse4=1.22;對于集成學習回歸模型h5(x),預測缺陷數(shù)據(jù)集d中5個軟件模塊的缺陷個數(shù)分別為c1=4,c2=3,c3=3,c4=2,c5=2,求得rmse5=0.84。
步驟5.3,如果基于特征子集sk-1上訓練得出的擁有最低的rmse值的集成回歸模型的rmse值小于在原始特征子集sk上訓練得到的rmse值,則說明在特征子集sk-1上訓練得到的集成回歸模型具有更高的準確率,當前的特征子集sk-1相比于原始的特征子集sk更有用。因此,則保留當前的特征子集sk-1,則重復步驟5.1、5.2、5.3。如果基于特征子集sk-1上訓練得出的擁有最低的rmse值的集成回歸模型的rmse值大于在原始特征子集sk上訓練得到的rmse值,則說明在原始特征子集sk上訓練得到的集成回歸模型具有更高的準確率,原始的特征集sk相比于當前的特征子集sk-1更有用,則停止特征選擇步驟,得到篩選后的特征子集s’。
在本實施例中由于在特征子集{a1,a3,a4,a5}上訓練得到的集成回歸模型具有最小的rmse值,且該值小于在原始特征集s={a1,a2,a3,a4,a5}上訓練得到的集成回歸模型的rmse值,所以在第一次迭代時刪除掉a2這個特征。重復步驟5.1、5.2、5.3,繼續(xù)選擇濾除一個特征,有4種不同的特征子集:{a3,a4,a5}、{a1,a4,a5}、{a1,a3,a5}和{a1,a3,a4},使用這4種不同的特征子集構建集成回歸模型:
h1(x)’=1/6×[h1(a3,a4,a5)+h2(a3,a4,a5)+h3(a3,a4,a5)+h4(a3,a4,a5)+h5(a3,a4,a5)+h6(a3,a4,a5)]
h2(x)’=1/6×[h1(a1,a4,a5)+h2(a1,a4,a5)+h3(a1,a4,a5)+h4(a1,a4,a5)+h5(a1,a4,a5)+h6(a1,a4,a5)]
h3(x)’=1/6×[h1(a1,a3,a5)+h2(a1,a3,a5)+h3(a1,a3,a5)+h3(a1,a3,a5)+h5(a1,a3,a5)+h6(a1,a3,a5)]
h4(x)’=1/6×[h1(a1,a3,a4)+h2(a1,a3,a4)+h3(a1,a3,a4)+h3(a1,a3,a4)+h4(a1,a3,a4)+h6(a1,a3,a4)]
計算各自的缺陷個數(shù)及回歸誤差:對于集成學習回歸模型h1(x)’,預測缺陷數(shù)據(jù)集d中5個軟件模塊的缺陷個數(shù)分別為c1=4,c2=2,c3=3,c4=4,c5=0,求得rmse1’=1.68;對于集成學習回歸模型h2(x)’,預測缺陷數(shù)據(jù)集d中5個軟件模塊的缺陷個數(shù)分別為c1=3,c2=3,c3=2,c4=4,c5=3,求得rmse2’=0.71;對于集成學習回歸模型h3(x)’,預測缺陷數(shù)據(jù)集d中5個軟件模塊的缺陷個數(shù)分別為c1=4,c2=3,c3=3,c4=1,c5=3,求得rmse3’=1.09;對于集成學習回歸模型h4(x)’,預測缺陷數(shù)據(jù)集d中5個軟件模塊的缺陷個數(shù)分別為c1=3,c2=3,c3=2,c4=4,c5=4,求得rmse4’=0.84。
由于在特征子集{a1,a4,a5}上可以達到最小的rmse值為0.71,這一個值大于了在特征子集{a1,a3,a4,a5}上訓練得到的rmse值,這說明在對特征子集{a1,a3,a4,a5}濾除一個特征后rmse的值反而升高,因此停止特征選擇步驟,得到篩選后的特征子集s’為{a1,a3,a4,a5}。
步驟6,通過以d為訓練集在特征選擇后的特征子集s’={a1,a3,a4,a5}上訓練出m個基礎回歸模型h1,h2,…,hm。這些基本的回歸模型包含了在背景技術中介紹的線性回歸、嶺回歸、決策樹回歸、梯度boosting回歸、最近鄰回歸和多層感器知回歸。然后構建集成回歸模型
步驟7,預測待預測的軟件模塊的缺陷個數(shù)。
步驟7.1,對待預測的軟件模塊提取a1,a3,a4,a5這四個特征,形成如下軟件模塊數(shù)據(jù):x6={(0.6,4.2,7.8,3),?},“?”表示這個軟件模塊待預測。
步驟7.2,將步驟7.1得到的待預測的軟件模塊的特征向量值xi=(0.6,4.2,7.8,3)帶入步驟6中訓練的集成回歸模型中,求得該軟件模塊的缺陷個數(shù)。最終計算結果為3.23,由于缺陷個數(shù)必為整數(shù),因此四舍五入得到最后的缺陷個數(shù)為3。
本文中所描述的具體實施例僅僅是對本發(fā)明精神作舉例說明。本發(fā)明所屬技術領域的技術人員可以對所描述的具體實施例做各種各樣的修改或補充或采用類似的方式替代,但并不會偏離本發(fā)明的精神或者超越所附權利要求書所定義的范圍。