文萬志,陳建平,陳 翔,鞠小林
(南通大學 計算機科學與技術(shù)學院,江蘇 南通226019)
基于 譜的 軟 件 錯 誤 定 位 技 術(shù)[1-4](spectrum-based fault localization,SBFL又稱為基于覆蓋的軟件錯誤定位技術(shù))被普遍認為是一種當前最高效的軟件錯誤定位技術(shù)之一,其研究主要集中在兩個方面:一是可疑度的度量;二是測試覆蓋信息的優(yōu)化??梢啥榷攘客ㄟ^改進可疑度計算公式來提高軟件錯誤定位技術(shù)效率,典型的可疑度計算公式有Tarantula[2]、Ochiai[2]、WONG3[2]、ILI[5]等。測試覆蓋信息的優(yōu)化技術(shù)一般通過刪除冗余測試用例、設(shè)置測試用例優(yōu)先級等方法來改進可疑度度量的精確性,例如,Yoo等的基于信息理論的測試用例優(yōu)先級技術(shù)[6]、Xuan等的分割測試用例技術(shù)[7]、Masri等的測試用例聚類技術(shù)[8]。
SBFL技術(shù)的主要缺點是語義分析較弱,而且順序語句的可疑度通常無法區(qū)分?;诔绦蚯衅腻e誤定位技術(shù)[9-11]通過提取興趣點處與興趣變量依賴相關(guān)的語句以縮小錯誤搜索范圍,這在一定程度上可改進SBFL 技術(shù)的語義較弱問題。不足是,大規(guī)模程序的程序切片構(gòu)造代價較大。文中提出了一種基于不可區(qū)分塊構(gòu)建分塊切片的方法,并通過實驗驗證了分塊切片的約減度及基于分塊切片錯誤定位技術(shù)BSlicing-SFL技術(shù)的有效性。
定義1 不可區(qū)分語句:令F(s)為計算程序P中語句s的可疑度計算公式,對同一組測試覆蓋δ,F(xiàn)(s)=f(failed(s),passed(s)),其中,failed(s)是失效測試通過s的統(tǒng)計次數(shù),passed(s)是成功測試通過s 的統(tǒng)計次數(shù),f 是變量failed(s)和passed(s)的函數(shù),若F(si)≡F(sj),則程序語句si和sj為不可區(qū)分語句。
上述定義中,failed(s)、passed(s)的統(tǒng)計次數(shù)根據(jù)不同公式統(tǒng)計方法有所區(qū)別,可以是程序擊譜的統(tǒng)計,也可以程序頻譜的統(tǒng)計。一般來說,順序執(zhí)行的語句是不可區(qū)分的。
理論上,所有不可區(qū)分語句可作為一個分塊,然后基于分塊進行可疑度度量可大大減少統(tǒng)計規(guī)模。然而,同一個分塊內(nèi)聚性如果過低,會引入大量錯誤無關(guān)元素,從而降低錯誤定位的效率。通常,一個不可區(qū)分塊為一個函數(shù)方法或過程 (以下統(tǒng)稱為方法)中連續(xù)的不可區(qū)分語句組成。
定義2 不可區(qū)分塊:給定程序P的方法M 中語句序列為<s1,s2,…,si,…,sj,…,sn>,則滿足以下3個條件的語句序列<si,…,sj>稱為不可區(qū)分塊:
(1)語句序列si,…,sj中所有語句為不可區(qū)分語句;
(2)si,… ,sj-1序列中所有語句為非調(diào)用語句;
(3)si-1或sj+1加 入 到 序 列 組 成 的 新 序 列 不 滿 足 條 件(1)或 (2)。
條件 (1)限定不可區(qū)分塊中語句為不可區(qū)分語句,條件(2)限定不可區(qū)分塊的劃分不但要在代碼序列上保持連續(xù)性,也要在執(zhí)行序列上保持連續(xù)性;條件 (3)限定不可區(qū)分塊應(yīng)當是不可擴展的最大的塊。
程序由函數(shù)方法組成,方法之間存在調(diào)用關(guān)系,每個方法由順序、選擇和循環(huán)3 種結(jié)構(gòu)組成。令CallNode,BrachLast,PreNode,LoopLast,MethodLast分別表示調(diào)用節(jié)點,選擇分支塊尾節(jié)點,選擇和循環(huán)條件謂詞節(jié)點,循環(huán)體尾節(jié)點,方法尾節(jié)點,不可區(qū)分塊構(gòu)造算法如下:
算法1:不可區(qū)分塊構(gòu)造算法
輸入:程序P
輸出:不可區(qū)分塊集合BlockSet
程序中,語句的選擇執(zhí)行會造成語句的覆蓋信息不同,PreNode,BranchLast,LoopLast這3種類型的語句的下一條語句的覆蓋信息有改變的可能,根據(jù)定義1,它們是可區(qū)分語句,屬于不同的塊。CallNode和MethodLast節(jié)點的下一條語句是另一個方法或程序執(zhí)行結(jié)束,根據(jù)定義2,屬于不同的塊。設(shè)程序規(guī)模為n,則整個不可區(qū)分塊的構(gòu)造時間復雜度為O(n)。
分塊切片由興趣塊的控制依賴塊和興趣變量的數(shù)據(jù)依賴塊組成。
定義3 塊系統(tǒng)依賴圖BSDG (block system dependence graph)。塊系統(tǒng)依賴圖是一個二元組 (B,E),其中,B 是程序P 中不可區(qū)分塊集合,E=DDEdge∪CDEdge,DDEdge是塊間數(shù)據(jù)依賴邊集合,CDEdge 是塊間控制依賴邊集合。
定義3中,不可區(qū)分塊B 通過算法1構(gòu)造,算法2給出了的塊間數(shù)據(jù)依賴和控制依賴實現(xiàn)算法。
算法2:塊系統(tǒng)依賴圖構(gòu)造
輸入:程序P
輸出:塊系統(tǒng)依賴圖BSDG
算法2中,塊間控制依賴和數(shù)據(jù)依賴的前提條件是Bi,Bj間存在一條可執(zhí)行路徑,即Bj∈Path(Bi)??刂埔蕾嚥煌诳刂屏鲌D中的邊,當前節(jié)點只控制依賴于前驅(qū)轉(zhuǎn)向節(jié)點PreNode和CallNode。數(shù)據(jù)依賴要求是當前塊中的變量在前驅(qū)節(jié)點中被使用,并且當前節(jié)點和前驅(qū)節(jié)點的中間節(jié)點Bm沒有對變量重新定義。
傳統(tǒng)的動態(tài)切片根據(jù)不同的輸入集提取與興趣語句和興趣變量相關(guān)的語句,然而構(gòu)造大量的動態(tài)切片的時間復雜度和空間復雜度都很大,效率不高,基于此,本文采用以下切片準則。
定義4 切片準則:切片準則是一個三元組<B,V,T>,其中B 為程序P中一個不可區(qū)分塊,V USE [B],T 為P的某個測試覆蓋的基本塊集合。
根據(jù)上述準則,構(gòu)造分塊切片可分為兩步:①根據(jù)興趣塊B 和興趣變量集V 逆向遍歷BSDG,得到靜態(tài)切片BlockBWSlice;②生成動態(tài)切片BlockDSlice=BlockBWSlice∩T。
靜態(tài)BlockBWSlice一旦構(gòu)造,根據(jù)歷史測試覆蓋,在時間復雜度為O(n)規(guī)模下完成BlockDSlice的構(gòu)造。
基于分塊切片,本文的錯誤定位模型如圖1所示。
圖1 基于分塊切片的軟件錯誤定位模型
圖1中,Bi(i=1,…,n)為靜態(tài)BlockBWSlice,bij(i=1,…,n;j=1,…,m)表示每個測試tj(j=1,…,n)對Bi的覆蓋情況,ri(i=1,…,n)根據(jù)測試覆蓋統(tǒng)計公式計算的語句可疑度值,據(jù)此值從大到小依次檢查相應(yīng)語句來定位程序中的錯誤。較傳統(tǒng)模型,本文的模型從3個方面進行了改進。通過分塊切片,將不可區(qū)分的語句組合成一個基本塊,并通過構(gòu)造靜態(tài)BlockBWSlice極大減少錯誤定位元素規(guī)模;只有滿足Bi∈BlockBWSlice∩Ti,即Bi∈BlockDSlicei時,bij才表示成被覆蓋,減少了無關(guān)元素對可疑度度量的干擾;基于BlockDslice約減重復測試用例,減少測試覆蓋的重復統(tǒng)計,如果BlockDSlicej=BlockDSlicei,則BlockDSlicej為直接重復覆蓋,如果BlockDSlicek=BlockDSlicei-BlockDSlicej或 BlockDSlicek= BlockDSlicei+BlockDSlicej,則BlockDSlicek為間接重復覆蓋。
圖2通過一個簡單例子說明上述我們的方法過程,其中,圖 (a)是較常見的實例程序,圖 (b)是塊依賴圖BSDG,圖 (c)是根據(jù)切片準則實例<14, {a}, {1,2,3,4,6,7,8,9,10,11,12,13,14,15}>通過逆向遍歷BSDG 得到的BlockBWSlice 和BlockDWSlice,圖 (d)是基于BlockBWSlice (14,{a})錯誤定位模型。
圖2 BSlicing-SFL實例
圖2 (a)中,程序語句1,2,3;7,8,9;10,11,12;16,17,18;19,20;22,23 (為方便描述,文中函數(shù)頭節(jié)點、謂詞節(jié)點等統(tǒng)稱為語句)在傳統(tǒng)的基于程序覆蓋的錯誤定位算法中,其覆蓋信息總是相同,因此它們的可疑度大小總是相同,是無法區(qū)分的。大量的可疑度列表只會讓軟件調(diào)試者選擇更加傳統(tǒng)的全手動方式進行軟件錯誤定位。因此,文中對不可區(qū)分語句進行分塊,對類型為PreNode,BranchLast,LoopLast,CallNode,MethodLast等語句作為分塊基線 (算法1)。語句3,6等為PreNode語句,其后的語句實現(xiàn)跳轉(zhuǎn);語句9為BranchLast語句,因為程序分支的選擇執(zhí)行,后續(xù)語句覆蓋信息改變;語句21 為Loop-Last,其是否執(zhí)行取決于循環(huán)條件;語句24為CallNode語句,雖然后續(xù)順序語句25與語句24的覆蓋信息相同,語句24執(zhí)行時直接跳轉(zhuǎn)到調(diào)用方法,其控制依賴和數(shù)據(jù)依賴關(guān)系和語句25有著很大的不同,如果語句24和25屬于同一個基本塊,切片的提取將會有很大的冗余;語句9 為MethodLast語句,執(zhí)行結(jié)束后會跳轉(zhuǎn)到主調(diào)函數(shù)。這里,雖然語句9既是BranchLast,又是MethodLast,并不影響最終分塊。圖2 (b)右下表格中詳細列出了語句對應(yīng)的分塊列表,并給出了塊之間的數(shù)據(jù)依賴和控制依賴。由于語句塊14的執(zhí)行取決于PreNode語句塊13的執(zhí)行,所以圖中語句塊14控制依賴于語句塊13,CallNode語句塊14執(zhí)行決定了語句1的執(zhí)行,因此,語句塊14控制依賴于語句塊13。語句塊5使用了語句塊1中定義的變量a和n,而且在語句塊1到語句塊5的可達路徑上變量a,n 沒有被重新定義,因此語句塊5 數(shù)據(jù)依賴于語句1。據(jù)此方法生成了BSDG (算法2)。圖2 (b)中,如果兩節(jié)點之間同時存在數(shù)據(jù)依賴邊和控制依賴邊,我們只構(gòu)造一條邊,不影響圖的連通性和切片的求解。圖2 (c)根據(jù)切片準則實例<14,{a},{1,2,3,4,6,7,8,9,10,11,12,13,14,15}>生成的程序切片。從節(jié)點14 逆向遍歷BSDG 得到BlockBWSlice (14, {a})= {1,2,3,4,5,13,14},提取了程序的一個片段,較大的減小了程序規(guī)模。在一般簡單的例子程序中,語句間大多存在控制依賴關(guān)系和數(shù)據(jù)依賴關(guān)系,有些切片效果并不明顯。例如,本例子中,如果求解BlockBWSlice(15,{a}),由于變量a依賴于swapmin的求解結(jié)果,所得切片相對較大。但針對稍大型的實際軟件,切片效果會很明顯,下文通過實驗驗證了這點。圖2 (c)中BlockDSlice= {1,2,3,4,5,13,14}∩ {1,2,3,4,6,7,8,9,10,11,12,13,14,15}= {1,2,3,4,13,14}。圖2 (d)中,BSlicing-SFL 技術(shù)將傳統(tǒng)的錯誤度量元素約減成BlockBWSlice(14,{a});刪除重復測試覆蓋,BSlicing-SFL只包含3 條測試覆蓋信息。例子程序中,語句9是錯誤語句,測試1和測試3 是失效測試,結(jié)合Tarantula度量算法,得到圖2 (d)中第三列可疑度度量結(jié)果,根據(jù)可疑度大小順序,能很快定位到錯誤語句塊5。
本節(jié)通過3個實例驗證了基于分塊切片的軟件錯誤定位技術(shù)的有效性,本文主要研究了以下幾個問題:
(1)分塊切片的約減度;
(2)當前主流的軟件錯誤定位技術(shù)與BSlicing-SFL 技術(shù)的有效性比較;
(3)當前主流的軟件錯誤定位技術(shù)與BSlicing-SFL 技術(shù)定位同一錯誤時優(yōu)劣比較。
本文選擇了3 個實際應(yīng)用中的程序作為實驗對象,見表1。
表1 實驗對象
表1 中,Tetris 和SimpleJavaApp 為 開 源 代 碼(http://www.percederberg.net/games/tetris/tetris-1.2-src.zip,http://codecover.org/documentation/tutorials/SimpleJavaApp.zip)。Tetris為經(jīng)典的俄羅斯方塊游戲,SimpleJavaApp主要完成對書目列表的編輯。JHSA 是我們團隊開發(fā)的一個JAVA 程序的層次切片工具,相比前兩個實驗對象,增加了程序規(guī)模。表1的第二列是程序中植入的錯誤數(shù)。3個實驗對象均使用JAVA 語言編寫,實驗基于Eclipse平臺實現(xiàn)。
本文使用約減率RR (reduction ratio)來度量分塊切片的約減度,其評價方法為
上述公式中,絕對值表示元素規(guī)模。在程序規(guī)模不變時,當定位錯誤所構(gòu)造的BlockBWSlice規(guī)模越小,則約減度越大,定位效果越好。
軟件錯誤定位技術(shù)有效性通過定位率LR (location ratio)來度量,其評價方法為
式 (2)中SLFR (successfully located faults ratio)是已經(jīng)成功定位到的錯誤與總共植入的錯誤比率,ECR(examined code ratio)是成功定位到錯誤已經(jīng)檢測的程序代碼與程序總代碼的比率。當ECR 相同時,SLFR 值越大,即檢測相等比例規(guī)模的程序代碼能定位到更多的錯誤,則錯誤定位有效性越高。理論上,對所有錯誤版本,如果ECR 趨向0,SLFR=1,則軟件錯誤定位技術(shù)達到最優(yōu)化。
對于不同軟件錯誤定位技術(shù)的定位同一錯誤,本文通過ECR 大小來評價技術(shù)的優(yōu)劣。
實驗驗證比較了BSlicing-SFL 技術(shù)基于流行的Tarantula、Union、Intersection度量方法的有效性。其中,Tarantula技術(shù)由于其效率高,易實現(xiàn),被廣泛應(yīng)用于軟件錯誤定位技術(shù)中。其對程序元素可疑度的度量方法如下
式中:suspiciousness(e)——程序元素e的可疑度,failed(e)、failed——通 過e 的 失 效 測 試 數(shù) 和 失 效 測 試 總 數(shù),passed(e)、passed——通過e 的成功測試數(shù)和成功測試總數(shù)。
Union技術(shù)和Intersection技術(shù)是典型的切片集合度量技術(shù)。其可疑程序元素集合為
式中:f、p——失效測試、成功測試,P——成功測試集合。
實驗中,為了比較技術(shù)優(yōu)劣,錯誤定位次數(shù)以定位到程序中語句統(tǒng)計,塊或集合中語句按程序代碼順序依次遍歷定位。
本文的主要實驗過程如下:
(1)利 用 開 源 工 具codecover(http://www.codecover.org/)收集測試覆蓋信息;
(2)基于文中算法框架構(gòu)造分塊切片BlockBWSlice、BlockDSlice;
(3)統(tǒng)計約減度RR;
(4)基于Tarantula、Union、Intersection 度量方法統(tǒng)計錯誤定位率LR,并進行比較分析。
2.4.1 分塊切片約減度RR 的統(tǒng)計
理論上,分塊切片提取了與錯誤依賴相關(guān)部分,在一定程度上減少了程序中可疑元素度量規(guī)模。實驗中,通過統(tǒng)計分塊切片的約減度RR 來驗證約減程度,表2 列出了各對象程序的RR。
表2 約減度
表2中第二列給出了統(tǒng)計RR 的BSlicing 興趣集。實驗對象Tetris和SimpleJavaApp數(shù)據(jù)依賴和控制依賴較強,最終得出的切片約減度在0.3以上,實驗對象JHSA 的約減度相對較好,主要是因為JHSA 的子功能較多,切片集中與興趣數(shù)據(jù)無關(guān)的子功能代碼被約減。由于JHSA 基數(shù)較大,切片的絕對代碼量要大于Tetris和SimpleJavaApp。總體上,如此約減規(guī)模已經(jīng)較大的減少了傳統(tǒng)的全代碼度量規(guī)模。
2.4.2 錯誤定位率LR 的統(tǒng)計
本節(jié)通過Tarantula、Union、Intersection的度量方法驗證BSlicing-SFL技術(shù)的有效性。實驗統(tǒng)計了定位所有錯誤版本所需檢測的代碼率,圖3展示了不同技術(shù)的統(tǒng)計結(jié)果。其中,BS_Tarantula、BS_Union、BS_Inter是采用Tarantula、Union、Intersection可疑度度量方法的BSlicing-SFL技術(shù)。為了統(tǒng)一度量規(guī)模,實驗中以定位到程序中錯誤語句為成功定位,對語句塊或可疑度相等的程序元素(塊或語句),按代碼順序檢測。
圖3 錯誤定位技術(shù)有效性比較
圖3中橫坐標是式 (2)中代碼檢測率ECR,縱坐標是式 (2)中成功定位到的錯誤與總錯誤的比率SLFR,曲線的斜率大小反應(yīng)了錯誤定位率LR。ECR 很小時,如果曲線斜率越大,則LR 越大,錯誤定位效率越高。一般認為,在代碼檢測率很小時成功定位到的錯誤率最能反映錯誤的有效性,因此,實驗中特別統(tǒng)計了ECR 為0.01,0.05 時SLFR 的值。從圖中可以看出,BSlicing-SFL 技術(shù)要優(yōu)于傳統(tǒng)的技術(shù)。圖3 (c)中,BS_Tarantula與Tarantula技術(shù)都有著較高的定位效率,在ECR<0.01時成功定位到的錯誤率接近0.2,隨后,直到ECR 為0.3,BS_Tarantula技術(shù)以更大的斜率增長,效率更高。圖3 (a)、圖3 (b)的技術(shù)在ECR 很小時,錯誤定位效率較低。這主要和Union、Intersection的度量方法有關(guān)。Union、Intersection 的度量方法的語句檢測順序是先檢測集合中的語句,如果錯誤不在集合,Union按程序代碼順序依次檢測失效測試和程序,Intersection則依次檢測成功測試交集和程序。Union方法在通過錯誤語句的測試都失效的情況下,程序錯誤在集合中,定位效果較好。本實驗中,Intersection方法所得到的所有錯誤版本的集合都是空集,因此錯誤定位效率較低。BS_Union、BS_Inter錯誤檢測順序為先檢測BlockDSlice的Union和Intersection集合,然后檢測BlockBWSlice 集合。在相等的ECR 時,BS_Union、BS_Inter有著相對較高的效率。
2.4.3 同一錯誤的ECR 比較
為了比較不同的技術(shù)在具體的程序錯誤定位方面的優(yōu)劣,實驗選取了其中的10 個錯誤,對其檢測代碼率ECR進行了統(tǒng)計分析,如圖4所示。
圖4 相同錯誤的檢測代碼率比較
圖4中縱坐標是成功定位到錯誤所檢測的代碼率,橫坐標是錯誤編號。10個錯誤中,基于BSlicing-SFL 技術(shù)要優(yōu)于或等于同類度量方法的技術(shù);不同度量方法,錯誤1、2、6、9采用Union技術(shù)優(yōu)于BS_Intersection技術(shù),Tarantula技術(shù)優(yōu)于BS_Union技術(shù),其余6個錯誤采用BS_Intersection技術(shù)要優(yōu)于Union技術(shù)。
2.5.1 有效性威脅
通過上述實驗結(jié)果和分析,BSlicing-SFL 技術(shù)能有效縮小錯誤元素度量的規(guī)模,并且能有效改進相同度量方法的Tarantula、Union、Intersection技術(shù)的有效性。實驗中,主要存在兩方面的不足:
(1)程序切片技術(shù)是基于數(shù)據(jù)依賴和控制依賴關(guān)系構(gòu)建的。如果程序錯誤是由于依賴關(guān)系的破壞或缺失引起的,基于程序切片的軟件錯誤定位技術(shù)效率會大大降低,本文的BSlicing-SFL技術(shù)也是如此。例如,在構(gòu)建數(shù)據(jù)依賴時,當前節(jié)點使用的變量在程序流圖中的前驅(qū)節(jié)點中如果被定義,且沒有被重新定義過,則當前節(jié)點依賴于前驅(qū)節(jié)點。然而,如果前驅(qū)定義節(jié)點有錯誤,無法判斷變量被定義,則當前節(jié)點的依賴關(guān)系就會向前追溯,從而構(gòu)造的切片將不會包含錯誤節(jié)點,造成錯誤定位效率的降低。
(2)由于并發(fā)依賴的復雜性以及構(gòu)造效率低下,文中并沒有考慮并發(fā)依賴,因此文中的技術(shù)局限于單線程程序。
2.5.2 相關(guān)工作
BSlicing-SFL技術(shù)通過識別不可區(qū)分塊生成不可區(qū)分塊,然后構(gòu)造分塊切片進行錯誤定位。與該技術(shù)密切相關(guān)的主要是基于程序切片的錯誤的定位技術(shù)。
自從Weiser提出程序切片技術(shù)以來,基于程序切片的軟件錯誤定位技術(shù)一直是研究的熱點[9-13]。近幾年提出的基于程序切片的軟件錯誤定位技術(shù)主要有:Ju等提出的基于全切片和動態(tài)切片的技術(shù)[10];Mao等提出的近似動態(tài)后向切片的統(tǒng)計技術(shù)[11];Binkley等提出的不依賴語言的程序切片技術(shù)[14];筆者提出的基于程序切片譜技術(shù)等[9]。文中通過劃分不可區(qū)分塊,構(gòu)造程序切片,在更大程度上減少了程序度量規(guī)模,減少程序可疑度分析努力,這與當前的技術(shù)是不同的。
本文提出了一種基于分塊切片的軟件錯誤定位技術(shù)——BSlicing-SFL實現(xiàn)方法。本文給出了不可區(qū)分塊構(gòu)造算法、基于塊數(shù)據(jù)依賴和塊控制依賴的系統(tǒng)依賴圖構(gòu)造算法,隨后通過遍歷系統(tǒng)依賴圖生成靜態(tài)切片BlockBWSlice和動態(tài)切片BlockDSlice,在此基礎(chǔ)之上,統(tǒng)計計算靜態(tài)切片BlockBWSlice中元素可疑度值進行錯誤定位。文中通過3個實際應(yīng)用程序驗證了BlockBWSlice 的約減度、BSlicing-SFL錯誤定位的有效性。
分塊切片與其它切片技術(shù)一樣會因為依賴關(guān)系的破壞而造成軟件錯誤定位技術(shù)效率的降低,未來,將著重構(gòu)造一些潛在依賴關(guān)系來解決這類問題。
[1]Wikipedia.List of software bugs[EB/OL].http://en.wikipedia.org/wiki/List_of_software_bugs,2015.
[2]Xie X,Chen TY,Kuo FC,et al.A theoretical analysis of the risk evaluation formulas for spectrum-based fault localization[J].ACM Transactions on Software Engineering and Methodology,2013,22 (4):1-40.
[3]DiGiuseppe N,Jones JA.On the influence of multiple faults on coverage-based fault localization [C]//Proceedings of the International Symposium on Software Testing and Analysis,2011:210-220.
[4]Xue X,Namin AS.How significant is the effect of fault interactions on coverage-based fault localizations [C]//Proceedings of ACM/IEEE International Symposium on Empirical Software Engineering and Measurement,2013:113-122.
[5]Moon S,Kim Y,Kim M,et al.Ask the mutants:Mutating faulty programs for fault localization [C]//Proceedings of the IEEE International Conference on Software Testing,Verification and Validation,2014:153-162.
[6]Yoo S,Harman M,Clark D.Fault localization prioritization:Comparing information theoretic and coverage based approaches[J].ACM Transactions on Software Engineering and Methodology,2013,22 (3):19.
[7]Xuan J,Monperrus M.Test case purification for improving fault localization [C]//Proceedings of the 22nd ACM SIGSOFT International Symposium on Foundations of Software Engineering,2014:52-63.
[8]Masri W,Assi RA.Prevalence of coincidental correctness and mitigation of its impact on fault localization [J].ACM Transactions on Software Engineering and Methodology,2014,23(1):8.
[9]Wen W.Software fault localization based on program slicing spectrum [C]//Proceedings of the 34th International Conference on Software Engineering,2012:1511-1514.
[10]Ju X,Jiang S,Chen X,et al.Hsfal:Effective fault localization using hybrid spectrum of full slices and execution slices[J].Journal of Systems and Software,2014,90 (4):3-17.
[11]Mao X,Lei Y,Dai Z,et al.Slice-based statistical fault localization[J].Journal of Systems and Software,2014:89:51-62.
[12]Xie X,Wong WE,Chen TY,et al.Metamorphic slice:An application in spectrum-based fault localization [J].Information and Software Technology,2013,55 (5):866-879.
[13]Lei Y,Mao XG,Chen TY.Backward-slice-based statistical fault localization without test oracles[C]//Proceedings of the International Conference on Quality Software,2013:212-221.
[14]Binkley D,Gold N,Harman M.ORBS:Language-independent program slicing [C]//Proceedings of the 22nd ACM SIGSOFT International Symposium on Foundations of Software Engineering,2014:109-120.