本發(fā)明屬于軟件質(zhì)量保障領(lǐng)域,具體涉及一種基于兩階段包裹式特征選擇的軟件缺陷預(yù)測(cè)方法。
背景技術(shù):
:軟件缺陷預(yù)測(cè)通過(guò)分析軟件歷史倉(cāng)庫(kù),構(gòu)建缺陷預(yù)測(cè)模型,來(lái)預(yù)先識(shí)別出被測(cè)項(xiàng)目?jī)?nèi)的潛在缺陷程序模塊,通過(guò)將更多測(cè)試資源優(yōu)先分配到這些程序模塊,可以達(dá)到優(yōu)化測(cè)試資源分配,提高軟件產(chǎn)品質(zhì)量的目的。但在搜集缺陷預(yù)測(cè)數(shù)據(jù)集時(shí),若考慮多個(gè)度量元(即特征),則容易造成數(shù)據(jù)集存在維數(shù)災(zāi)難問(wèn)題,即數(shù)據(jù)集內(nèi)會(huì)含有無(wú)關(guān)特征和冗余特征。其中冗余特征是指大量或完全重復(fù)了其他單個(gè)或多個(gè)特征中含有的信息,而無(wú)關(guān)特征則對(duì)采用的分類算法不能提供任何的幫助。特征選擇是一種有效方法,可以嘗試識(shí)別并移除特征空間中的無(wú)關(guān)特征和冗余特征,最終達(dá)到降低數(shù)據(jù)集的維數(shù)、減少訓(xùn)練集的規(guī)模、縮短訓(xùn)練時(shí)間、以及提高缺陷預(yù)測(cè)模型的性能。特征選擇方法在研究時(shí)主要存在兩個(gè)難點(diǎn):(1)特征交互問(wèn)題。該問(wèn)題是指特征之間存在兩兩交互、三三交互甚至更高強(qiáng)度的交互。一方面,一個(gè)特征可能跟類標(biāo)的關(guān)聯(lián)度不大,但如果該特性與其他特征存在互補(bǔ)關(guān)系,則可以顯著提升分類方法的性能,因此,移除這類特征會(huì)造成選出的特征子集并不是最優(yōu)的。另一方面,某一特征雖然與類標(biāo)存在很強(qiáng)的相關(guān)性,但若與其他特征放在一起時(shí),可能會(huì)具有一定冗余性,因此會(huì)造成分類方法性能的下降。(2)搜索空間大。搜索空間會(huì)隨著特征數(shù)的增加呈指數(shù)級(jí)增長(zhǎng)(即相對(duì)于n個(gè)特征,其可能的特征子集數(shù)為2n個(gè))。在大部分情況下,搜索所有可能的子集是不可行的。目前常見(jiàn)的特征選擇方法可以簡(jiǎn)單分為包裹式方法和過(guò)濾式方法。其中包裹式方法借助預(yù)先指定的分類方法的預(yù)測(cè)性能來(lái)決定選擇出的特征子集,雖然可以取得更好的預(yù)測(cè)性能,但以增加計(jì)算開(kāi)銷為代價(jià)。而過(guò)濾式方法則根據(jù)數(shù)據(jù)集的特征完成特征的選擇,因此與選擇的分類方法無(wú)關(guān),通用性更好且計(jì)算開(kāi)銷較小,但性能并不保證。在軟件缺陷預(yù)測(cè)問(wèn)題中,模型的性能非常重要,因此發(fā)明重點(diǎn)關(guān)注包裹式特征選擇方法。除此之外,由于軟件缺陷在被測(cè)項(xiàng)目?jī)?nèi)部的分布存在類不平衡問(wèn)題,即大部分缺陷都集中存在于少數(shù)程序模塊之內(nèi)。因此搜集到的缺陷預(yù)測(cè)數(shù)據(jù)集存在明顯的類不平衡問(wèn)題,即缺陷模塊(多數(shù)類)的數(shù)量要遠(yuǎn)遠(yuǎn)少于無(wú)缺陷模塊(少數(shù)類)的數(shù)量。因此在設(shè)計(jì)包裹式特征選擇方法的同時(shí),需要考慮類不平衡問(wèn)題。綜上所述,為有效緩解缺陷預(yù)測(cè)數(shù)據(jù)集內(nèi)存在的維數(shù)災(zāi)難問(wèn)題和類不平衡問(wèn)題,有必要設(shè)計(jì)出一種有效的基于包裹式特征選擇的軟件缺陷預(yù)測(cè)方法。本發(fā)明由此而生。技術(shù)實(shí)現(xiàn)要素:本發(fā)明的目的在于提供基于兩階段包裹式特征選擇的軟件缺陷預(yù)測(cè)方法,一方面可以有效識(shí)別并移除缺陷預(yù)測(cè)數(shù)據(jù)集內(nèi)的冗余特征和無(wú)關(guān)特征,另一方面可以有效緩解缺陷預(yù)測(cè)數(shù)據(jù)集內(nèi)的類不平衡問(wèn)題;具有缺陷預(yù)測(cè)模型構(gòu)建時(shí)間短和模型預(yù)測(cè)性能高的優(yōu)點(diǎn),從而可以更為精準(zhǔn)的預(yù)測(cè)出被測(cè)項(xiàng)目?jī)?nèi)的潛在缺陷程序模塊,最終達(dá)到優(yōu)化測(cè)試資源分配和提高軟件產(chǎn)品質(zhì)量的目的。為實(shí)現(xiàn)上述目的,本發(fā)明采用如下的技術(shù)方案:一種基于兩階段包裹式特征選擇的軟件缺陷預(yù)測(cè)方法,包括如下步驟:(1)挖掘軟件項(xiàng)目的版本控制系統(tǒng)和缺陷跟蹤系統(tǒng),從中抽取程序模塊;所述程序模塊的粒度根據(jù)缺陷預(yù)測(cè)的目的可設(shè)置為文件、包、類或函數(shù);隨后對(duì)上述每個(gè)程序模塊,通過(guò)分析缺陷跟蹤系統(tǒng)內(nèi)的缺陷報(bào)告信息進(jìn)行標(biāo)記;最后基于軟件代碼復(fù)雜度或軟件開(kāi)發(fā)過(guò)程分析,設(shè)計(jì)出與軟件缺陷存在相關(guān)性的度量元,并借助這些度量元完成對(duì)每個(gè)程序模塊的度量;通過(guò)對(duì)程序模塊進(jìn)行類型標(biāo)記和軟件度量,生成缺陷預(yù)測(cè)數(shù)據(jù)集D;(2)對(duì)缺陷預(yù)測(cè)數(shù)據(jù)集D進(jìn)行兩階段包裹式特征選擇,從原有特征集FS中移除原有數(shù)據(jù)集內(nèi)的冗余特征和無(wú)關(guān)特征,得到最優(yōu)特征子集FS';(3)基于最優(yōu)特征子集FS',對(duì)數(shù)據(jù)集D進(jìn)行預(yù)處理并形成預(yù)處理后的數(shù)據(jù)集D',即保留最優(yōu)特征子集FS'中的特征,最終采用決策樹分類方法,構(gòu)建出缺陷預(yù)測(cè)模型。本發(fā)明步驟(2)中執(zhí)行兩階段包裹式特征選擇方法包括如下步驟:2-1)在缺陷預(yù)測(cè)數(shù)據(jù)集中,有缺陷模塊的數(shù)量要遠(yuǎn)少于無(wú)缺陷模塊的數(shù)量,因此在第一階段用類不平衡學(xué)習(xí)方法SMOTE合成新的少數(shù)虛擬的有缺陷模塊,即每一次從有缺陷模塊中隨機(jī)選擇模塊a,并從該模塊a的最近鄰中隨機(jī)選擇一個(gè)模塊b,然后在模塊a和模塊b之間構(gòu)成的連線上隨機(jī)選擇1點(diǎn),作為新合成的虛擬的有缺陷模塊;若原有缺陷預(yù)測(cè)數(shù)據(jù)集D中的無(wú)缺陷模塊的實(shí)例數(shù)為nmax,有缺陷模塊的實(shí)例數(shù)為nmin,則應(yīng)用SMOTE方法后會(huì)額外合成nmin個(gè)有缺陷模塊樣本,最終形成預(yù)處理后的數(shù)據(jù)集D1;2-2)在第二階段,基于數(shù)據(jù)集D1,采用一種針對(duì)缺陷預(yù)測(cè)問(wèn)題定制的遺傳算法,從原有特征集FS中移除原有數(shù)據(jù)集內(nèi)的冗余特征和無(wú)關(guān)特征,選出最優(yōu)特征子集FS',形成預(yù)處理后的數(shù)據(jù)集D';本發(fā)明步驟2-2)中的遺傳算法包括如下步驟:2-2-1)初始化種群:假設(shè)缺陷預(yù)測(cè)數(shù)據(jù)集原有特征集FS包含n個(gè)特征,則種群內(nèi)的每個(gè)染色體用n比特串進(jìn)行編碼,若第i個(gè)比特取值為1,則表示對(duì)應(yīng)的第i個(gè)特征被選擇,否則比特取值為0;在初始化種群時(shí),針對(duì)每個(gè)染色體,每個(gè)比特隨機(jī)賦值,即賦值為1或賦值為0;隨后依次計(jì)算每個(gè)染色體的適應(yīng)值,其計(jì)算過(guò)程按照以下步驟進(jìn)行:2-2-1-1)首先讀取染色體對(duì)應(yīng)的特征子集FSt;然后將數(shù)據(jù)集D'均勻劃分為5份,并確保每一份數(shù)據(jù)與原數(shù)據(jù)集的類分布保持一致;2-2-1-2)取其中四份構(gòu)成訓(xùn)練集,剩余一份構(gòu)成測(cè)試集,借助選出的特征子集FSt對(duì)訓(xùn)練集和測(cè)試集進(jìn)行預(yù)處理,僅保留選中的特征,基于預(yù)處理后的訓(xùn)練集,借助決策樹分類方法構(gòu)建預(yù)測(cè)模型,并基于預(yù)處理后的測(cè)試集計(jì)算出模型的AUC值;上述過(guò)程重復(fù)5次,確保每份數(shù)據(jù)都至少被用做測(cè)試集一次;2-2-1-3)計(jì)算出這5個(gè)AUC值的均值A(chǔ)UCavg,并將1-AUCavg作為染色體對(duì)應(yīng)的適應(yīng)值并返回;2-2-2)基于上一種群,依次執(zhí)行選擇算子、交叉算子和變異算子,形成新的種群;其中選擇算子在執(zhí)行時(shí),每一次從上一個(gè)種群中選出適應(yīng)值最高的染色體,并重復(fù)一份放入新的種群中;交叉算子在每次執(zhí)行時(shí),基于交叉概率,從上一種群中隨機(jī)選擇兩個(gè)染色體,并隨機(jī)確定交叉點(diǎn),然后進(jìn)行交叉并形成兩個(gè)新的染色體,并將這兩個(gè)新的染色體放入新的種群;變異算子在每次執(zhí)行時(shí),基于變異概率,從上一種群中隨機(jī)選擇一個(gè)染色體,并隨機(jī)確定變異點(diǎn),然后進(jìn)行變異并形成一個(gè)新的染色體,并將這個(gè)新的染色體放入新的種群;當(dāng)新的種群生成結(jié)束后,依次計(jì)算出每個(gè)染色體的適應(yīng)值,并更新種群中的最優(yōu)染色體,所述最優(yōu)染色體為適應(yīng)值最小的染色體;針對(duì)軟件缺陷預(yù)測(cè)問(wèn)題,在種群最優(yōu)染色體更新的時(shí)候,按照如下步驟進(jìn)行:2-2-2-1)若當(dāng)前染色體c的適應(yīng)值小于種群最優(yōu)染色體,則用染色體c替換種群最優(yōu)染色體;2-2-2-2)若當(dāng)前染色體c的適應(yīng)值與種群最優(yōu)染色體一樣,則進(jìn)一步比較當(dāng)前染色體對(duì)應(yīng)的特征子集的規(guī)模,并與種群最優(yōu)染色體對(duì)應(yīng)的特征子集規(guī)模進(jìn)行比較,若當(dāng)前染色體對(duì)應(yīng)的特征子集的規(guī)模更小,則用染色體c替換種群最優(yōu)染色體;2-2-3)若滿足種群演化的終止準(zhǔn)則,則返回當(dāng)前種群中的最優(yōu)染色體對(duì)應(yīng)的特征子集FS',否則繼續(xù)執(zhí)行步驟2-2-2);其中種群在演化時(shí),若達(dá)到指定的代數(shù)或種群提前收斂,則滿足終止準(zhǔn)則并停止種群演化。傳統(tǒng)的軟件缺陷預(yù)測(cè)方法在進(jìn)行包裹式特征選擇時(shí),主要考慮了兩類方法:(1)基于前向搜索的包裹式特征選擇方法。該方法從空集開(kāi)始,每次嘗試選出一個(gè)特征,并加入到特征子集中,當(dāng)新的特征子集的預(yù)測(cè)性能不如上一輪的特征子集的預(yù)測(cè)性能時(shí),添加過(guò)程結(jié)束。(2)基于后向搜索的包裹式特征選擇方法,該方法從考慮所有特征開(kāi)始,每次嘗試移除一個(gè)特征,當(dāng)新的特征子集的預(yù)測(cè)性能不如上一輪的特征子集的預(yù)測(cè)性能時(shí),移除過(guò)程結(jié)束。但上述兩種基于貪婪策略的方法均容易陷入局部最優(yōu),并造成選出的特征子集未必是最優(yōu)解。與上述已有技術(shù)相比,本發(fā)明借助遺傳算法這一全局優(yōu)化算法進(jìn)行特征選擇,遺傳算法作為一種全局優(yōu)化算法,可以有效避免陷入局部最優(yōu)解,從而有助于找出更優(yōu)的特征子集,并可以有效提高訓(xùn)練出的缺陷預(yù)測(cè)模型的性能。除此之外,本發(fā)明還通過(guò)額外借助SMOTE方法來(lái)緩解數(shù)據(jù)集內(nèi)的類不平衡問(wèn)題,從而可以進(jìn)一步提升缺陷預(yù)測(cè)模型的性能。實(shí)踐表明基于本發(fā)明設(shè)計(jì)的兩階段包裹式特征選擇方法,可以更為有效的移除缺陷預(yù)測(cè)數(shù)據(jù)集內(nèi)的冗余特征和無(wú)關(guān)特征,很好的緩解數(shù)據(jù)集內(nèi)的類不平衡問(wèn)題,最終可以訓(xùn)練出具有更高預(yù)測(cè)性能的缺陷預(yù)測(cè)模型,因此可以更加精準(zhǔn)的預(yù)測(cè)出被測(cè)項(xiàng)目的潛在缺陷程序模塊,最終達(dá)到優(yōu)化測(cè)試資源分配和提高軟件產(chǎn)品質(zhì)量的目的。附圖說(shuō)明圖1是本發(fā)明的總體流程圖。圖2是特征選擇方法流程圖圖3是本發(fā)明針對(duì)軟件缺陷預(yù)測(cè)問(wèn)題定制的遺傳算法的流程圖。圖4是本發(fā)明染色體適應(yīng)值計(jì)算過(guò)程的流程圖。圖5是本發(fā)明交叉算子和變異算子的執(zhí)行示意圖。圖6是本發(fā)明5次2折交叉驗(yàn)證的流程圖。具體實(shí)施方式為了更詳盡的表述上述發(fā)明的技術(shù)路線,以下本發(fā)明人列舉出具體的實(shí)施例來(lái)說(shuō)明技術(shù)效果;需要強(qiáng)調(diào)的是,這些實(shí)施例是用于說(shuō)明本發(fā)明而不限于限制本發(fā)明的范圍。實(shí)施例本實(shí)施例的基于兩階段包裹式特征選擇的軟件缺陷預(yù)測(cè)方法的總體流程圖如圖1所示,包含如下步驟:(1)挖掘軟件項(xiàng)目的版本控制系統(tǒng)(例如CVS、SVN或Git等)和缺陷跟蹤系統(tǒng)(例如Bugzilla、Mantis或Jira等),從中抽取程序模塊。程序模塊的粒度可以根據(jù)缺陷預(yù)測(cè)的目的設(shè)置為文件、包、類或函數(shù)等。隨后對(duì)每個(gè)程序模塊,根據(jù)缺陷跟蹤系統(tǒng)內(nèi)的缺陷報(bào)告信息進(jìn)行標(biāo)記(即將每個(gè)程序模塊分別標(biāo)記為有缺陷類型或無(wú)缺陷類型)。最后基于軟件代碼復(fù)雜度或軟件開(kāi)發(fā)過(guò)程分析,設(shè)計(jì)出與軟件缺陷存在相關(guān)性的度量元(即特征),并借助這些度量元完成對(duì)每個(gè)程序模塊的度量。通過(guò)對(duì)程序模塊進(jìn)行標(biāo)記和軟件度量,生成缺陷預(yù)測(cè)數(shù)據(jù)集D。若將數(shù)據(jù)集存儲(chǔ)為Weka軟件支持的格式,則來(lái)自某一實(shí)際項(xiàng)目的缺陷預(yù)測(cè)數(shù)據(jù)集的具體內(nèi)容如下所示(其中//后面是注釋)。(2)對(duì)缺陷預(yù)測(cè)數(shù)據(jù)集進(jìn)行兩階段包裹式特征選擇,嘗試從原有特征集FS中選出最優(yōu)特征子集FS',以盡可能多的移除數(shù)據(jù)集內(nèi)的冗余特征和無(wú)關(guān)特征。具體流程如圖2所示。(3)基于最優(yōu)特征子集FS',對(duì)數(shù)據(jù)集D進(jìn)行預(yù)處理(即僅保留FS'中的特征),并形成預(yù)處理后的數(shù)據(jù)集D',最終借助決策樹這一分類方法,構(gòu)建出缺陷預(yù)測(cè)模型。所述步驟(2)中執(zhí)行兩階段包裹式特征選擇方法按照以下步驟進(jìn)行:2-1)在第一階段借助類不平衡學(xué)習(xí)方法SMOTE,來(lái)緩解數(shù)據(jù)集內(nèi)有缺陷模塊(即少數(shù)類)數(shù)遠(yuǎn)少于無(wú)缺陷模塊(即多數(shù)類)數(shù)的問(wèn)題。SMOTE方法嘗試合成新的少數(shù)類樣本,即每一次會(huì)從少數(shù)類中隨機(jī)選擇模塊a,并從該模塊的最近鄰中隨機(jī)選擇一個(gè)模塊b,然后在a和b之間構(gòu)成的連線上隨機(jī)選擇1點(diǎn),作為新合成的少數(shù)類實(shí)例。假設(shè)原有數(shù)據(jù)集D中的多數(shù)類的實(shí)例數(shù)為nmax,少數(shù)類的實(shí)例數(shù)為nmin。則應(yīng)用SMOTE方法后(假設(shè)需要虛擬創(chuàng)造出的少數(shù)類實(shí)例的比例為100%),會(huì)額外合成nmin個(gè)少數(shù)類樣本,最終形成預(yù)處理后的數(shù)據(jù)集D1。2-2)在第二階段,基于數(shù)據(jù)集D1,借助針對(duì)軟件缺陷預(yù)測(cè)問(wèn)題定制的一種遺傳算法(其執(zhí)行過(guò)程如圖3所示),嘗試從原有特征集FS中選出最優(yōu)特征子集FS'。步驟2-2)中針對(duì)軟件缺陷預(yù)測(cè)問(wèn)題定制的一種遺傳算法按照以下步驟進(jìn)行:2-2-1)初始化種群。假設(shè)缺陷預(yù)測(cè)數(shù)據(jù)集原有特征集FS包含n個(gè)特征,則種群內(nèi)的每個(gè)染色體用n比特串進(jìn)行編碼,若第i個(gè)比特取值為1,則表示對(duì)應(yīng)的第i個(gè)特征被選擇,否則比特取值為0。在初始化種群時(shí),針對(duì)每個(gè)染色體,每個(gè)比特隨機(jī)賦值(即賦值為1或賦值為0)。假設(shè)有5個(gè)特征{f1,f2,f3,f4,f5},則初始種群可能為{00100,10010,10110}。其含義是該初始種群共包括三個(gè)染色體,這三個(gè)染色體對(duì)應(yīng)的特征子集分別為:{f3},{f1,f4},{f1,f3,f4}。隨后依次計(jì)算每個(gè)染色體的適應(yīng)值,其計(jì)算過(guò)程按照以下步驟進(jìn)行:2-2-1-1)首先讀取染色體對(duì)應(yīng)的特征子集FSt。然后將數(shù)據(jù)集D'均勻劃分為5份,并確保每一份數(shù)據(jù)與原數(shù)據(jù)集的類分布保持一致。2-2-1-2)取其中四份構(gòu)成訓(xùn)練集,剩余一份構(gòu)成測(cè)試集,借助選出的特征子集FSt對(duì)訓(xùn)練集和測(cè)試集進(jìn)行預(yù)處理(即僅保留選中的特征),基于預(yù)處理后的訓(xùn)練集,借助決策樹分類方法構(gòu)建預(yù)測(cè)模型,并基于預(yù)處理后的測(cè)試集計(jì)算出模型的AUC值(模型的一種經(jīng)典性能評(píng)測(cè)指標(biāo))。上述過(guò)程重復(fù)5次,確保每份數(shù)據(jù)都至少被用做測(cè)試集一次。具體計(jì)算過(guò)程如圖4所示。2-2-1-3)計(jì)算出這5個(gè)AUC值的均值A(chǔ)UCavg,并將1-AUCavg作為染色體對(duì)應(yīng)的適應(yīng)值并返回。不難看出,適應(yīng)值越小,表示染色體的質(zhì)量越高。2-2-2)基于上一種群,依次執(zhí)行選擇算子、交叉算子和變異算子,以形成新的種群。其中選擇算子在執(zhí)行時(shí),會(huì)每一次從上一個(gè)種群中選出適應(yīng)值最高的染色體,并重復(fù)一份放入新的種群中。交叉算子在每次執(zhí)行時(shí),會(huì)基于交叉概率,從上一種群中隨機(jī)選擇兩個(gè)染色體,并隨機(jī)確定交叉點(diǎn),然后進(jìn)行交叉并形成兩個(gè)新的染色體,并將這兩個(gè)新的染色體放入新的種群。假設(shè)交叉算子隨機(jī)選出兩個(gè)染色體,分別是00100和01101,并隨機(jī)確定第三位為交叉點(diǎn)并完成交叉操作,最終會(huì)形成兩個(gè)新的染色體,分別是00101和01100。變異算子在每次執(zhí)行時(shí),會(huì)基于變異概率,從上一種群中隨機(jī)選擇一個(gè)染色體,并隨機(jī)確定變異點(diǎn),然后進(jìn)行變異并形成一個(gè)新的染色體,并將這個(gè)新的染色體放入新的種群。當(dāng)新的種群生成結(jié)束后,假設(shè)變異算子隨機(jī)選出一個(gè)染色體為01110,并隨機(jī)確定第三位為變異位,因?yàn)楫?dāng)前染色體的第三位取值為1,則應(yīng)用變異算子后,該值將變?yōu)?,并形成一個(gè)新的染色體為01010。交叉算子和變異算子的具體示意圖如圖5所示。依次計(jì)算出每個(gè)染色體的適應(yīng)值,并更新種群中的最優(yōu)染色體(即適應(yīng)值最小的染色體)。針對(duì)軟件缺陷預(yù)測(cè)問(wèn)題,在種群最優(yōu)染色體更新的時(shí)候,按照如下步驟進(jìn)行:2-2-2-1)如果當(dāng)前染色體c的適應(yīng)值小于種群最優(yōu)染色體,則用染色體c替換種群最優(yōu)染色體。2-2-2-2)如果當(dāng)前染色體c的適應(yīng)值與種群最優(yōu)染色體一樣,則進(jìn)一步比較當(dāng)前染色體對(duì)應(yīng)的特征子集的規(guī)模,并與種群最優(yōu)染色體對(duì)應(yīng)的特征子集規(guī)模進(jìn)行比較,若當(dāng)前染色體對(duì)應(yīng)的特征子集的規(guī)模更小,則用染色體c替換種群最優(yōu)染色體。2-2-3)若滿足種群演化的終止準(zhǔn)則,則返回當(dāng)前種群中的最優(yōu)染色體對(duì)應(yīng)的特征子集FS',否則繼續(xù)執(zhí)行步驟2-2-2)。其中種群在演化時(shí),若達(dá)到指定的代數(shù)或種群提前收斂,則滿足終止準(zhǔn)則并停止種群演化。以下通過(guò)實(shí)際項(xiàng)目,對(duì)本發(fā)明的有效性進(jìn)行驗(yàn)證。我們分析了一組實(shí)際項(xiàng)目,這些項(xiàng)目在程序模塊度量時(shí),考慮的度量元與代碼規(guī)模、McCabe環(huán)路復(fù)雜度、以及Halstead復(fù)雜度有關(guān)。表1總結(jié)了這些實(shí)際項(xiàng)目中的缺陷預(yù)測(cè)數(shù)據(jù)集的統(tǒng)計(jì)特征,包括項(xiàng)目名稱、特征數(shù)、模塊數(shù)、缺陷模塊數(shù)以及缺陷模塊所占的比例。不難看出這些數(shù)據(jù)的特征數(shù)較多,介于36~39之間,包含的模塊數(shù)介于125~1988之間。同時(shí)數(shù)據(jù)集存在明顯的類不平衡問(wèn)題,其缺陷模塊所占比例介于0.02~0.35之間。表1數(shù)據(jù)集的特征統(tǒng)計(jì)在實(shí)驗(yàn)中選擇AUC(areaunderROCcurve)作為模型的性能評(píng)測(cè)指標(biāo)。在性能評(píng)估時(shí),主要考慮的是5次2折交叉驗(yàn)證。其中2折交叉驗(yàn)證是指將數(shù)據(jù)集D劃分為2個(gè)大小相近的互斥子集D1和D2。其中D1∪D2=D,D1和D2在劃分時(shí),借助分層采樣來(lái)確保這兩個(gè)子集的數(shù)據(jù)分別與原有數(shù)據(jù)集D的分布保持一致。但將數(shù)據(jù)集劃分為2個(gè)子集存在很多劃分方式,為了減少因樣本劃分不同而引入的差別,實(shí)驗(yàn)時(shí)將2折交叉驗(yàn)證重復(fù)5次。其具體流程如圖6所示。實(shí)驗(yàn)重點(diǎn)考慮了三種經(jīng)典的包裹式特征選擇方法:(1)基于前向搜索的包裹式特征選擇方法(簡(jiǎn)稱FW),該方法從空集開(kāi)始,每次嘗試選出一個(gè)特征,并加入到特征子集中,當(dāng)新的特征子集的預(yù)測(cè)性能不如上一輪的特征子集的預(yù)測(cè)性能時(shí),添加過(guò)程結(jié)束。(2)基于后向搜索的包裹式特征選擇方法(簡(jiǎn)稱BW),該方法從考慮所有特征開(kāi)始,每次嘗試移除一個(gè)特征,當(dāng)新的特征子集的預(yù)測(cè)性能不如上一輪的特征子集的預(yù)測(cè)性能時(shí),移除過(guò)程結(jié)束。(3)不進(jìn)行特征選擇的軟件缺陷預(yù)測(cè)方法(簡(jiǎn)稱Origin),該方法不做特征選擇,即保留已有特征。發(fā)明提出的方法和基準(zhǔn)方法均基于Weka軟件包予以實(shí)現(xiàn)。其中發(fā)明在步驟2-1)中的SMOTE方法的參數(shù)取值設(shè)置如下:最近鄰數(shù)設(shè)置為5,需要虛擬創(chuàng)造出的少數(shù)類實(shí)例的比例為100%(假設(shè)原有數(shù)據(jù)集中少數(shù)類實(shí)例的個(gè)數(shù)是10,則基于上述參數(shù),SMOTE方法會(huì)額外虛擬創(chuàng)造出10個(gè)少數(shù)類實(shí)例)。在步驟2-2)中的遺傳算法的參數(shù)取值設(shè)置如下:種群規(guī)模為20,最大迭代次數(shù)為20,變異概率為0.7,交叉概率為0.1。發(fā)明在模型性能評(píng)估的時(shí)候,考慮的是5次2折交叉驗(yàn)證。在每一折的運(yùn)行時(shí),考慮到遺傳算法內(nèi)存在的隨機(jī)因素,因此我們會(huì)獨(dú)立運(yùn)行發(fā)明設(shè)計(jì)的方法5次,并最終選擇其中的最優(yōu)值。最終基于決策樹分類方法的結(jié)果如表2所示。由于每個(gè)數(shù)據(jù)集在不同方法下會(huì)有10個(gè)不同的執(zhí)行結(jié)果(如圖6所示),我們?nèi)∑渲械闹形粩?shù)并列在表中。我們對(duì)其中的最優(yōu)結(jié)果進(jìn)行了加粗表示。表2基于決策樹分類方法的AUC值基于表2,不難看出,在所有項(xiàng)目中,發(fā)明設(shè)計(jì)的方法均要優(yōu)于FW、BW和Origin。發(fā)明設(shè)計(jì)的是一種兩階段包裹式特征選擇方法,隨后我們進(jìn)一步分析在第一階段,考慮SMOTE方法和不考慮SMOTE方法時(shí)的性能差異,同樣我們也取其中的中位數(shù)。最終結(jié)果如表3所示。結(jié)果表明:除了PC1項(xiàng)目,進(jìn)行SMOTE的方法在基于決策樹分類方法上,均要優(yōu)于未進(jìn)行SMOTE的方法。該實(shí)驗(yàn)結(jié)果驗(yàn)證了發(fā)明設(shè)計(jì)的方法的有效性。表3基于決策樹分類方法的AUC值分析項(xiàng)目未進(jìn)行SMOTE進(jìn)行SMOTECM10.63650.677KC30.63950.6835MC10.6310.729MC20.63750.694MW10.61650.6335PC10.76550.7465PC20.50.731PC30.71650.7357PC40.8670.8675PC50.6920.712上述實(shí)例只為說(shuō)明本發(fā)明的技術(shù)構(gòu)思及特點(diǎn),其目的在于讓熟悉此項(xiàng)技術(shù)的人能夠了解本發(fā)明的內(nèi)容并據(jù)以實(shí)施,并不能以此限制本發(fā)明的保護(hù)范圍。根據(jù)本發(fā)明精神實(shí)質(zhì)所做的等價(jià)變化或修飾,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。當(dāng)前第1頁(yè)1 2 3