本發(fā)明屬于特征選擇領(lǐng)域,特別是涉及一種面向軟件缺陷個(gè)數(shù)預(yù)測(cè)的特征選擇方法。
背景技術(shù):
(1)軟件缺陷預(yù)測(cè)技術(shù):軟件缺陷是計(jì)算機(jī)軟件或程序中存在的某個(gè)破壞正常運(yùn)行能力的問(wèn)題、錯(cuò)誤以及隱藏的功能缺陷。隨著軟件系統(tǒng)在工程應(yīng)用中的不斷擴(kuò)大,軟件缺陷導(dǎo)致的經(jīng)濟(jì)損失日益增加。據(jù)美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)所的一項(xiàng)研究表明,軟件缺陷給美國(guó)每年造成的損失高達(dá)幾百億元,而其中超過(guò)三分之一的損失,如果提前稍加測(cè)試,即可避免。除了經(jīng)濟(jì)領(lǐng)域,還有一些軟件是飛行控制系統(tǒng)軟件和醫(yī)療設(shè)備軟件,這些和人命相關(guān)的軟件,一旦出現(xiàn)軟件缺陷問(wèn)題,就會(huì)給人民生命財(cái)產(chǎn)安全帶來(lái)無(wú)端災(zāi)難,因此軟件缺陷預(yù)測(cè)技術(shù)意義重大。軟件缺陷預(yù)測(cè)技術(shù)是軟件質(zhì)量保證中的一項(xiàng)重要技術(shù)。軟件缺陷預(yù)測(cè)通過(guò)分析軟件歷史倉(cāng)庫(kù),建立缺陷預(yù)測(cè)模型,對(duì)新的軟件模塊進(jìn)行缺陷預(yù)測(cè)。對(duì)預(yù)測(cè)出潛在缺陷的新的軟件模塊分配更多的測(cè)試資源,可以達(dá)到合理分配測(cè)試和維護(hù)資源的目的。目前為止,已有很多高效的軟件缺陷方法被提出。
但這些預(yù)測(cè)通常只給出有缺陷或無(wú)缺陷的二分類(lèi)結(jié)果?,F(xiàn)有技術(shù)表明,如果只按照有無(wú)缺陷來(lái)分配有限的測(cè)試資源,可能會(huì)造成資源分配的浪費(fèi)。如果我們能夠準(zhǔn)確的預(yù)測(cè)出缺陷個(gè)數(shù),使軟件測(cè)試人員主要關(guān)注那些擁有更多缺陷的軟件模塊,就可使軟件測(cè)試工作更為有效。因此,預(yù)測(cè)軟件缺陷個(gè)數(shù)相比于單純的預(yù)測(cè)軟件模塊是否有缺陷更利于優(yōu)化軟件測(cè)試資源的分配。
軟件缺陷個(gè)數(shù)預(yù)測(cè)過(guò)程分為四個(gè)階段:(a)挖掘軟件歷史倉(cāng)庫(kù),從中抽取出有用的程序模塊。程序模塊粒度可根據(jù)實(shí)際應(yīng)用場(chǎng)景,可設(shè)置為文件、包、類(lèi)或函數(shù)等。(b)提取出與軟件缺陷有關(guān)的特征,并構(gòu)建出軟件缺陷個(gè)數(shù)訓(xùn)練集。(c)借助特定的建模方法在軟件缺陷個(gè)數(shù)訓(xùn)練集上構(gòu)建出軟件缺陷個(gè)數(shù)預(yù)測(cè)模型。不同于單純的預(yù)測(cè)新的軟件模塊是否存在缺陷時(shí)采用的是分類(lèi)模型,軟件缺陷個(gè)數(shù)建模方法采用的是回歸模型。(d)在對(duì)新的軟件模塊提取出特征后,利用步驟(d)中訓(xùn)練出的軟件缺陷個(gè)數(shù)預(yù)測(cè)模型,預(yù)測(cè)該模塊存在多少個(gè)缺陷。
在構(gòu)建軟件缺陷預(yù)測(cè)模型時(shí),與提取出與軟件缺陷有關(guān)的特征中不可避免會(huì)產(chǎn)生冗余特征和不相關(guān)特征。冗余特征指的是該特征所包含的信息能從其他特征中推演出來(lái)的特征。無(wú)關(guān)特征則是對(duì)采用的機(jī)器學(xué)習(xí)算法不能提供任何的幫助。這些特征的存在會(huì)嚴(yán)重影響軟件缺陷個(gè)數(shù)預(yù)測(cè)模型的準(zhǔn)確率,因此,使用特征選擇方法去除這類(lèi)特征是十分必要的。
(2)特征選擇技術(shù):特征選擇是指從原始特征中選取最小數(shù)量的特征子集,特征子集內(nèi)的屬性應(yīng)與樣本類(lèi)別具有最大相關(guān)度,而屬性與屬性之間又具有最小相關(guān)度。之所以需要對(duì)特征進(jìn)行選擇,一方面是因?yàn)橥罅康脑继卣鲿?huì)導(dǎo)致處理的時(shí)間和空間復(fù)雜度過(guò)高,另一方面則是大量不相關(guān)特征或冗余特征反而會(huì)降低分析方法的性能。因此,有效的特征選擇對(duì)于缺陷預(yù)測(cè)技術(shù)是非常必要的。目前已有一些研究者將特征選擇的方法應(yīng)用到軟件缺陷預(yù)測(cè)中?,F(xiàn)有技術(shù)有針對(duì)軟件度量中窮舉搜索的不可行性,提出了一種混合屬性選擇方法,并減少了特征子集的搜索空間。還有研究構(gòu)建了一種新的軟件缺陷預(yù)測(cè)框架,并將基于過(guò)濾式的特征選擇方法應(yīng)用到了軟件缺陷預(yù)測(cè)中。還有研究提出了一種混合特征選擇方法,首先基于特征子集評(píng)估器移除軟件缺陷數(shù)據(jù)集中的無(wú)關(guān)特征和冗余特征,隨后基于特征排序評(píng)估器進(jìn)一步移除其中的無(wú)關(guān)特征,實(shí)驗(yàn)結(jié)果表明該方法能有效提高缺陷預(yù)測(cè)模型的性能。但這些特征選擇方法都只是針對(duì)預(yù)測(cè)軟件模塊是否有缺陷的問(wèn)題。
技術(shù)實(shí)現(xiàn)要素:
相對(duì)于國(guó)內(nèi)外已有的只是針對(duì)預(yù)測(cè)軟件模塊是否有缺陷的特征選擇方法,本發(fā)明針對(duì)軟件缺陷數(shù)據(jù)集中不相關(guān)特征和冗余特征會(huì)降低軟件缺陷個(gè)數(shù)預(yù)測(cè)模型的性能的問(wèn)題,提出了一種面向軟件缺陷個(gè)數(shù)預(yù)測(cè)的特征選擇方法。
本發(fā)明提供的技術(shù)方案是一種面向軟件缺陷個(gè)數(shù)預(yù)測(cè)的特征選擇方法,包括以下步驟:
步驟1,挖掘軟件歷史數(shù)據(jù)庫(kù),從中抽取出有用的軟件模塊。軟件模塊粒度可根據(jù)實(shí)際應(yīng)用場(chǎng)景,可設(shè)置為文件、包、類(lèi)或函數(shù)。然后標(biāo)記這些軟件模塊的缺陷數(shù)目。
步驟2,提取軟件模塊中與軟件缺陷有關(guān)的特征,提取了20個(gè)度量屬性:加權(quán)方法數(shù)(wmc),繼承樹(shù)深度(dit),孩子數(shù)(noc),對(duì)象類(lèi)之間的耦合度(cbo),類(lèi)的響應(yīng)(rfc),內(nèi)聚缺乏度(lcom),傳入耦合(ca),傳出耦合(ce),公開(kāi)方法數(shù)(npm),代碼行數(shù)(loc),數(shù)據(jù)訪(fǎng)問(wèn)度量(dam),聚合度量(moa),功能抽象度量(mfa),方法間的內(nèi)聚度(cam),繼承耦合(ic),方法間耦合(cbm),平均方法復(fù)雜度(amc),最大mccabe環(huán)形復(fù)雜度(max_cc),平均mccabe環(huán)形復(fù)雜度(avg_cc)。這20個(gè)特征形成了原始的特征集。
步驟3,利用線(xiàn)性pearson系數(shù)計(jì)算特征之間的關(guān)聯(lián)性,兩個(gè)特征之間的冗余度越大,它們的關(guān)聯(lián)性就越強(qiáng),關(guān)聯(lián)性計(jì)算公式為:
步驟4,利用譜聚類(lèi)算法根據(jù)特征之間的關(guān)聯(lián)性對(duì)這些特征進(jìn)行聚類(lèi),形成k個(gè)簇,具體包括:
步驟4.1,構(gòu)造特征關(guān)聯(lián)性矩陣w,其中wij表示特征fi與特征fj的關(guān)聯(lián)性;兩個(gè)特征的負(fù)相關(guān)性強(qiáng),他們之間的冗余度也很高,由于特征關(guān)聯(lián)性矩陣需要每個(gè)值都為正數(shù),因此需要把步驟3中求得的特征關(guān)聯(lián)性為負(fù)值的轉(zhuǎn)換為絕對(duì)值。
步驟4.2,根據(jù)特征關(guān)聯(lián)性矩陣w計(jì)算歸一化對(duì)角矩陣
步驟4.3,根據(jù)歸一化對(duì)角矩陣d計(jì)算歸一化拉普拉斯圖矩陣l=d1/2wd1/2。
步驟4.4,計(jì)算普拉斯圖矩陣l的特征向量,將前m個(gè)特征值最大的向量按列放置成一個(gè)矩陣x,即x=[v1,v2,…,vm],其中v1,v2,…,vm依次為前m個(gè)特征值最大的特征向量。
步驟4.5,歸一化矩陣x形成矩陣y。
步驟4.6,對(duì)矩陣y按每行為一個(gè)數(shù)據(jù),采用k-means算法對(duì)所有模塊數(shù)據(jù)進(jìn)行聚類(lèi),矩陣y中第i行的數(shù)據(jù)就是原來(lái)的第i個(gè)軟件模塊xi,將特征集劃分為k個(gè)簇。
步驟5,利用線(xiàn)性pearson系數(shù)衡量計(jì)算每個(gè)特征與這些模塊數(shù)據(jù)的缺陷數(shù)目之間的關(guān)聯(lián)性ri,其計(jì)算公式為:
步驟6,根據(jù)特征相關(guān)性對(duì)每個(gè)簇中的特征進(jìn)行排序,從步驟5中獲得的每個(gè)簇中選取相關(guān)性最高的n個(gè)特征構(gòu)成最終的特征子集。
本發(fā)明設(shè)計(jì)了合理的特征選擇策略,首先利用特征與特征之間的關(guān)聯(lián)性,對(duì)特征集進(jìn)行譜聚類(lèi),將相互之間冗余度高的特征聚類(lèi)到同一個(gè)簇中。在聚類(lèi)的結(jié)果中,利用特征與軟件缺陷個(gè)數(shù)之間的相關(guān)性,從每個(gè)簇中選出相關(guān)性最強(qiáng)的幾個(gè)特征,這樣既降低了特征之間的冗余度,又排除了不相關(guān)特征,得到最終的有益于缺陷個(gè)數(shù)預(yù)測(cè)模型性能的特征子集。本發(fā)明的技術(shù)方案具有簡(jiǎn)單、快速的特點(diǎn),得到的特征子集有助于提高軟件缺陷個(gè)數(shù)預(yù)測(cè)模型的性能。
附圖說(shuō)明
圖1本發(fā)明的流程圖。
圖2本發(fā)明實(shí)施例的結(jié)果圖。
具體實(shí)施方式
為了便于本領(lǐng)域普通技術(shù)人員理解和實(shí)施本發(fā)明,下面結(jié)合附圖及實(shí)施例對(duì)本發(fā)明作進(jìn)一步的詳細(xì)描述,應(yīng)當(dāng)理解,此處所描述的實(shí)施示例僅用于說(shuō)明和解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明設(shè)計(jì)的面向軟件缺陷個(gè)數(shù)的特征選擇方法的流程見(jiàn)附圖1,所有步驟可由本領(lǐng)域技術(shù)人員采用計(jì)算機(jī)軟件技術(shù)實(shí)現(xiàn)流程自動(dòng)運(yùn)行。實(shí)施例具體實(shí)現(xiàn)過(guò)程如下:
本發(fā)明設(shè)計(jì)的一種面向軟件缺陷個(gè)數(shù)預(yù)測(cè)的特征選擇方法具體實(shí)現(xiàn)過(guò)程如下:
步驟1,挖掘軟件歷史數(shù)據(jù),從中抽取出有用的軟件模塊。軟件模塊粒度可根據(jù)實(shí)際應(yīng)用場(chǎng)景,可設(shè)置為文件、包、類(lèi)或函數(shù)。然后標(biāo)記這些軟件模塊的缺陷數(shù)目。
步驟2,提取軟件模塊中與軟件缺陷有關(guān)的特征,這些特征形成原始的特征集。為了方便闡述,本實(shí)施例假設(shè)只提取了10個(gè)特征{f0,f1,f2,f3,f4,f5,f6,f7,f8,f9}。
在經(jīng)過(guò)了步驟1-2后,本實(shí)施例假設(shè)在提取模塊特征和標(biāo)記軟件模塊的缺陷數(shù)目后形成了10個(gè)軟件模塊數(shù)據(jù)(最后一位為該模塊的缺陷個(gè)數(shù)):
x1={3.0,1.0,0.0,8.0,14.0,3.0,3.0,5.0,3.0,2.0,‘2’},
x2={13.0,1.0,0.0,1.0,17.0,64.0,0.0,1.0,12.0,0.917,‘0’},
x3={4.0,1.0,0.0,4.0,4.0,6.0,2.0,2.0,4.0,2.0,‘0’},
x4={10.0,1.0,0.0,6.0,31.0,1.0,0.0,6.0,9.0,0.5,‘3’},
x5={7.0,1.0,0.0,6.0,19.0,7.0,0.0,6.0,6.0,0.75,‘0’},
x6={38.0,1.0,0.0,30.0,155.0,485.0,0.0,30.0,34.0,0.9,‘4’},
x7={25.0,1.0,0.0,13.0,74.0,0.0,0.0,13.0,23.0,0.444,‘1’},
x8={13.0,1.0,0.0,19.0,56.0,54.0,0.0,19.0,11.0,0.9,‘3’},
x9={7.0,4.0,4.0,48.0,12.0,19.0,47.0,1.0,6.0,0.94,‘0’},
x10={7.0,1.0,0.0,4.0,7.0,21.0,2.0,2.0,7.0,2.0,‘3’}。
步驟3,利用線(xiàn)性pearson系數(shù)計(jì)算特征之間的關(guān)聯(lián)性,兩個(gè)特征之間的冗余度越大,它們的關(guān)聯(lián)性就越強(qiáng),關(guān)聯(lián)性計(jì)算公式為:
步驟4,利用譜聚類(lèi)算法根據(jù)特征之間的關(guān)聯(lián)性對(duì)這些特征進(jìn)行聚類(lèi),形成k個(gè)簇,具體包括:
步驟4.1,構(gòu)造特征關(guān)聯(lián)性矩陣w,其中wij表示特征fi與特征fj的關(guān)聯(lián)性。兩個(gè)特征的負(fù)相關(guān)性強(qiáng),他們之間的冗余度也很高,由于特征關(guān)聯(lián)性矩陣需要每個(gè)值都為正數(shù),因此需要把步驟3中求得的特征關(guān)聯(lián)性為負(fù)值的轉(zhuǎn)換為絕對(duì)值。本實(shí)施例得到特征關(guān)聯(lián)性矩陣:
步驟4.2,根據(jù)特征關(guān)聯(lián)性矩陣w計(jì)算歸一化對(duì)角矩陣
步驟4.3,根據(jù)歸一化對(duì)角矩陣d計(jì)算歸一化拉普拉斯圖矩陣l=d1/2wd1/2。本實(shí)施例得到拉普拉斯圖矩陣:
步驟4.4,計(jì)算普拉斯圖矩陣l的特征向量,將前m個(gè)特征值最大的向量按列放置成一個(gè)矩陣x,即x=[v1,v2,…,vm],其中v1,v2,…,vm依次為前m個(gè)特征值最大的特征向量;本實(shí)施例設(shè)置m=4,求得矩陣
步驟4.5,歸一化矩陣x形成矩陣y。本實(shí)施例中求得
步驟4.6,對(duì)矩陣y按每行為一個(gè)數(shù)據(jù),采用k-means算法對(duì)所有模塊數(shù)據(jù)進(jìn)行聚類(lèi),矩陣y中第i行的數(shù)據(jù)就是原來(lái)的第i個(gè)軟件模塊xi,將特征集劃分為k個(gè)簇。本實(shí)施例中設(shè)置k=4,將10個(gè)特征劃分為4個(gè)簇:c1={f3,f5},c2={f0,f4,f7,f8},c3={f1,f2,f6},c4={f9}。
步驟5,利用線(xiàn)性pearson系數(shù)衡量計(jì)算每個(gè)特征與這些模塊數(shù)據(jù)的缺陷數(shù)目之間的關(guān)聯(lián)性ri,其計(jì)算公式為:
步驟6,根據(jù)特征相關(guān)性對(duì)每個(gè)簇中的特征進(jìn)行排序,從步驟5中獲得的每個(gè)簇中選取相關(guān)性最高的n個(gè)特征構(gòu)成最終的特征子集。本實(shí)施例中設(shè)置n=1。本實(shí)施例中對(duì)簇c1中的兩個(gè)特征依照相關(guān)性進(jìn)行排序,得到特征f5排列在第一位,特征f3排列在第二位,選取相關(guān)性最高的一個(gè)特征即f5。同理,簇c2中選取相關(guān)性最高的特征f7,簇c3中選取相關(guān)性最高的特征f6,簇4中選取相關(guān)性最高的特征f9。最終,f5、f6、f7和f9構(gòu)成了最終的特征子集。
本文中所描述的具體實(shí)施例僅僅是對(duì)本發(fā)明精神作舉例說(shuō)明。本發(fā)明所屬技術(shù)領(lǐng)域的技術(shù)人員可以對(duì)所描述的具體實(shí)施例做各種各樣的修改或補(bǔ)充或采用類(lèi)似的方式替代,但并不會(huì)偏離本發(fā)明的精神或者超越所附權(quán)利要求書(shū)所定義的范圍。