故障自動注入與故障檢測的方法及其系統(tǒng)的制作方法
【專利摘要】本發(fā)明涉及一種故障自動注入與故障檢測的方法及其系統(tǒng),該方法包括:S1,對被測文件進行故障自動化注入,進行分析并生成多個故障文件;S2,對所述多個故障文件分別進行處理,生成多個可執(zhí)行文件;S3,根據(jù)所述被測文件選擇特定的用例庫,將所述用例庫中的用例逐一在所述每個可執(zhí)行文件上運行,進行故障檢測,并計算故障檢測率。本發(fā)明使用源代碼故障注入的方法,可以加速錯誤的發(fā)生,進而判斷出軟件中是否存在故障,并且檢錯能力強,尤其對于一些小概率錯誤具有較好的測試效果。
【專利說明】故障自動注入與故障檢測的方法及其系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及軟件測試技術(shù),尤其涉及一種在軟件測試中的故障自動注入與故障檢測方法及其系統(tǒng)。
【背景技術(shù)】
[0002]故障注入(Fault Injection)技術(shù)作為一種特殊測試技術(shù),通常是指按照一定的故障模型產(chǎn)生故障,并可控地施加到待測目標(biāo)系統(tǒng)中,以加速該系統(tǒng)的錯誤和失效的發(fā)生。故障檢測,是觀測并檢驗系統(tǒng)對所注入錯誤的響應(yīng)信息,判斷是否檢測出所注入的故障。兩者相結(jié)合可以分析目標(biāo)系統(tǒng)的錯誤處理、錯誤容忍能力以及系統(tǒng)的魯棒性,并對系統(tǒng)進行驗證和評價。
[0003]雖然故障注入方法有很高的檢錯能力,但如何自動化注入大規(guī)模的故障,及如何有效地執(zhí)行大量的故障文件、比對結(jié)果,是妨礙故障注入方法廣泛應(yīng)用的主要原因。目前實際應(yīng)用中,大都是人工進行故障注入或半自動注入,耗費了大量的人力成本,測試效率也很低。并且只能進行小規(guī)模的源代碼故障注入,無法對大型程序或整個項目進行全面的源代碼故障注入和檢測,無法充分發(fā)揮該方法的高檢錯能力。
【發(fā)明內(nèi)容】
[0004]本發(fā)明提供一種故障自動注入與故障檢測方法及其系統(tǒng),通過使用源代碼故障注入的方法,可以加速錯誤的發(fā)生,進而判斷出軟件中是否存在故障,并且檢錯能力強,尤其對于一些小概率錯誤具有較好的測試效果。
[0005]根據(jù)上述目的,本發(fā)明提供了一種故障自動注入與故障檢測的方法,其包括:SI,對被測文件進行故障自動化注入,進行分析并生成多個故障文件;S2,對所述多個故障文件分別進行處理,生成多個可執(zhí)行文件;S3,根據(jù)所述被測文件選擇特定的測試用例庫,將所述測試用例庫中的用例逐一在所述每個可執(zhí)行文件上運行,進行故障檢測,并計算故障檢測率。
[0006]其中,所述步驟SI包括:S11,輸入被測文件,對所述被測文件進行語法分析、詞法分析和語義分析,生成抽象語法樹;S12,基于所述抽象語法樹,對變異算子進行建模,生成程序變異模型;S13,遍歷所述抽象語法樹,提取所述抽象語法樹的節(jié)點信息;S14,根據(jù)所述抽象語法樹的節(jié)點信息和所述程序變異模型,生成相應(yīng)的故障注入點,并在所述故障注入點進行故障自動注入;S15,進行文件IO操作,生成多個故障文件。
[0007]其中,所述步驟S2包括:對所述多個故障文件分別進行預(yù)處理、編譯、匯編和鏈接,生成對應(yīng)的多個可執(zhí)行文件。
[0008]其中,所述測試用例庫包括與所述被測文件的程序相對應(yīng)的用例。
[0009]其中,所述測試用例庫還包括所述被測文件運行所述每個用例后的執(zhí)行結(jié)果。
[0010]其中,所述測試用例庫中的所述用例滿足覆蓋準則,所述覆蓋準則可以是對原被測試文件的100%分支覆蓋。[0011]根據(jù)本發(fā)明的另一個方面,提供了一種故障自動注入與故障檢測系統(tǒng),所述系統(tǒng)包括:故障自動注入模塊,用于對被測文件進行自動化注入,進行分析并生成多個故障文件;執(zhí)行文件生成模塊,用于對所述多個故障文件進行處理,生成多個可執(zhí)行文件;故障檢測模塊,用于根據(jù)所述被測文件選擇特定的測試用例庫,將所述測試用例庫中的用例逐一在所述每個可執(zhí)行文件上運行,進行故障檢測,并計算故障檢測率。
[0012]其中,所述故障自動注入模塊包括:抽象樹生成單元,用于對所述被測文件進行語法分析、詞法分析和語義分析,生成抽象語法樹;程序變異模型生成單元,用于基于所述抽象語法樹,對變異算子進行建模,生成程序變異模型;抽象語法樹遍歷單元,用于遍歷所述抽象語法樹,提取所述抽象語法樹的節(jié)點信息;故障自動注入單元,用于根據(jù)所述抽象語法樹的節(jié)點信息和所述程序變異模型,生成相應(yīng)的故障注入點,并在所述故障注入點進行故障自動注入;故障文件生成單元,用于進行文件IO操作,生成多個故障文件。
[0013]本發(fā)明所述的故障自動注入與故障檢測的方法及其系統(tǒng),使用源代碼故障注入的方法,可以加速錯誤的發(fā)生,進而判斷出軟件中是否存在故障,并且檢錯能力較高,尤其對于一些小概率錯誤具有較好的測試效果,同時,使用本發(fā)明進行測試時,對系統(tǒng)魯棒性和可靠性測試具有較好的測試效果。
【專利附圖】
【附圖說明】
[0014]通過參考附圖會更加清楚的理解本發(fā)明的特征和優(yōu)點,附圖是示意性的而不應(yīng)理解為對本發(fā)明進行任何限制,在附圖中:
[0015]圖1示出了本發(fā)明的故障自動注入與故障檢測的方法的流程圖;
[0016]圖2示出了本發(fā)明的故障自動注入與故障檢測的方法的步驟SI的具體流程圖;
[0017]圖3示出了本發(fā)明的故障自動注入與故障檢測系統(tǒng)的結(jié)構(gòu)框圖;
[0018]圖4是示出了本發(fā)明的故障自動注入與故障檢測系統(tǒng)的故障自動注入模塊的結(jié)構(gòu)框圖。
【具體實施方式】
[0019]下面將結(jié)合附圖對本發(fā)明的實施例進行詳細描述。
[0020]圖1示出了本發(fā)明的故障自動注入與故障檢測的方法的流程圖。
[0021]參照圖1,本發(fā)明的實施例的故障自動注入與故障檢測的方法包括:
[0022]步驟SI,對被測文件進行自動化注入,經(jīng)過分析并生成多個故障文件。
[0023]故障注入是使用故障算子,對被測原代碼進行微小的語法改變,來模擬程序員在真實環(huán)境中可能產(chǎn)生的各類錯誤。
[0024]圖2示出了本發(fā)明的故障自動注入與故障檢測的方法的步驟SI的具體流程圖。
[0025]參照圖2,其具體步驟包括:
[0026]S11,輸入被測文件,對被測文件進行語法分析、詞法分析和語義分析,生成抽象語法樹(Abstract Syntax Tree)。
[0027]抽象語法樹是程序編譯階段的一種中間表示形式。作為一種良好的數(shù)據(jù)結(jié)構(gòu),AST可以直觀地表示出源程序的語法結(jié)構(gòu),且包含源程序語法分析所需的全部靜態(tài)信息,是故障注入所需信息的主要載體。其具體過程如下:[0028]在讀取被測文件后,對被測文件進行語法分析,語法分析是對讀入的程序的字符流作為輸入,通過一系列的規(guī)則,將字符流映射成單詞Token,然后輸出單詞串和符號表。
[0029]然后將單詞串組合成各類語法短語,如“語句”,“表達式”等等,語法分析程序判斷源程序在結(jié)構(gòu)上是否正確,具體使用自頂向下分析分析方法,然后輸出無類型信息的抽象語法樹。
[0030]然后使用上述生成的抽象語法樹和符號表的信息,檢測源程序是否和語言定義的語義一致,同時收集類型信息并保存起來,從而形成最終的抽象語法樹。
[0031]S12,基于所述抽象語法樹,對變異算子進行建模,生成程序變異模型;
[0032]變異算子,也稱故障算子,是人們經(jīng)過長期的實踐總結(jié)出的模擬實際故障的一種源代碼語法替換規(guī)則。例如對C語言,有關(guān)系算子、邏輯算子、算術(shù)算子、賦值算子、位運算
曾早坐坐丁寸寸ο
[0033]本實施例對變異算子進行建模,不僅對傳統(tǒng)的故障類型進行建模,還針對C語言中常使用的循環(huán)結(jié)構(gòu)也進行了相應(yīng)的建模。此外,為滿足用戶注入自定義的故障類型,還提供了相應(yīng)的擴充接口。
[0034]S13,遍歷抽象語法樹,提取所述抽象語法樹的節(jié)點信息;
[0035]本實施例使用訪問者(Visitor)模式來對抽象語法樹進行遍歷。
[0036]訪問者(Visitor)模式是設(shè)計模式的一種,它可以在不改變各元素類的前提下,定義作用于這些元素的新操作。Vi sitor模式把抽象語法樹和作用于該結(jié)構(gòu)上的操作之間的耦合解開,使得操作集合可以相對自由地定義。抽象語法樹的每一個節(jié)點都可以接受一個訪問者的調(diào)用,此節(jié)點向訪問者對象傳入節(jié)點對象,而訪問者對象則反過來執(zhí)行節(jié)點對象的操作。
[0037]在本實施例中,面向抽象語法樹的訪問者(Visitor)的具體設(shè)計:首先訪問者實現(xiàn)一個具體操作,訪問者對象針對AST中每類節(jié)點都包含一個Visit方法,AST對象自身包含一個Accept方法,訪問者調(diào)用這個Accept方法,Accept方法再調(diào)用訪問者的Visit方法。
[0038]S14,根據(jù)上述抽象語法樹的節(jié)點信息和程序變異模型,生成相應(yīng)的故障注入點,并在故障注入點進行故障自動注入。
[0039]提取語法樹節(jié)點信息后,再根據(jù)標(biāo)準算子提供的程序變異模型,生成對應(yīng)的故障注入點(Injection Point)。該故障注入點包含了程序結(jié)構(gòu)信息,故障信息等。故障注入點為變異算子指定了具體的注入位置,故障注入點確定下來后,在故障注入點使用變異算子,進行具體的語法內(nèi)容替換,即開始故障自動注入。
[0040]S16,進行文件10操作,生成多個故障文件。
[0041]故障注入完成后,將注入故障的文件轉(zhuǎn)換為文本序列流,從而生成多個故障文件。
[0042]下面是本發(fā)明的一個故障注入的實施例。
[0043]本實施例使用的變異算子是REOR關(guān)系類算子,由==替換為 >=,本實施例的源程序
是:
[0044]
【權(quán)利要求】
1.故障自動注入與故障檢測的方法,其特征在于,包括: Si,對被測文件進行故障自動化注入,進行分析并生成多個故障文件; S2,對所述多個故障文件分別進行處理,生成多個可執(zhí)行文件; S3,根據(jù)所述被測文件選擇特定的測試用例庫,將所述測試用例庫中的用例逐一在所述每個可執(zhí)行文件上運行,進行故障檢測,并計算故障檢測率。
2.根據(jù)權(quán)利要求1所述的故障自動注入與故障檢測的方法,其特征在于,所述步驟SI包括: S11,輸入被測文件,對所述被測文件進行語法分析、詞法分析和語義分析,生成抽象語法樹; S12,基于所述抽象語法樹,對變異算子進行建模,生成程序變異模型; S13,遍歷所述抽象語法樹,提取所述抽象語法樹的節(jié)點信息; S14,根據(jù)所述抽象語法樹的節(jié)點信息和所述程序變異模型,生成相應(yīng)的故障注入點,并在所述故障注入點進行故障自動注入; S15,進行文件IO操作,生成多個故障文件。
3.根據(jù)權(quán)利要求1所述的故障自動注入與故障檢測的方法,其特征在于,所述步驟S2包括: 對所述多個故障文件分別進行預(yù)處理、編譯、匯編和鏈接,生成對應(yīng)的多個可執(zhí)行文件。
4.根據(jù)權(quán)利要求1所述的故障自動注入與故障檢測的方法,其特征在于,所述測試用例庫包括與所述被測文件的程序相對應(yīng)的用例。
5.根據(jù)權(quán)利要求4所述的故障自動注入與故障檢測的方法,其特征在于,所述測試用例庫還包括所述被測文件運行所述每個用例后的執(zhí)行結(jié)果。
6.根據(jù)權(quán)利要求1所述的故障自動注入與故障檢測的方法,其特征在于,所述測試用例庫中的所述用例滿足覆蓋準則,所述覆蓋準則可以是對所述被測試文件的100%分支覆至JHL ο
7.故障自動注入與故障檢測系統(tǒng),其特征在于,所述系統(tǒng)包括: 故障自動注入模塊,用于對被測文件進行自動化注入,進行分析并生成多個故障文件; 執(zhí)行文件生成模塊,用于對所述多個故障文件進行處理,生成多個可執(zhí)行文件; 故障檢測模塊,用于根據(jù)所述被測文件選擇特定的測試用例庫,將所述測試用例庫中的用例逐一在所述每個可執(zhí)行文件上運行,進行故障檢測,并計算故障檢測率。
8.根據(jù)權(quán)利要求7所述的故障自動注入與故障檢測系統(tǒng),其特征在于,所述故障自動注入模塊包括: 抽象樹生成單元,用于對所述被測文件進行語法分析、詞法分析和語義分析,生成抽象語法樹; 程序變異模型生成單元,用于基于所述抽象語法樹,對變異算子進行建模,生成程序變異模型; 抽象語法樹遍歷單元,用于遍歷所述抽象語法樹,提取所述抽象語法樹的節(jié)點信息; 故障自動注入單元,用于根據(jù)所述抽象語法樹的節(jié)點信息和所述程序變異模型,生成相應(yīng)的故障注入點, 并在所述故障注入點進行故障自動注入;故障文件生成單元,用于進行文件IO操作,生成多個故障文件。
【文檔編號】G06F11/36GK103914379SQ201410114863
【公開日】2014年7月9日 申請日期:2014年3月25日 優(yōu)先權(quán)日:2014年3月25日
【發(fā)明者】宮云戰(zhàn), 錢茛南, 王雅文, 黃俊飛, 金大海 申請人:北京郵電大學(xué)