亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種故障確認(rèn)方法及其系統(tǒng)的制作方法

文檔序號:6631114閱讀:216來源:國知局
一種故障確認(rèn)方法及其系統(tǒng)的制作方法
【專利摘要】本發(fā)明涉及一種故障確認(rèn)方法及其系統(tǒng),所述方法包括:S1.利用預(yù)設(shè)故障模式,在靜態(tài)分析過程中匹配出疑似故障點,對所述疑似故障點進(jìn)行篩選后標(biāo)注在被測程序的控制流圖中;S2.在所述疑似故障點添加故障觸發(fā)條件,形成故障節(jié)點,構(gòu)造故障路徑,并將新生成的故障節(jié)點添加到所述控制流圖中,并作標(biāo)記;S3.通過預(yù)設(shè)的路徑選擇策略,計算每個疑似故障點分別在每個節(jié)點的權(quán)重;S4.遍歷控制流圖,根據(jù)每個故障點在當(dāng)前節(jié)點的權(quán)重選擇故障路徑,并對選擇的路徑的每個節(jié)點提取約束來指導(dǎo)動態(tài)執(zhí)行的取值,對每個疑似故障點進(jìn)行確認(rèn)。該方法在執(zhí)行過程中利用選路策略和動態(tài)符號執(zhí)行技術(shù)相結(jié)合,指導(dǎo)程序高效的覆蓋故障條件節(jié)點,從而提高確認(rèn)故障效率。
【專利說明】一種故障確認(rèn)方法及其系統(tǒng)

【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及軟件測試【技術(shù)領(lǐng)域】,尤其涉及一種基于靜態(tài)分析技術(shù)、虛擬機技術(shù)和 動態(tài)符號執(zhí)行技術(shù)的故障確認(rèn)方法及其系統(tǒng)。

【背景技術(shù)】
[0002] 計算機、網(wǎng)絡(luò)通信及軟件等信息技術(shù)的飛速發(fā)展與廣泛應(yīng)用,推動了現(xiàn)代社會向 信息社會的邁進(jìn),而操作系統(tǒng)和軟件中存在的大量故障和隱患也使得當(dāng)前信息安全形勢日 益嚴(yán)峻,惡意的攻擊者可以利用這些安全漏洞提升權(quán)限,訪問未授權(quán)資源,甚至破壞敏感數(shù) 據(jù)。軟件安全漏洞已經(jīng)成為諸多系統(tǒng)安全問題的根源之一,因此如何發(fā)現(xiàn)軟件中的安全漏 洞至關(guān)重要。
[0003] 程序靜態(tài)分析(Program Static Analysis)是指在不運行代碼的方式下,通過詞 法分析、語法分析、控制流分析等技術(shù)對程序代碼進(jìn)行掃描,驗證代碼是否滿足規(guī)范性、安 全性、可靠性、可維護性等指標(biāo)的一種代碼分析技術(shù)。程序靜態(tài)分析是與程序動態(tài)分析相 對應(yīng)的代碼分析技術(shù),它通過對代碼的自動掃描發(fā)現(xiàn)隱含的程序問題,主要具有以下特點: (1)不實際執(zhí)行程序。動態(tài)分析是通過在真實或模擬環(huán)境中執(zhí)行程序進(jìn)行分析的方法,多用 于性能測試、功能測試、內(nèi)存泄漏測試等方面。與之相反,靜態(tài)分析不運行代碼只是通過對 代碼的靜態(tài)掃描對程序進(jìn)行分析。(2)執(zhí)行速度快、效率高。目前成熟的代碼靜態(tài)分析工具 每秒可掃描上萬行代碼,相對于動態(tài)分析,具有檢測速度快、效率高的特點。(3)誤報率較 高。代碼靜態(tài)分析是通過對程序掃描找到匹配某種規(guī)則模式的代碼從而發(fā)現(xiàn)代碼中存在的 問題,例如可以定位StrcpyO這樣可能存在故障的函數(shù),這樣有時會造成將一些正確代碼 定位為缺陷的問題,因此靜態(tài)分析有時存在誤報率較高的缺陷。
[0004] 動態(tài)程序分析是指通過運行程序來分析它的行為,從而總結(jié)屬性或發(fā)現(xiàn)存在的 錯誤。動態(tài)程序分析通常依靠探索程序運行的所有路徑。一個簡單的做法是隨機產(chǎn)生輸入 數(shù)據(jù)并觀察程序?qū)@些輸入返回的結(jié)果。若程序?qū)μ囟ǖ妮斎氡憩F(xiàn)出與需求相悖的行為, 可認(rèn)為該輸入暴露了程序的錯誤。若程序?qū)Υ罅侩S機輸入產(chǎn)生的結(jié)果滿足一定的性質(zhì),如 輸出值總在有效范圍內(nèi),則認(rèn)為程序?qū)λ休斎攵季邆浯藢傩?。此種方法在檢測過程中無 方向性,對輸入沒有限制,從而會造成測試無限制的進(jìn)行或需要很長的執(zhí)行時間,其檢測效 率比較低。


【發(fā)明內(nèi)容】

[0005] 本發(fā)明提供一種動靜結(jié)合的故障確認(rèn)方法及其系統(tǒng),能夠在動態(tài)執(zhí)行之前首先確 定故障位置排除無關(guān)路徑,添加故障條件節(jié)點語句,然后在執(zhí)行過程中利用選路策略和動 態(tài)符號執(zhí)行技術(shù)相結(jié)合,指導(dǎo)程序高效的覆蓋故障條件節(jié)點,從而提高確認(rèn)故障效率。
[0006] 根據(jù)上述目的,本發(fā)明提供了一種故障確認(rèn)方法,所述方法包括:
[0007] S1、利用預(yù)設(shè)故障模式,在靜態(tài)分析過程中匹配出疑似故障點,對所述疑似故障點 進(jìn)行篩選后標(biāo)注在被測程序的控制流圖中;
[0008] S2、在所述疑似故障點添加故障觸發(fā)條件,形成故障節(jié)點,構(gòu)造故障路徑,并將新 生成的故障節(jié)點添加到所述控制流圖中;
[0009] S3、通過預(yù)設(shè)的路徑選擇策略,計算每個疑似故障點分別在每個節(jié)點的權(quán)重; [0010] S4、遍歷控制流圖,根據(jù)每個疑似故障點在當(dāng)前節(jié)點的權(quán)重選擇故障路徑,并對選 擇的故障路徑的每個節(jié)點通過提取約束來指導(dǎo)動態(tài)執(zhí)行,對每個疑似故障點進(jìn)行確認(rèn)。
[0011] 其中,所述步驟Sl具體包括:
[0012] S11、將所述被測程序的源代碼轉(zhuǎn)化成中間代碼,通過所述故障模式靜態(tài)地分析中 間代碼,收集疑似故障點,然后利用代碼動態(tài)插樁技術(shù),對所述疑似故障點的關(guān)鍵代碼進(jìn)行 插樁;
[0013] S12、利用靜態(tài)分析技術(shù)構(gòu)建控制流圖,通過排除不可達(dá)路徑和不可達(dá)節(jié)點,得出 疑似故障點的可達(dá)路徑集合。
[0014] 其中,所述步驟S2具體包括:
[0015] S21、在所述疑似故障點的語句之前添加約束判斷語句,以在所述控制流圖上添加 一個節(jié)點;
[0016] S22、將所添加的節(jié)點的約束條件作為故障觸發(fā)條件,形成故障節(jié)點,構(gòu)建所述故 障節(jié)點的故障路徑,并在所述控制流圖上標(biāo)記。
[0017] 其中,所述疑似故障點在節(jié)點的權(quán)重為從程序入口到該疑似故障點的經(jīng)過該節(jié)點 的最短路徑的數(shù)量。
[0018] 其中,所述步驟S4具體包括:
[0019] S41、以預(yù)設(shè)值作為輸入,從程序入口執(zhí)行所述被測程序;
[0020] S42,當(dāng)執(zhí)行到節(jié)點時,根據(jù)當(dāng)前節(jié)點的每個疑似故障點的權(quán)重,選擇權(quán)重最高的 疑似故障點的路徑進(jìn)行遍歷,并從選擇的當(dāng)前路徑的分支語句的中搜集所有符號約束,并 繼續(xù)向滿足約束的分支執(zhí)行;
[0021] S43,當(dāng)選擇的分支路徑不可達(dá)時,利用符號執(zhí)行技術(shù)對約束進(jìn)行修改,構(gòu)造出一 條新的可行的路徑約束,并求解出一個可行的新的具體輸入,繼續(xù)執(zhí)行程序;
[0022] S44,當(dāng)所選擇的疑似故障點的所有路徑都不可達(dá)時,則判定該疑似故障點處沒有 故障,執(zhí)行步驟S46,否則執(zhí)行下一步;
[0023] S45,當(dāng)覆蓋到選擇的疑似故障點后,判斷是否還有未覆蓋的疑似故障點,是,則執(zhí) 行下一步,否則結(jié)束;
[0024] S46,排除覆蓋的疑似故障點,并去掉與剩下的疑似故障點無關(guān)的節(jié)點,返回到步 驟 S41。
[0025] 根據(jù)本發(fā)明的另一個方面,提供一種故障確認(rèn)系統(tǒng),其特征在于,所述系統(tǒng)包括: [0026] 故障定位模塊,用于利用預(yù)設(shè)故障模式,在靜態(tài)分析過程中匹配出故障位置,并標(biāo) 注在被測程序的控制流圖中;
[0027] 故障路徑生成模塊,用于在所述故障位置添加故障觸發(fā)條件,形成故障節(jié)點,構(gòu)造 故障路徑,并將新生成的故障節(jié)點添加到所述控制流圖中;
[0028] 權(quán)重計算模塊,用于通過預(yù)設(shè)的路徑選擇策略,計算每個疑似故障點分別在每個 節(jié)點的權(quán)重;
[0029] 路徑執(zhí)行模塊,用于根據(jù)每個疑似故障點在當(dāng)前節(jié)點的權(quán)重選擇故障路徑,并對 選擇的故障路徑的每個節(jié)點通過提取約束來指導(dǎo)動態(tài)執(zhí)行,對每個疑似故障點進(jìn)行確認(rèn)。
[0030] 本發(fā)明的故障確認(rèn)方法及其系統(tǒng),基于虛擬機技術(shù)和動態(tài)符號執(zhí)行技術(shù)相結(jié)合, 通過對程序源代碼進(jìn)行靜態(tài)分析,同時將源代碼編譯成二進(jìn)制代碼通過虛擬機技術(shù)進(jìn)行動 態(tài)執(zhí)行和分析方式,該方法可以直接給出觸發(fā)故障的測試用例,從而解決靜態(tài)測試海量誤 報的問題。首先利用靜態(tài)分析鎖定故障位置并添加觸發(fā)故障的路徑條件,同時利用動態(tài)插 樁技術(shù)監(jiān)控程序的執(zhí)行過程,并在故障點處添加故障發(fā)生條件路徑分支。然后針對故障位 置排除不可達(dá)路徑,通過選路策略擇優(yōu)選擇代價較小的路徑去覆蓋故障路徑或故障點,利 用動態(tài)符號執(zhí)行技術(shù)對待測路徑的每個分支節(jié)點提取約束來指導(dǎo)動態(tài)執(zhí)行的取值。最終達(dá) 到以較小的代價確認(rèn)故障的目的。

【專利附圖】

【附圖說明】
[0031] 通過參考附圖會更加清楚的理解本發(fā)明的特征和優(yōu)點,附圖是示意性的而不應(yīng)理 解為對本發(fā)明進(jìn)行任何限制,在附圖中:
[0032] 圖1示出了本發(fā)明的故障確認(rèn)方法的流程圖。
[0033] 圖2示出了本發(fā)明的故障確認(rèn)方法的第一實施例的控制流圖。
[0034] 圖3示出了本發(fā)明的故障確認(rèn)方法的第二實施例的故障點控制流圖。
[0035] 圖4示出了本發(fā)明的故障確認(rèn)方法的第二實施例的故障確認(rèn)模式的示意圖。
[0036] 圖5示出了本發(fā)明的故障確認(rèn)方法的第三實施例的故障點集合的結(jié)構(gòu)圖。
[0037] 圖6示出了本發(fā)明的故障確認(rèn)方法的第三實施例的排除故障不可達(dá)路徑和節(jié)點 的結(jié)構(gòu)圖。
[0038] 圖7示出了本發(fā)明的故障確認(rèn)方法的第三實施例的一個故障的確認(rèn)方法的執(zhí)行 過程圖。
[0039] 圖8示出了本發(fā)明的故障確認(rèn)系統(tǒng)的結(jié)構(gòu)框圖。

【具體實施方式】
[0040] 下面將結(jié)合附圖對本發(fā)明的實施例進(jìn)行詳細(xì)描述。
[0041] 根據(jù)上述目的,本發(fā)明提供了本發(fā)明提供了一種故障確認(rèn)方法,其特征在于,所述 方法包括:
[0042] S1、利用預(yù)設(shè)故障模式,在靜態(tài)分析過程中匹配出疑似故障點,對所述疑似故障點 進(jìn)行篩選后標(biāo)注在被測程序的控制流圖中;
[0043] 步驟Sl具體包括:
[0044] S11、將所述被測程序的源代碼轉(zhuǎn)化成中間代碼,通過所述故障模式靜態(tài)地分析中 間代碼,收集疑似故障點,然后利用代碼動態(tài)插樁技術(shù),對所述疑似故障點的關(guān)鍵代碼進(jìn)行 插樁;
[0045] S12、利用靜態(tài)分析技術(shù)構(gòu)建控制流圖,通過排除不可達(dá)路徑和不可達(dá)節(jié)點,得出 疑似故障點的可達(dá)路徑集合。
[0046] S2、在所述疑似故障點添加故障觸發(fā)條件,形成故障節(jié)點,構(gòu)造故障路徑,并將新 生成的故障節(jié)點添加到所述控制流圖中;
[0047] 步驟S2具體包括:
[0048] S21、在所述疑似故障點的語句之前添加約束判斷語句,以在所述控制流圖上添加 一個節(jié)點;
[0049] S22、將所添加的節(jié)點的約束條件作為故障觸發(fā)條件,形成故障節(jié)點,構(gòu)建所述故 障節(jié)點的故障路徑,并在所述控制流圖上標(biāo)記。
[0050] S3、通過預(yù)設(shè)的路徑選擇策略,計算每個疑似故障點分別在每個節(jié)點的權(quán)重;
[0051] 其中,所述疑似故障點在節(jié)點的權(quán)重為從程序入口到該疑似故障點的經(jīng)過該節(jié)點 的最短路徑的數(shù)量。
[0052] S4、遍歷控制流圖,根據(jù)每個疑似故障點在當(dāng)前節(jié)點的權(quán)重選擇故障路徑,并對選 擇的故障路徑的每個節(jié)點通過提取約束來指導(dǎo)動態(tài)執(zhí)行,對每個疑似故障點進(jìn)行確認(rèn)。
[0053] 步驟S4具體包括:
[0054] S41、以預(yù)設(shè)值作為輸入,從程序入口執(zhí)行所述被測程序;
[0055] S42,當(dāng)執(zhí)行到節(jié)點時,根據(jù)當(dāng)前節(jié)點的每個疑似故障點的權(quán)重,選擇權(quán)重最高的 疑似故障點的路徑進(jìn)行遍歷,并從選擇的當(dāng)前路徑的分支語句的中搜集所有符號約束,并 繼續(xù)向滿足約束的分支執(zhí)行;
[0056] S43,當(dāng)選擇的分支路徑不可達(dá)時,利用符號執(zhí)行技術(shù)對約束進(jìn)行修改,構(gòu)造出一 條新的可行的路徑約束,并求解出一個可行的新的具體輸入,繼續(xù)執(zhí)行程序;
[0057] S44,當(dāng)所選擇的疑似故障點的所有路徑都不可達(dá)時,則判定該疑似故障點處沒有 故障,執(zhí)行步驟S46,否則執(zhí)行下一步;
[0058] S45,當(dāng)覆蓋到選擇的疑似故障點后,判斷是否還有未覆蓋的疑似故障點,是,則執(zhí) 行下一步,否則結(jié)束;
[0059] S46,排除覆蓋的疑似故障點,并去掉與剩下的疑似故障點無關(guān)的節(jié)點,返回到步 驟 S41。
[0060] 以下通過具體實施例詳細(xì)說明上述方法。
[0061] 實施例一
[0062] 本實施例中,在檢測故障點時,在疑似故障的語句之前加一個約束判斷語句,也就 相當(dāng)于在控制流圖上加了一個節(jié)點,讓到達(dá)該節(jié)點約束條件為故障發(fā)生的條件。那么故障 確認(rèn)就轉(zhuǎn)化為判斷這個節(jié)點是否存在可達(dá)路徑的問題,只要證明了這個節(jié)點可達(dá)就確認(rèn)了 該故障問題。
[0063] 控制流圖CFG是一有向圖G = (N, E, nentry, nexit).其中,N是節(jié)點集,程序中的 每個語句都對應(yīng)圖中的一個節(jié)點;邊集E = {〈nl,n2>|nl,n2 e N且nl執(zhí)行后,可能立即執(zhí) 行 n2}。
[0064] 本實施例中以除零故障為例,初始程序如下:
[0065]

【權(quán)利要求】
1. 一種故障確認(rèn)方法,其特征在于,所述方法包括: 51、 利用預(yù)設(shè)故障模式,在靜態(tài)分析過程中匹配出疑似故障點,對所述疑似故障點進(jìn)行 篩選后標(biāo)注在被測程序的控制流圖中; 52、 在所述疑似故障點添加故障觸發(fā)條件,形成故障節(jié)點,構(gòu)造故障路徑,并將新生成 的故障節(jié)點添加到所述控制流圖中; 53、 通過預(yù)設(shè)的路徑選擇策略,計算每個疑似故障點分別在每個節(jié)點的權(quán)重; 54、 遍歷控制流圖,根據(jù)每個疑似故障點在當(dāng)前節(jié)點的權(quán)重選擇故障路徑,并對選擇的 故障路徑的每個節(jié)點通過提取約束來指導(dǎo)動態(tài)執(zhí)行,對每個疑似故障點進(jìn)行確認(rèn)。
2. 根據(jù)權(quán)利要求1所述的故障確認(rèn)方法,其特征在于,所述步驟S1具體包括: 511、 將所述被測程序的源代碼轉(zhuǎn)化成中間代碼,通過所述故障模式靜態(tài)地分析中間 代碼,收集疑似故障點,然后利用代碼動態(tài)插樁技術(shù),對所述疑似故障點的關(guān)鍵代碼進(jìn)行插 樁; 512、 利用靜態(tài)分析技術(shù)構(gòu)建控制流圖,通過排除不可達(dá)路徑和不可達(dá)節(jié)點,得出疑似 故障點的可達(dá)路徑集合。
3. 根據(jù)權(quán)利要求2所述的故障確認(rèn)方法,其特征在于,所述步驟S2具體包括: 521、 在所述疑似故障點的語句之前添加約束判斷語句,以在所述控制流圖上添加一個 節(jié)點; 522、 將所添加的節(jié)點的約束條件作為故障觸發(fā)條件,形成故障節(jié)點,構(gòu)建所述故障節(jié) 點的故障路徑,并在所述控制流圖上標(biāo)記。
4. 根據(jù)權(quán)利要求1所述的故障確認(rèn)方法,其特征在于,所述疑似故障點在節(jié)點的權(quán)重 為從程序入口到該疑似故障點的經(jīng)過該節(jié)點的最短路徑的數(shù)量。
5. 根據(jù)權(quán)利要求1所述的故障確認(rèn)方法,其特征在于,所述步驟S4具體包括: 541, 以預(yù)設(shè)值作為輸入,從程序入口執(zhí)行所述被測程序; 542, 當(dāng)執(zhí)行到節(jié)點時,根據(jù)當(dāng)前節(jié)點的每個疑似故障點的權(quán)重,選擇權(quán)重最高的疑似 故障點的路徑進(jìn)行遍歷,并從選擇的當(dāng)前路徑的分支語句的中搜集所有符號約束,并繼續(xù) 向滿足約束的分支執(zhí)行; 543, 當(dāng)選擇的分支路徑不可達(dá)時,利用符號執(zhí)行技術(shù)對約束進(jìn)行修改,構(gòu)造出一條新 的可行的路徑約束,并求解出一個可行的新的具體輸入,繼續(xù)執(zhí)行程序; 544, 當(dāng)所選擇的疑似故障點的所有路徑都不可達(dá)時,則判定該疑似故障點處沒有故 障,執(zhí)行步驟S46,否則執(zhí)行下一步; 545, 當(dāng)覆蓋到選擇的疑似故障點后,判斷是否還有未覆蓋的疑似故障點,是,則執(zhí)行下 一步,否則結(jié)束; 546, 排除覆蓋的疑似故障點,并去掉與剩下的疑似故障點無關(guān)的節(jié)點,返回到步驟 S41。
6. -種故障確認(rèn)系統(tǒng),其特征在于,所述系統(tǒng)包括: 故障定位模塊,用于利用預(yù)設(shè)故障模式,在靜態(tài)分析過程中匹配出故障位置,并標(biāo)注在 被測程序的控制流圖中; 故障路徑生成模塊,用于在所述故障位置添加故障觸發(fā)條件,形成故障節(jié)點,構(gòu)造故障 路徑,并將新生成的故障節(jié)點添加到所述控制流圖中; 權(quán)重計算模塊,用于通過預(yù)設(shè)的路徑選擇策略,計算每個疑似故障點分別在每個節(jié)點 的權(quán)重; 路徑執(zhí)行模塊,用于根據(jù)每個疑似故障點在當(dāng)前節(jié)點的權(quán)重選擇故障路徑,并對選擇 的故障路徑的每個節(jié)點通過提取約束來指導(dǎo)動態(tài)執(zhí)行,對每個疑似故障點進(jìn)行確認(rèn)。
【文檔編號】G06F11/36GK104360938SQ201410564479
【公開日】2015年2月18日 申請日期:2014年10月21日 優(yōu)先權(quán)日:2014年10月21日
【發(fā)明者】金大海, 甄濤, 宮云戰(zhàn), 王雅文, 黃俊飛 申請人:北京郵電大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1