涂吉屏,錢 曄,王 煒,2,范道遠,張涵宇
1.云南大學 軟件學院,昆明 650500
2.云南省軟件工程重點實驗室,昆明 650500
3.云南農(nóng)業(yè)大學 大數(shù)據(jù)學院(信息工程學院),昆明 650201
軟件故障預測通過設計與代碼或軟件開發(fā)過程相關的度量指標(metrics),并挖掘軟件歷史倉庫中的缺陷數(shù)據(jù)來建立預測模型,以確定待評估軟件模塊是否具有易發(fā)生故障的傾向[1-3]。故障預測中度量指標即為特征,以一組代碼的特征xi及其類標yi作為輸入構(gòu)建預測模型,并以新代碼模塊的特征xi預測其yi的傾向性,即預測該代碼模塊是否可能存在潛在的故障。實現(xiàn)高效的軟件故障預測幫助開發(fā)及維護人員將有限資源集中分配到有發(fā)生故障傾向性的軟件模塊[4-5],但由于構(gòu)建預測模型的數(shù)據(jù)種類較多,若采用大量度量指標建立預測模型,容易造成維度災難,且因其中含有無關特征,可能使預測模型性能受到不良影響[6-7],因此特征選擇方法是建立故障預測模型前的重要步驟[8]。特征選擇旨在選取一個特征子集x'i來代替原始特征集xi,以壓縮特征維數(shù),提高模型預測精度,減少計算資源消耗,建立預測模型之前對特征進行選擇具有研究意義。
現(xiàn)有用于故障預測的特征選擇方法可分為特征排序和特征子集選擇兩類。特征排序方法單獨計算每個特征對結(jié)果的影響值,并根據(jù)影響值將特征降排列,常見的特征排序方法有卡方檢驗[9]、相關性[10]、信息增益[11]、信息增益率[12]等;特征子集選擇方法評估各特征對結(jié)果的影響值,并基于搜索方法建立特征子集,部分特征子集選擇方法評估特征間的相關性[13]、一致性[14-15]來確定最終子集,屬過濾器方法;部分方法采用學習器的結(jié)果反饋調(diào)整所選特征個數(shù),屬包裝器方法?,F(xiàn)有方法主要存在以下不足:(1)特征排序方法僅考慮了單個特征對結(jié)果的影響,無法確定采用幾個排名靠前的特征建立預測模型,有效性不高;(2)特征子集選擇方法需搜索所有可能子集,消耗大量計算資源,且傾向于選擇較多特征建立模型,無法有效減少特征維度,算法復雜度較高,增加故障預測過程的復雜性。
針對以上問題,本文提出基于拓展貝葉斯信息準則的特征選擇方法(extended Bayesian information criteria based feature selection technique,EBIC-FS)。本文方法屬特征排序方法,在排序的基礎上評估采用多少個排名靠前的特征建立故障預測模型,具體為利用拓展貝葉斯信息準則[16]對特征進行排序,再在特征排名列表的基礎上用該準則評估前k個特征構(gòu)成的特征子集,選擇EBIC值最小的k個特征所構(gòu)成子集建立預測模型,所選特征子集維數(shù)較低且提高特征子集預測性能。本文主要貢獻如下:
(1)運用拓展貝葉斯信息準則對故障特征排序,并對排名前k的特征構(gòu)成的軟件故障特征子集進行評估。該方法選擇的特征子集對類標具有較好的解釋能力,即其對真實數(shù)據(jù)的擬合程度較高,克服了傳統(tǒng)特征排序方法有效性低的缺點。
(2)待評估特征子集個數(shù)較少,且所選特征子集維數(shù)較低,與特征子集選擇窮盡搜索方法相比,資源消耗小,且有效壓縮特征維度,降低了故障預測模型復雜度。
軟件故障預測以預測程序模塊故障數(shù)量或故障傾向性為目標,可分為從軟件歷史倉庫中產(chǎn)生實例、對產(chǎn)生的程序模塊[17]進行度量并標記、數(shù)據(jù)預處理、建立預測模型幾個步驟。其中,特征選擇屬數(shù)據(jù)預處理步驟。
軟件故障預測研究關注度量指標及故障數(shù)據(jù)集[4],以n個軟件模塊的度量指標及類標(xi,yi)為輸入訓練預測模型,并用于預測新模塊yi的錯誤傾向性。軟件故障度量指標xi是建立預測模型的基礎,xi=(mi1,mi2,…,mik)是對軟件質(zhì)量評估的量化,為一組從代碼、軟件存儲庫中獲取的與表征軟件故障有關的度量指標及其取值。故障預測的度量指標可分為代碼指標、過程指標和其他指標,代碼指標及過程指標在相關研究中被廣泛使用。
(1)代碼指標
代碼指標收集于現(xiàn)存源代碼,用于度量源代碼的復雜度,并認為復雜度高的程序模塊更容易存在潛在的故障。Size指標[18]是最為常用的軟件復雜度度量指標,最具代表性的Size指標為代碼行數(shù)LOC(lines of code);Halstead指標[19]以操作符和操作數(shù)的數(shù)量計算程序的長度、容量、程序語言等級等;McCabe指標[20]根據(jù)源代碼的控制流程圖中的節(jié)點、弧和連接組件的數(shù)量計算,常用指標有圈復雜度、基本復雜度、模塊設計復雜度;為使度量指標適用于面向?qū)ο蟪绦?,Chidamber和Kemerer提出了CK指標[21],度量面向?qū)ο蟪绦虻鸟詈?、?nèi)聚、繼承及每個類的復雜度;OO指標[22]也是適用于面向?qū)ο蟪绦虻亩攘恐笜耍嬎丬浖K的方法、屬性等數(shù)量。
(2)過程指標
過程指標收集于軟件存儲庫中的歷史信息,它反映代碼的變更程度,認為代碼的變更容易導致故障發(fā)生:Change指標[23]運用版本控制系統(tǒng)中的歷史更改記錄,衡量文件的重構(gòu)、錯誤修改、重構(gòu)次數(shù);Bacchelli等人[24]認為在開發(fā)人員往來電子郵件中常被討論的軟件模塊更易于發(fā)生故障,設計了Popularity指標;Bird等人[25]提出了Ownership and Authorship指標,包含次要貢獻者的數(shù)量、主要貢獻者的數(shù)量、貢獻者總數(shù)等,認為所有權高的錯誤傾向性低;Lee等人[5]提出了Microinteraction指標,認為某個源代碼文件錯誤與編寫時間有關。
由于各類指標從不同角度衡量代碼的故障傾向性,單一種類的度量指標無法全面反映源代碼綜合性能及其故障傾向性,因此進行故障預測需考慮多種指標;但采用多種度量指標建立預測模型易造成維度災難,且其中可能存在某些指標對預測效果有負影響,故對故障特征進行選擇是建立故障預測模型的重要步驟。
特征選擇是軟件故障預測中數(shù)據(jù)預處理的方法之一,分為特征排序和特征子集選擇兩大類[26],又可進一步劃分為過濾器特征排序方法、過濾器特征子集選擇方法以及包裝器特征子集選擇方法[8]。除此之外,還有部分聚類的方法[4,27-28]及特征提取方法[29-30]。文獻[1,8]研究了大量特征選擇方法對故障預測的影響;Shivaji等人[6]將卡方檢驗、信息增益、信息增益率方法運用在故障預測特征選擇中,預測模型的綜合性能提高;Turhan等人在文獻[31]中運用信息增益進行特征選擇。文獻[4,7,28]分別提出兩種特征選擇方法,運用聚類選擇各類中信息量較大的特征組成故障預測數(shù)據(jù)集。
以下對部分特征選擇方法進行簡要介紹。
(1)特征排序方法
特征排序方法單獨給每個特征評分,根據(jù)單個指標對分類結(jié)果的影響值對特征進行排序。
①卡方檢驗公式描述如下:
該方法計算各度量指標xi與類標y的卡方值,選擇卡方值低于閾值的特征建立預測模型。
②相關系數(shù)公式描述如下:
該方法單獨計算每一度量指標xi與類標y的相關系數(shù)來度量特征與類標間的線性關系,選擇相關系數(shù)較高的特征建立預測模型。
③信息增益公式描述如下:
信息增益方法基于信息熵,數(shù)據(jù)集D有無某一特征mik時信息量發(fā)生改變,其差值即為特征mik所含信息量。
④信息增益率公式描述如下:
信息增益有一缺陷,即傾向于選擇值較多的特征;信息增益率可通過懲罰多值特征解決信息增益方法的缺陷,其中分子為信息增益,分母為特征mik的固有值。
以上過濾器特征排序方法易于理解,耗時較短,被廣泛運用于現(xiàn)有研究中[1,8,26,32-33]。但基于排序的特征選擇方法彼此間差異較小且對提高模型預測性能無顯著有效性,在減少特征個數(shù)的同時易發(fā)生信息損失,雖降低了軟件故障預測模型復雜度,但對提高預測模型精度作用較小[1,26,34]。
(2)特征子集選擇方法
特征子集選擇方法查找具有良好預測能力的特征子集,計算各特征重要性并選擇一組特征建立預測模型。
①基于相關的特征子集選擇(correlation-based feature subset selection,CFS)
基于相關性的特征子集選擇方法不僅考慮了單個特征與類標間的相關性,還考慮各特征間的相關性,選擇與類標相關性高且彼此間相關性低的特征構(gòu)成特征子集。
②基于一致性的特征子集選擇(consistencybased feature subset selection,CBS)
基于一致性的特征子集選擇方法搜索該方法與原特征集一致性相等的最小特征子集建立預測模型。
特征子集選擇方法需結(jié)合貪心搜索方法實現(xiàn)特征子集選擇,所選特征子集訓練的模型預測準確度高。特征子集選擇方法可提高模型準確度及預測能力[1,8,35-38]。但此類方法待選特征子集個數(shù)隨特征個數(shù)增多呈指數(shù)級增長,窮盡搜索耗費大量時間;且特征子集選擇方法選擇特征個數(shù)較多,無法有效減少特征維度,預測模型復雜度高,耗費計算資源[39-41]。
與上述方法不同,本文提出了EBIC特征選擇方法。該方法先運用拓展貝葉斯信息準則[16]對各個特征進行排序,再根據(jù)特征排名列表,以最佳屬性——最佳屬性+次佳屬性——最佳屬性+次加屬性+再次佳屬性的次序評估大小遞增的由前k個特征構(gòu)成的特征子集的EBIC值,從中選出最佳特征子集。該方法綜合了特征排序及特征子集選擇的優(yōu)點,與傳統(tǒng)特征排序方法相比對采用幾個排序靠前的特征進行了評估,所建立的預測模型有效性較高,且與特征子集選擇方法相比耗費計算資源少,特征集壓縮程度高。
本文研究過程包含獲取故障數(shù)據(jù)、EBIC-FS特征選擇、建立預測模型三部分,其方法框架如圖1所示,本章重點闡述EBIC-FS特征選擇方法,對故障數(shù)據(jù)及訓練預測模型部分進行簡要概述。
Fig.1 Proposed method framework圖1 本文方法框架
軟件故障數(shù)據(jù)集Dn={(x1,y1),(x2,y2),…,(xn,yn)},包含n條程序模塊故障信息;xi為第i個模塊的特征向量,xi=(mi1,mi2,…,mik),每個特征向量包含k個度量指標(即特征);yi表示第i個程序模塊的類標,yi∈{0,1},“yi=0”表示該模塊無故障,“yi=1”表示該模塊有故障。故障特征選擇旨在減少特征維度,挑選部分特征構(gòu)成特征子集中含特征個數(shù)為。故障特征選擇工作選擇復雜度低、解釋能力強的最佳故障特征子集,以使后續(xù)預測模型有較強預測能力。表1為一個軟件故障數(shù)據(jù)集示例。
Table 1 Example of software defect dataset表1 軟件故障數(shù)據(jù)集示例
3.2.1 拓展貝葉斯信息準則及其特征選擇應用
本文利用EBIC準則,選擇在特征維度上及對數(shù)據(jù)集的描述能力之間達到最佳平衡的特征子集,以降低模型復雜度,提高預測模型性能。拓展貝葉斯信息準則(EBIC)[16]是對傳統(tǒng)貝葉斯信息準則(Bayesian information criteria,BIC)[42]的改進,二者均是模型選擇方法,可在特定的模型空間內(nèi)選擇一個有合適復雜度的最佳模型。BIC準則及EBIC準則公式如下:
BIC傾向于在特征較多的子集中選擇最佳特征集,不利于壓縮特征維度;為解決該問題,EBIC準則在BIC的基礎上增加了一個懲罰項。EBIC公式第一項用于擬合數(shù)據(jù),因在故障數(shù)據(jù)集中,無法獲取各度量指標與類標之間的具體關系,可對其進行參數(shù)估計,即可對數(shù)據(jù)進行線性回歸,其中RSS(residual sum of squares)為殘差平方和,用于衡量模型擬合程度:
RSS計算原始數(shù)據(jù)與其相對應的擬合數(shù)據(jù)點之間的誤差的平方和,RSS越小表明該組特征對類標yi的解釋能力越強,即數(shù)據(jù)擬合程度越高。
當x'的維度增加,即故障特征個數(shù)增多時,特征子集的解釋能力隨之增強,即數(shù)據(jù)擬合程度增加,RSS隨特征維數(shù)增加而降低,但同時也無法有效減少特征個數(shù),增加了故障預測模型的復雜度。因此,兩個懲罰項用以解決該問題,選擇較少數(shù)量的故障特征構(gòu)成最佳特征子集。其中,公式第二項k'為當前子集特征維數(shù),n為故障數(shù)據(jù)樣本量。
公式第三項解決傳統(tǒng)BIC所選特征維數(shù)較多的問題,其中為含k'個變量的模型空間。例如,當k'=1時,模型空間為包含所有僅含1個故障特征的特征子集模型:
參數(shù)γ平滑了在不同維度的模型空間內(nèi)選擇最佳模型的概率,使得在故障特征個數(shù)較多時,所選擇的模型復雜度得以控制,以選擇較少數(shù)量特征并使后續(xù)預測模型達到較優(yōu)性能,當γ=0時,EBIC即等于BIC。
3.2.2 EBIC-FS方法流程
EBIC-FS特征選擇方法采用特征排序方法實現(xiàn),并在特征排序基礎上選擇一組模型擬合程度較高且特征維數(shù)較低的特征。假設原數(shù)據(jù)集含k個特征,其可能的特征子集共有2k-1個,窮盡搜索耗費大量計算資源,而特征排序共需計算k次,子集評估階段將特征排名列表中各特征依次加入特征向量并評估其EBIC值也僅需計算k次。
EBIC-FS特征選擇方法分為特征排序和特征子集評估兩個階段,其中特征排序階段通過評估單個特征解釋能力,將所有含1個特征的模型按EBIC值遞增排序,形成特征排名列表;特征子集評估階段按第一階段特征排名列表將特征依次加入特征向量,組成k個待選模型,從中選出最佳模型,最佳模型所對應的特征向量中所含特征即為所選特征子集。圖2為EBIC-FS特征選擇過程,以一條故障數(shù)據(jù)實例表明,實際特征選擇過程包含n條故障數(shù)據(jù)。3.2.3小節(jié)特征排序階段及3.2.4小節(jié)特征子集評估均根據(jù)圖2進行說明。
Fig.2 Flowchart of EBIC-FS method圖2 EBIC-FS方法流程圖
3.2.3 特征排序階段
第一階段為特征排序,該階段的實現(xiàn)可獲得與類標相關程度的降序排名列表,是后續(xù)評估采用多少個排名靠前的特征建立預測模型的基礎。圖2中故障數(shù)據(jù)Di=(mi1,mi2,mi3,…,mik,yi),原始特征集xi=(mi1,mi2,mi3,…,mik),每個白色方塊為一個特征,代表一個度量指標mik;每組度量指標有一個類標yi,用灰底方塊表示。將每個特征與類標組成k個僅含單個度量指標的模型,可評估每個度量指標導致是否發(fā)生故障的影響參數(shù),即計算模型空間X1中所有模型(mi1,yi),(mi2,yi),(mi3,yi),…,(mik,yi)的EBIC值。計算X1中所有模型的EBIC值,按升序排列,即按每個特征對類標解釋能力降序排列,圖2中以方塊顏色漸淺表示。最終,形成該故障數(shù)據(jù)集的特征排名列表mi4,mi13,mi10,…,mik。因特征排序階段各模型EBIC公式第2、3項參數(shù)相同,其本質(zhì)為計算該度量指標對類標影響值。特征排序階段偽代碼如算法1所示。
算法1特征排序
輸入:故障數(shù)據(jù)Di,包括原特征向量xi及類標yi,xi=(mi1,mi2,mi3,…,mik)。
輸出:特征排名列表。
1./*計算每個單特征模型EBIC值*/
2.forj=1 tok
3.組合mij及類標yi,構(gòu)成單變量模型
4.計算模型(mij,yi)的EBIC值
5.end for
6./*排序*/
7.forj=0;j <k;j++
8.找最小EBIC值模型,與第j個模型交換位置
9.end for
10.得到特征排名列表
特征排序階段輸入故障數(shù)據(jù),包含原特征向量xi及類標yi,輸出特征排名列表,是后續(xù)特征子集評估的基礎。
3.2.4 特征子集評估階段
第二階段為特征子集評估,以確定采用多少個排名靠前的特征組成所選特征子集。第一階段得到特征排名列表mi4,mi13,mi10,…,mik,本階段對排名前k的特征組成的特征子集進行評估。首先,將最佳屬性mi4加入特征向量,構(gòu)成第一個待選特征子集,與類標yi構(gòu)成待選模型1。其次,將排名列表中第二個特征mi13加入特征向量,=(mi4,mi13),構(gòu)成待選模型2。再次,將第三個特征mi10加入特征向量,此時=(mi4,mi13,mi10),構(gòu)成待選模型3。以此類推,直至將特征排名列表中最后一個特征mik加入特征向量,此時得到k個待選模型,第k個模型即為原特征集。計算每個待選特征子集的EBIC值,結(jié)果最小的模型為最佳模型,所對應即為EBIC-FS方法選出的特征子集。如圖2所示,待選模型3為最佳模型,對應=(mi4,mi13,mi10) 為所選特征子集,EBIC-FS方法選出特征mi4、mi13、mi10,將特征個數(shù)由k個減少至3個。特征子集評估階段偽代碼如算法2所示。
算法2EBIC-FS特征子集評估
輸入:特征排名列表及類標。
1.將類標yi放入模型
3./*根據(jù)排名列表組建待選特征子集并計算EBIC值*/
4.令m為特征列表序號
5.form=1 tok
6.將第m個特征mik加入特征向量
7.計算當前模型EBIC值
8.end for
特征子集評估階段輸入特征排名列表及類標,輸出最佳模型及其特征向量中所包含特征即為所選度量指標。因特征子集評估采用排名列表確定前k個特征構(gòu)成的特征子集,待評估特征子集共k個,消耗計算資源小。
本文采用5個分類器分別訓練預測模型,分別為邏輯回歸(logistic regression,LR)、樸素貝葉斯(naive Bayesian,NB)、決策樹(decision tree,DT)、K近鄰(K-nearest neighbor,KNN)和隨機森林(random forest,RF)。訓練預測模型輸入進行特征選擇后的故障特征數(shù)據(jù)集,即輸入n條,包含特征向量及類標yi。輸出待測軟件模塊是否有故障,即待測模塊預測后被標記為“0”或“1”。
本章討論對EBIC-FS方法有效性的證實研究,需回答以下幾個研究問題:
RQ1:EBIC-FS方法是否有效,能否提升預測模型性能?
RQ2:與特征排序方法相比,EBIC-FS方法有效性是否有提升?
RQ3:與特征子集選擇方法相比,EBIC-FS方法能否壓縮特征維度,用其建立的預測模型性能如何?
證實研究部分介紹所用故障數(shù)據(jù)集、對實驗結(jié)果的評價方法、實驗設計以及對實驗結(jié)果的分析。
本文采用D'Ambros等人[43]發(fā)表的基準數(shù)據(jù)集(http://bug.inf.usi.ch/)M&R中Mylyn插件的故障數(shù)據(jù)M&R-Mylyn、Promise公開數(shù)據(jù)集[44](http://openscience.us/repo/defect/ck/)中Promise-ant1.7、Promisexalan2.6作為本文的實驗數(shù)據(jù),數(shù)據(jù)集中各度量指標及其含義如表2所示。
M&R-Mylyn包含類標bug及6個CK指標(表2:1~6),1個Size指標(表2:11),10個OO指標(表2:14~23),15個Change指標(表2:30~44),共計度量指標32個,即 特征個數(shù)k=32 。Promise-ant1.7及Promise-xalan2.6包含類標bug及10個CK指標(表2:1~10),1個Size指標(表2:11),2個McCabe指標(表2:12~13),7個OO指標(表2:23~29),共計度量指標20個,即特征個數(shù)k=20。
本文預測模型均為分類模型,故將各故障數(shù)據(jù)集中類標為“0”的數(shù)據(jù)保留,將類標>0數(shù)據(jù)的類標更改為“1”。由于以上數(shù)據(jù)集中正樣本(類標為1)占整個數(shù)據(jù)集的比例分別為13.5%、22.3%、46.4%,類不平衡問題易導致模型不準確[45-46],故本文根據(jù)文獻[45]建議進行下采樣,通過均勻抽樣減少負樣本個數(shù),具體抽樣方法如下:(1)將數(shù)據(jù)集中正樣本取出,計數(shù)m個;(2)原數(shù)據(jù)集中負樣本為n個,將負樣本減少至m個;(3)將負樣本等距劃分,間距為,隨機設置起點a,則抽取a共m個作為數(shù)據(jù)集的負樣本;(4)原數(shù)據(jù)集中所有正樣本與所抽負樣本組成本文實驗的數(shù)據(jù)集,并打亂數(shù)據(jù)樣本順序。
最終M&R-Mylyn采用245條正樣本數(shù)據(jù)及245條負樣本數(shù)據(jù)構(gòu)成故障數(shù)據(jù)集Dn,n=n1+n0=490,即490個類的故障數(shù)據(jù);Promise-ant1.7采用166條正樣本數(shù)據(jù)及166條負樣本數(shù)據(jù)構(gòu)成故障數(shù)據(jù)集Dn,n=n1+n0=332,即332個類的故障數(shù)據(jù);Promisexalan2.6采用411條正樣本數(shù)據(jù)及411條負樣本數(shù)據(jù)構(gòu)成故障數(shù)據(jù)集Dn,n=n1+n0=822,即822個類的故障數(shù)據(jù)。
本文用5種分類器訓練故障預測模型,實驗結(jié)果將采用5種常見機器學習評價指標:Accuracy(準確率)、Precision(精確度)、Recall(召回率)、F-measure(F值)、FPR(假陽率)對實驗結(jié)果進行評價。
計算以上5種評價指標需考慮真實值與預測值之間的關系。
如表3所示,故障預測研究中TN、FN、FP、TP含義如下。
TN:沒有故障的程序模塊被預測為沒有故障。
FN:有故障的程序模塊被預測為沒有故障。
FP:沒有故障的程序模塊被預測為有故障。
TP:有故障的程序模塊被預測為有故障。
Table 3 Relationship between real and predicted value表3 真實值與預測值關系
已知真實值與預測值的關系,可定義以下評價指標:
(1)準確率(Accuracy)
準確率評價指標簡單直觀,表征預測結(jié)果為正確分類所占比例,即true negative和true positive在所有結(jié)果中所占比例。
(2)精確度(Precision)
精確度表示所有在預測過程中被標記為“1”的程序模塊中,有多少故障模塊。
(3)召回率(Recall)
召回率也叫真陽率,表示在所有真實值為1(即有故障)的程序模塊中,有多少模塊在預測過程中被標記為“1”。
(4)F值(F-measure)
F值是一個綜合評價指標,是召回率和精確度的一個加權調(diào)和平均值。由于召回率和精確度有時是矛盾的,故F-measure更能準確反映預測模型的性能,F(xiàn)-measure較高的模型更為健壯可靠。
(5)假陽率(false positive rate,F(xiàn)PR)
假陽率也被稱為誤報率,表示在所有真實值為“0”(即無故障)的程序模塊中,有多少模塊在預測過程中被錯誤標記為“1”。
為驗證EBIC-FS方法有效性,回答上述3個研究問題,本文進行3組對照實驗,分別與原特征集、特征排序方法、特征子集選擇方法進行對比:
(1)為回答RQ1,本文方法與不進行特征選擇的原數(shù)據(jù)集CompleteSet建立的預測模型進行對比,以驗證EBIC-FS方法的有效性,能否提升預測模型性能。
(2)為回答RQ2,本文方法與卡方檢驗Chi-Square、相關性Correlation、ReliefF方法進行對比,以驗證EBIC-FS方法能否解決基于排序的特征選擇方法有效性低的問題。
(3)文獻[8]驗證了30種特征選擇方法,包括6種特征子集選擇方法,結(jié)果表明結(jié)合BestFirst搜索方法的基于相關性過濾器特征子集選擇方法CFS效果最優(yōu)。為回答RQ3,本文方法與該方法進行對比,以驗證EBIC-FS方法能否以較少特征建立性能較優(yōu)的預測模型。
為使Chi-Square、Correlation、ReliefF方法與CFS方法有對比性,上述3種方法選擇與CFS方法相同數(shù)量的特征。
本文采用5種分類器,其實現(xiàn)運用scikit-learn第三方庫[47]。分別以EBIC-FS方法、原特征集Complete-Set、Chi-Square方法、Correlation方法、ReliefF方法及CFS方法所選特征子集作為數(shù)據(jù)集建立預測模型,各方法分別進行特征選擇,以減少特征維數(shù)后的數(shù)據(jù)集作為訓練及測試數(shù)據(jù),并進行10次十折交叉驗證(10×10-fold cross-validation),每次十折交叉驗證前對數(shù)據(jù)進行打亂重排(shuffle),取10次十折交叉驗證的平均值作為最終結(jié)果,即:(1)將數(shù)據(jù)集劃分10份,編號a~j;(2)將第a~j份數(shù)據(jù)輪流作為測試集,剩余9份數(shù)據(jù)為訓練集進行實驗;(3)得出10次預測相應準確率等評價指標并求其均值。10次十折交叉驗證即為打亂數(shù)據(jù)順序后將以上步驟重復10次,并求其平均值。
所用分類器分別為邏輯回歸、樸素貝葉斯、決策樹、K近鄰、隨機森林;為客觀對比各特征選擇方法有效性,各分類器的參數(shù)均設置為默認值,即采用如下參數(shù)設置:
(1)邏輯回歸
懲罰項penalty=L2,采用L2正則項;正則化參數(shù)C=1.0;停止準則tol=1E-4。
(2)樸素貝葉斯
假設特征符合高斯分布。
(3)決策樹
拆分內(nèi)部節(jié)點最小樣本數(shù)min_samples_split=2;葉子節(jié)點最小樣本數(shù)min_samples_leaf=1。
(4)K近鄰
K=5;葉子數(shù)leaf_size=30;p=2,使用歐幾里德距離。
(5)隨機森林
樹的棵數(shù)n_estimators=10 ;bootstrap=TRUE,進行有放回的抽樣。
本文包含3個數(shù)據(jù)集實驗結(jié)果,每個數(shù)據(jù)集的實驗結(jié)果分為兩部分,分別為特征選擇結(jié)果及預測模型性能結(jié)果。其中,特征選擇結(jié)果為EBIC-FS方法選出的特征子集,是中間結(jié)果;預測模型性能結(jié)果將驗證EBIC-FS方法有效性。
4.4.1 特征選擇結(jié)果
EBIC-FS方法分為特征排序和特征子集評估兩個階段。
(1)特征排序階段
表4~表6為特征排序階段各單特征子集模型的EBIC值。
第一階段結(jié)果顯示,M&R-Mylyn數(shù)據(jù)集特征排序后的遞增特征排名列表為FanOut、NOPRM、NOM、RFC、CBO、WMC、LOC、CHURN(Max)、NOPR、NR、NOPRA、CHURN(Sum)、LINES(SumAdded)、NAUTH、LCOM、NFIX、LINES(SumRemoved)、CHURN(Avg)、NREF、FanIn、LINES(MaxAdded)、NOA、Age、LINES(MaxRemoved)、DIT、NOMI、LINES(AvgAdded)、NOC、NOAI、LINES(AvgRemoved)、NOPA、Age(Weighted);Promise-ant1.7數(shù)據(jù)集遞增特征排名列表為RFC、CE、WMC、LOC、CAM、NOPM、CC(max)、MOA、CC(avg)、DAM、LCOM、IC、CBM、LCOM3、CBO、NOC、CA、DIT、MFA、AMC;Promise-xalan2.6數(shù)據(jù)集遞增特征排名列表為LOC、AMC、LCOM3、RFC、WMC、NOPM、CC(max)、LCOM、MOA、CAM、CBO、MFA、CE、CC(avg)、DAM、CA、DIT、CBM、NOC、IC。
Table 4 EBIC values of single-metric models under M&R-Mylyn dataset表4 在M&R-Mylyn數(shù)據(jù)集下單特征模型EBIC值
Table 5 EBIC values of single-metric models under Promise-ant1.7 dataset表5 在Promise-ant1.7數(shù)據(jù)集下單特征模型EBIC值
Table 6 EBIC values of single-metric models under Promise-xalan2.6 dataset表6 在Promise-xalan2.6數(shù)據(jù)集下單特征模型EBIC值
(2)特征子集評估階段
M&R-Mylyn數(shù)據(jù)集特征子集評估階段包含32個待選模型,Promise數(shù)據(jù)集包含20個待選模型。Model-1包含1個特征,Model-2包含2個特征,以此類推,其中M&R-Mylyn第32個模型為原特征集,Promise第20個模型為原特征集。表7~表9為特征子集評估階段各待選模型EBIC值。
特征子集評估階段顯示:M&R-Mylyn數(shù)據(jù)集Model-4取得待選特征子集中的EBIC最小值,即Model-4為最佳模型,對應特征排名列表中前4個特征FanOut、NOPRM、NOM、RFC;Promise-ant1.7數(shù)據(jù)集Model-7取得待選特征子集中的EBIC最小值,即Model-7為最佳模型,對應特征排名列表中前7個特征RFC、CE、WMC、LOC、CAM、NOPM、CC(max);Promise-xalan2.6數(shù)據(jù)集Model-4取得待選特征子集中的EBIC最小值,即Model-4為最佳模型,對應特征排名列表中前4個特征LOC、AMC、LCOM3、RFC。以上3個特征子集為用EBIC-FS方法進行特征選擇后建立預測模型的數(shù)據(jù)集。
Table 7 EBIC values of candidate models under M&R-Mylyn dataset表7 在M&R-Mylyn數(shù)據(jù)集下待選模型EBIC值
Table 8 EBIC values of candidate models under Promise-ant1.7 dataset表8 在Promise-ant1.7數(shù)據(jù)集下待選模型EBIC值
Table 9 EBIC values of candidate models under Promise-xalan2.6 dataset表9 在Promise-xalan2.6數(shù)據(jù)集下待選模型EBIC值
4.4.2 預測模型性能結(jié)果
為驗證本文方法有效性,在基準數(shù)據(jù)集上進行故障預測實驗,本文方法與基線方法所對應特征集均采用邏輯回歸(LR)、樸素貝葉斯(NB)、決策樹(DT)、K近鄰(KNN)、隨機森林(RF)預測器進行模型建立及故障預測,記錄其10×10折交叉驗證平均預測結(jié)果并進行比較。表10~表12記錄了3個數(shù)據(jù)集各分類器預測結(jié)果,圖3~圖5分別顯示了3個數(shù)據(jù)集上,不同方法取得的綜合性能指標F-measure的對比情況。
從表10~表12可簡單看出,本文EBIC-FS方法在M&R-Mylyn數(shù)據(jù)集上5種分類器均取得較優(yōu)結(jié)果,與CompleteSet、Chi-Square、Correlation、ReliefF、CFS方法相比,各項指標均有提升;在Promise-ant1.7數(shù)據(jù)集上,除部分分類器Recall值略低于基線方法、部分FPR高于基線方法外,其余指標均有所提升,其中本文方法綜合性能F-measure均優(yōu)于基線方法;在Promise-xalan2.6數(shù)據(jù)集上,本文方法NB分類器的FPR較高,其余各指標均優(yōu)于CompleteSet、Chi-Square、Correlation、ReliefF、CFS方法。
在3個數(shù)據(jù)集上,本文方法準確率Accuracy較高,表征正確分類所占比例高,表明本文方法所選特征子集建立的預測模型將大部分模塊正確標記,預測能力較強;精確度Precision提升表明在被標記為“1”的模塊中,真實值為“1”即有故障的模塊比例提升,表明本文方法對建立的故障預測模型預測性能有正向影響;Recall指標表明真實值為“1”的程序模塊在預測過程中被標記為“1”,該指標提升是一個較為理想的狀態(tài),表明正確預測出有故障程序模塊的比例提升;由于Recall和Precision之間存在一定矛盾,故F-measure為一個更好、更可靠的評價指標,F(xiàn)值的大幅提升證明了本文方法建立的預測模型有較為良好的綜合性能,其預測能力較佳;FPR的降低表征誤報率的降低,可減少軟件開發(fā)和維護人員不必要的檢查。
Table 10 Results of defect prediction under M&R-Mylyn dataset表10 在M&R-Mylyn數(shù)據(jù)集下故障預測結(jié)果
Table 11 Results of defect prediction under Promise-ant1.7 dataset表11 在Promise-ant1.7數(shù)據(jù)集下故障預測結(jié)果
4.4.3 結(jié)果分析
4.4.3.1 RQ1分析
本小節(jié)對比EBIC-FS方法所選特征子集與原特征集建立的預測模型性能,針對RQ1進行回答與分析。表13~表15顯示了用EBIC-FS方法選擇特征比不進行特征選擇即進行故障預測在5個指標Accuracy、Precision、Recall、F-measure、FPR上的提升情況;圖6~圖8為各數(shù)據(jù)集EBIC-FS方法與CompleteSet建立預測的模型的綜合性能F-measure對比。
Table 12 Results of defect prediction under Promise-xalan2.6 dataset表12 在Promise-xalan2.6數(shù)據(jù)集下故障預測結(jié)果
對比EBIC-FS方法與不進行特征選擇的故障預測實驗結(jié)果可看出:
(1)在M&R-Mylyn上,用本文方法EBIC-FS以5個分類器LR、NB、DT、KNN、RF建立的預測模型相比不進行特征選擇即建立預測模型Accuracy平均提升33.1%,Precision平均提升33.9%,Recall平均提升37.7%,F(xiàn)-measure指標平均提升38.9%,F(xiàn)PR平均降低86.6%。在Promise-ant1.7上,Accuracy平均提升12.6%,Precision平均提升17.0%,Recall平均提升16.3%,在LR上略有降低,F(xiàn)-measure指標平均提升17.3%,F(xiàn)PR在LR、DT、RF上降低,在NB、KNN上升高。在Promise-xalan2.6上,Accuracy平均提升21.4%,Precision平均提升15.9%,Recall平均提升29.3%,F(xiàn)measure指標平均提升23.9%,F(xiàn)PR平均降低40.7%,在NB上有升高。
Fig.3 Comparison of F-measure of each model under M&R-Mylyn dataset圖3 在M&R-Mylyn數(shù)據(jù)集下各模型F-measure指標對比
Fig.4 Comparison of F-measure of each model under Promise-ant1.7 dataset圖4 在Promise-ant1.7數(shù)據(jù)集下各模型F-measure指標對比
Fig.5 Comparison of F-measure of each model under Promise-xalan2.6 dataset圖5 在Promise-xalan2.6數(shù)據(jù)集下各模型F-measure指標對比
Table 13 Improvement of each indicator under M&R-Mylyn dataset:RQ1表13 在M&R-Mylyn數(shù)據(jù)集下各指標提升情況:RQ1 %
Table 14 Improvement of each indicator under Promise-ant1.7 dataset:RQ1表14 在Promise-ant1.7數(shù)據(jù)集下各指標提升情況:RQ1 %
Table 15 Improvement of each indicator under Promise-xalan2.6 dataset:RQ1表15 在Promise-xalan2.6數(shù)據(jù)集下各指標提升情況:RQ1 %
Fig.6 Comparison of F-measure of each model under M&R-Mylyn dataset:RQ1圖6 在M&R-Mylyn數(shù)據(jù)集下各模型F-measure指標對比:RQ1
Fig.7 Comparison of F-measure of each model under Promise-ant1.7 dataset:RQ1圖7 在Promise-ant1.7數(shù)據(jù)集下各模型F-measure指標對比:RQ1
Fig.8 Comparison of F-measure of each model under Promise-xalan2.6 dataset:RQ1圖8 在Promise-xalan2.6數(shù)據(jù)集下各模型F-measure指標對比:RQ1
(2)在3個數(shù)據(jù)集上,與基線方法相比,均為NB模型的故障預測性能提升幅度最大,綜合性能Fmeasure相比基線方法在M&R-Mylyn上提升了78.1%,在Promise-ant1.7上提升了30.2%,在Promisexalan2.6上提升了35.9%。
(3)在M&R-Mylyn上,EBIC-FS方法在DT模型上取得最佳預測性能,F(xiàn)-measure值達0.923;在Promise-ant1.7上,EBIC-FS方法在NB模型上取得最佳預測性能,F(xiàn)-measure值達0.874;在Promisexalan2.6上,EBIC-FS方法在KNN模型上取得最佳預測性能,F(xiàn)-measure值達0.911。
(4)實驗結(jié)果驗證了本文方法的有效性,能提升預測模型性能。
4.4.3.2 RQ2分析
本小節(jié)分別對比EBIC-FS方法與Chi-Square方法、Correlation方法、ReliefF方法所選特征子集建立的預測模型性能,針對RQ2進行回答與分析。表16~表24分別顯示了EBIC-FS方法比Chi-Square、Correlation、ReliefF方法所選特征子集建立的預測模型在5個指標Accuracy、Precision、Recall、F-measure、FPR上的提升情況;圖9~圖11為EBIC-FS方法與Chi-Square、Correlation、ReliefF方法建立的預測模型的綜合性能F-measure對比。
Table 16 Improvement of each indicator under M&R-Mylyn dataset:RQ2-Chi-Square表16 在M&R-Mylyn數(shù)據(jù)集下各指標提升情況:RQ2-Chi-Square %
Table 17 Improvement of each indicator under Promise-ant1.7 dataset:RQ2-Chi-Square表17 在Promise-ant1.7數(shù)據(jù)集下各指標提升情況:RQ2-Chi-Square %
Table 18 Improvement of each indicator under Promise-xalan2.6 dataset:RQ2-Chi-Square表18 在Promise-xalan2.6數(shù)據(jù)集下各指標提升情況:RQ2-Chi-Square %
Table 20 Improvement of each indicator under Promise-ant1.7 dataset:RQ2-Correlation表20 在Promise-ant1.7數(shù)據(jù)集下各指標提升情況:RQ2-Correlation %
Table 19 Improvement of each indicator under M&R-Mylyn dataset:RQ2-Correlation表19 在M&R-Mylyn數(shù)據(jù)集下各指標提升情況:RQ2-Correlation %
Table 21 Improvement of each indicator under Promise-xalan2.6 dataset:RQ2-Correlation表21 在Promise-xalan2.6數(shù)據(jù)集下各指標提升情況:RQ2-Correlation %
Table 22 Improvement of each indicator under M&R-Mylyn dataset:RQ2-ReliefF表22 在M&R-Mylyn數(shù)據(jù)集下各指標提升情況:RQ2-ReliefF %
Table 23 Improvement of each indicator under Promise-ant1.7 dataset:RQ2-ReliefF表23 在Promise-ant1.7數(shù)據(jù)集下各指標提升情況:RQ2-ReliefF %
對比本文方法EBIC-FS與三種特征排序方法Chi-square、Correlation、ReliefF所選特征子集建立的預測模型性能的實驗結(jié)果可看出:
(1)在M&R-Mylyn上,本文方法與Chi-Square相比,所選特征子集建立的預測模型在Accuracy平均提升45.9%,Precision平均提升40.4%,Recall平均提升66.6%,F(xiàn)-measure指標平均提升61.0%,F(xiàn)PR平均降低87.0%。與Correlation相比,Accuracy平均提升40.3%,Precision平均提升38.3%,Recall平均提升49.5%,F(xiàn)-measure指標平均提升48.2%,F(xiàn)PR平均降低89.2%。與ReliefF相比,Accuracy平均提升46.9%,Precision平均提升48.8%,Recall平均提升53.7%,F(xiàn)measure指標平均提升55.1%,F(xiàn)PR平均降低89.2%。
Table 24 Improvement of each indicator under Promise-xalan2.6 dataset:RQ2-ReliefF表24 在Promise-xalan2.6數(shù)據(jù)集下各指標提升情況:RQ2-ReliefF %
Fig.9 Comparison of F-measure of each model under M&R-Mylyn dataset:RQ2圖9 在M&R-Mylyn數(shù)據(jù)集下各模型F-measure指標對比:RQ2
Fig.10 Comparison of F-measure of each model under Promise-ant1.7 dataset:RQ2圖10 在Promise-ant1.7數(shù)據(jù)集下各模型F-measure指標對比:RQ2
Fig.11 Comparison of F-measure of each model under Promise-xalan2.6 dataset:RQ2圖11 在Promise-xalan2.6數(shù)據(jù)集下各模型F-measure指標對比:RQ2
(2)在Promise-ant1.7上,本文方法與Chi-Square相比,所選特征子集建立的預測模型在Accuracy平均提升14.8%,Precision平均提升18.1%,Recall平均提升22.1%,在LR上略有降低,F(xiàn)-measure指標平均提升21.7%,F(xiàn)PR在LR、DT、RF上降低,在NB、KNN上升高。與Correlation相比,Accuracy平均提升14.0%,Precision平均提升18.6%,Recall平均提升19.6%,在LR上略有降低,F(xiàn)-measure指標平均提升20.1%,F(xiàn)PR在LR、DT、RF上降低,在NB、KNN上升高。與ReliefF相比,Accuracy平均提升22.3%,Precision平均提升34.3%,Recall平均提升6.5%,在LR、NB上略有降低,F(xiàn)-measure指標平均提升21.4%,F(xiàn)PR平均降低49.1%。
(3)在Promise-xalan2.6上,本文方法與Chi-Square相比,所選特征子集建立的預測模型在Accuracy平均提升20.9%,Precision平均提升13.9%,Recall平均提升29.2%,F(xiàn)-measure指標平均提升23.2%,F(xiàn)PR平均降低37.7%,在NB上升高。與Correlation相比,Accuracy平均提升26.7%,Precision平均提升21.3%,Recall平均提升35.6%,F(xiàn)-measure指標平均提升32.9%,F(xiàn)PR平均降低48.2%,在NB上升高。與ReliefF相比,Accuracy平均提升26.2%,Precision平均提升21.9%,Recall平均提升34.1%,F(xiàn)-measure指標平均提升32.4%,F(xiàn)PR平均降低47.9%,在NB上升高。
(4)相較于特征排序方法Chi-Square、Correlation、ReliefF,EBIC-FS方法有效性較高,所選特征子集建立的預測模型綜合性能有較大提升。
4.4.3.3 RQ3分析
本小節(jié)對比EBIC-FS方法與CFS方法所選特征數(shù)量及對應特征子集建立的預測模型性能,針對RQ3進行回答與分析。表25~表27為不同特征選擇方法所選特征數(shù)量及占原數(shù)據(jù)集特征個數(shù)的百分比,表28~表30顯示了EBIC-FS方法比CFS方法所選特征子集建立的預測模型在5個指標Accuracy、Precision、Recall、F-measure、FPR上的提升情況;圖12~圖14為EBIC-FS方法與CFS方法建立的預測模型的綜合性能F-measure對比。
Table 25 Number and proportion of features of each dataset under M&R-Mylyn dataset表25 在M&R-Mylyn數(shù)據(jù)集下各特征集特征數(shù)量及占比
Table 26 Number and proportion of features of each dataset under Promise-ant1.7 dataset表26 在Promise-ant1.7數(shù)據(jù)集下各特征集特征數(shù)量及占比
Table 27 Number and proportion of features of each dataset under Promise-xalan2.6 dataset表27 在Promise-xalan2.6數(shù)據(jù)集下各特征集特征數(shù)量及占比
Table 28 Improvement of each indicator under M&R-Mylyn dataset:RQ3表28 在M&R-Mylyn數(shù)據(jù)集下各指標提升情況:RQ3 %
Table 29 Improvement of each indicator under Promise-ant1.7 dataset:RQ3表29 在Promise-ant1.7數(shù)據(jù)集下各指標提升情況:RQ3 %
Table 30 Improvement of each indicator under Promise-xalan2.6 dataset:RQ3表30 在Promise-xalan2.6數(shù)據(jù)集下各指標提升情況:RQ3 %
Fig.12 Comparison of F-measure of each model under M&R-Mylyn dataset:RQ3圖12 在M&R-Mylyn數(shù)據(jù)集下各模型F-measure指標對比:RQ3
Fig.13 Comparison of F-measure of each model under Promise-ant1.7 dataset:RQ3圖13 在Promise-ant1.7數(shù)據(jù)集下各模型F-measure指標對比:RQ3
對比EBIC-FS方法與特征子集選擇方法CFS所選特征個數(shù)及對應特征子集建立的預測模型性能的實驗結(jié)果可看出:
Fig.14 Comparison of F-measure of each model under Promise-xalan2.6 dataset:RQ3圖14 在Promise-xalan2.6數(shù)據(jù)集下各模型F-measure指標對比:RQ3
(1)在M&R-Mylyn上,用本文方法所選特征子集建立的預測模型比CFS方法所選特征子集建立的預測模型Accuracy平均提升31.8%,Precision平均提升31.8%,Recall平均提升40.1%,F(xiàn)-measure平均提升39.3%,F(xiàn)PR平均降低86.0%。
(2)在Promise-ant1.7上,用本文方法所選特征子集建立的預測模型比CFS方法所選特征子集建立的預測模型Accuracy平均提升14.0%,Precision平均提升22.2%,Recall平均提升9.9%,F(xiàn)-measure平均提升16.2%,F(xiàn)PR平均降低26.7%,在KNN上升高。
(3)在Promise-xalan2.6上,用本文方法所選特征子集建立的預測模型比CFS方法所選特征子集建立的預測模型Accuracy平均提升20.3%,Precision平均提升15.6%,Recall平均提升24.8%,F(xiàn)-measure平均提升21.7%,F(xiàn)PR平均降低42.9%,在NB上有升高。
(4)EBIC-FS方法有效壓縮了特征維度。在M&R-Mylyn上,相比CFS方法所選特征占原特征集的21.9%,本文方法所選特征僅為原特征集的12.5%;在Promise-ant1.7上,相比CFS方法所選特征占原特征集的50.0%,本文方法所選特征為原特征集的35.0%;在Promise-xalan2.6上,相比CFS方法所選特征占原特征集的55.0%,本文方法所選特征為原特征集的20.0%。
(5)特征子集選擇方法CFS壓縮了特征維度,降低預測模型復雜性;與之相比,EBIC-FS方法在壓縮了特征維度的同時提升了預測模型的綜合性能。
本文方法存在局限性及不足,本章對其進行討論,具體如下:
(1)為在各數(shù)據(jù)集上方便對比本文方法及不同基線特征選擇方法,本文用5個分類器訓練故障預測模型時均使用默認參數(shù),未來可通過調(diào)參使訓練后的故障預測模型取得更優(yōu)預測結(jié)果。
(2)本文方法令EBIC公式中的參數(shù)γ=1,為最大程度壓縮待選特征子集中的特征個數(shù),但所選特征子集未必是能在特征維度上與對數(shù)據(jù)集的描述能力之間達到最佳平衡的特征子集,未來可根據(jù)數(shù)據(jù)集情況調(diào)整γ取值,以選出最佳特征子集。
(3)本文方法未評估所有特征子集的EBIC值,所選特征子集并非最佳特征子集,是一部分特征子集中的“最佳”特征子集。
(4)本文使用公開數(shù)據(jù)集M&R-Mylyn、Promiseant1.7、Promise-xalan2.6的故障數(shù)據(jù)進行實驗,僅與三種特征排序方法和一種特征子集選擇方法進行對比,一般性有一定局限,未來可使用其他公開數(shù)據(jù)集進行實驗,與更多特征排序、特征子集選擇及其他數(shù)據(jù)預處理方法進行對比。
軟件故障預測通過軟件歷史數(shù)據(jù)建立預測模型,幫助開發(fā)人員及質(zhì)量保證人員集中關注易發(fā)生故障的軟件模塊;特征選擇等數(shù)據(jù)預處理方法能提高故障預測模型的性能。本文提出EBIC-FS特征選擇方法,先將故障數(shù)據(jù)集中各特征進行排序,并根據(jù)特征排名列表對待選特征子集用EBIC準則進行評估,以確定“最佳特征子集”。本文在公開數(shù)據(jù)集上驗證了EBIC-FS方法的有效性,與特征全集、Chi-Square、Correlation、ReliefF特征排序方法、CFS特征子集選擇方法進行對比,取得了較好的實驗結(jié)果,表明EBIC-FS方法能有效提高故障預測模型的綜合性能。未來可進一步對故障預測中的特征選擇工作進行擴展:(1)調(diào)整預測模型參數(shù)以獲得更好的模型性能;(2)調(diào)整EBIC參數(shù)γ取值以獲得更好的實驗結(jié)果;(3)采用不同數(shù)據(jù)集進行實驗,與更多其他特征選擇方法進行對比,驗證本文方法的一般性。