一種結構測試中的被測程序改造方法及其系統(tǒng)的制作方法
【專利摘要】本發(fā)明涉及一種結構測試中被測程序的改造方法及其系統(tǒng),所述方法包括:S1、根據(jù)被測程序的結構生成抽象語法樹和控制流圖,并得到所述被測程序的輸入/輸出函數(shù)信息;S2、改造被測程序,并在所述被測程序中分別構造驅(qū)動函數(shù)、樁函數(shù)和探針函數(shù);S3、執(zhí)行所述被測程序,得到所述探針函數(shù)的插樁返回信息,根據(jù)所述插樁返回信息和所述控制流圖分析所述被測程序的路徑覆蓋情況。該方法通過改造被測函數(shù)單元,構造驅(qū)動函數(shù),構造樁函數(shù),構造探針函數(shù),使被測程序可獨立執(zhí)行,大大提高了結構測試的自動化程度。
【專利說明】一種結構測試中的被測程序改造方法及其系統(tǒng)
【技術領域】
[0001] 本發(fā)明涉及軟件測試【技術領域】,尤其涉及一種結構測試中的被測程序改造方法及 其系統(tǒng)。
【背景技術】
[0002] 軟件測試是發(fā)現(xiàn)軟件故障,提高軟件可靠性的主要手段,是保證軟件質(zhì)量的關鍵 技術。軟件測試方法主要分為白盒測試和黑盒測試,白盒測試又稱為面向程序結構覆蓋的 測試,簡稱結構測試,主要用在單元測試中。這種測試方法根據(jù)程序的內(nèi)部邏輯結構進行測 試,測試人員依據(jù)程序內(nèi)部邏輯結構的相關信息,設計測試用例,對程序的邏輯路徑進行測 試,來檢查程序中每條路徑是否都能按預定的要求正確的執(zhí)行。在面向程序結構覆蓋的測 試中,通常使用測試覆蓋準則來度量測試的充分性。
[0003] 面向程序結構覆蓋的測試方法能夠精確地分析程序的行為,通過檢查程序中不同 位置的狀態(tài),確定實際的狀態(tài)是否與預期的狀態(tài)一致,但是由于被測函數(shù)單元通常不能直 接單獨執(zhí)行,被測函數(shù)單元的路徑多且復雜等原因,為完成一次單元測試,測試人員需要花 費大量的時間構造執(zhí)行本次測試所需要的驅(qū)動函數(shù),樁函數(shù)等確保該單元函數(shù)能夠獨立執(zhí) 行,測試人員還需要人工分析路徑的覆蓋情況。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明提供一種結構測試中的被測程序改造方法及其系統(tǒng),通過改造被測函數(shù)單 元,構造驅(qū)動函數(shù),構造樁函數(shù),構造探針函數(shù),使被測程序可獨立執(zhí)行,大大提高了結構測 試的自動化程度。
[0005] 根據(jù)上述目的,本發(fā)明提供了一種結構測試中被測程序的改造方法,其特征在于, 所述方法包括:
[0006] S1、根據(jù)被測程序的結構生成抽象語法樹和控制流圖,并得到所述被測程序的輸 入/輸出函數(shù)信息。
[0007] S2、改造被測程序,并在所述被測程序中分別構造驅(qū)動函數(shù)、樁函數(shù)和探針函數(shù);
[0008] S3、執(zhí)行所述被測程序,得到所述探針函數(shù)的插樁返回信息,根據(jù)所述插樁返回信 息和所述控制流圖分析所述被測程序的路徑覆蓋情況。
[0009] 其中,所述步驟S2具體包括:
[0010] S21、判斷所述被測程序是否是主函數(shù),是,則對所述被測程序重命名,然后執(zhí)行步 驟S22 ;否則直接執(zhí)行步驟S22 ;
[0011] S22、對被測函數(shù)中的輸入/輸出函數(shù)進行變換,使輸入函數(shù)中的參數(shù)作為所述被 測程序的輸入,并將輸出函數(shù)的輸出結果保存;
[0012] S23、將被測程序中對子函數(shù)的調(diào)用語句變換成樁函數(shù),并對所述樁函數(shù)進行定 義,構造成可運行的樁函數(shù);
[0013] S24、將被測程序以探針函數(shù)進行插樁,并對所述探針函數(shù)進行定義,構造成可運 行的探針函數(shù);
[0014] S25、構造驅(qū)動函數(shù)。
[0015] 其中,所述輸入/輸出函數(shù)信息包括:所述被測程序的形參名及其類型,所述被測 程序的返回值類型;輸入/輸出函數(shù)的函數(shù)名,輸入/輸出函數(shù)中參數(shù)名及其類型。
[0016] 其中,所述輸入/輸出函數(shù)包括:控制臺I/O函數(shù),文件I/O函數(shù),網(wǎng)絡I/O函數(shù), 數(shù)據(jù)庫I/O函數(shù)。
[0017] 根據(jù)本發(fā)明的另一個方面,提供一種結構測試中被測程序的改造系統(tǒng),所述系統(tǒng) 包括:
[0018] 分析單元,用于根據(jù)被測程序的結構生成抽象語法樹和控制流圖,并得到所述被 測程序的輸入/輸出函數(shù)信息;
[0019] 改造單元,用于改造被測程序,并在所述被測程序中分別構造驅(qū)動函數(shù)、樁函數(shù)和 探針函數(shù);
[0020] 執(zhí)行單元,用于執(zhí)行所述被測程序,得到所述探針函數(shù)的插樁返回信息,根據(jù)所述 插樁返回信息和所述控制流圖分析所述被測程序的路徑覆蓋情況。
[0021] 本發(fā)明所公開一種結構測試中自動程序改造的方法及其系統(tǒng),通過改造被測程 序,構造驅(qū)動函數(shù)、樁函數(shù)、探針函數(shù),使被測程序可獨立執(zhí)行,然后分析路徑覆蓋情況,從 而大大提高了結構測試的自動化程度。
【專利附圖】
【附圖說明】
[0022] 通過參考附圖會更加清楚的理解本發(fā)明的特征和優(yōu)點,附圖是示意性的而不應理 解為對本發(fā)明進行任何限制,在附圖中:
[0023] 圖1示出了本發(fā)明的結構測試中被測程序的改造方法的流程圖。
[0024] 圖2示出了本發(fā)明的結構測試中被測程序的改造方法的步驟S2的具體流程圖。
[0025] 圖3示出了本發(fā)明的結構測試中被測程序的改造系統(tǒng)的結構框圖。
[0026] 圖4示出了本發(fā)明的結構測試中被測程序的改造方法的具體實施例的被測程序 的控制流圖結構示意圖。
【具體實施方式】
[0027] 下面將結合附圖對本發(fā)明的實施例進行詳細描述。
[0028] 圖1示出了本發(fā)明的結構測試中被測程序的改造方法的流程圖。
[0029] 圖2示出了本發(fā)明的結構測試中被測程序的改造方法的步驟S2的具體流程圖。
[0030]參照圖1,本發(fā)明的實施例的結構測試中被測程序的改造方法包括:
[0031] S1、根據(jù)被測程序的結構生成抽象語法樹和控制流圖,得到被測程序的輸入/輸 出函數(shù)信息,輸入/輸出函數(shù)信息包括:被測程序的形參名及其類型,被測程序的返回值類 型;輸入/輸出函數(shù)的函數(shù)名,輸入/輸出函數(shù)中參數(shù)名及其類型。
[0032] S2、改造被測程序,并在所述被測程序中分別構造驅(qū)動函數(shù)、樁函數(shù)和探針函數(shù);
[0033] S3、執(zhí)行所述被測程序,得到所述探針函數(shù)的插樁返回信息,根據(jù)所述插樁返回信 息和所述控制流圖分析所述被測程序的路徑覆蓋情況。
[0034] 其中,步驟S2具體包括:
[0035] S21、判斷所述被測程序是否是主函數(shù),是,則對所述被測程序重命名,然后執(zhí)行步 驟S22 ;否則直接執(zhí)行步驟S22 ;
[0036] S22、根據(jù)對抽象語法樹的分析,對被測函數(shù)中的輸入/輸出函數(shù)進行變換,使輸 入函數(shù)中的參數(shù)作為所述被測程序的輸入,并將輸出函數(shù)的輸出結果保存;
[0037] 其中,I/O函數(shù)包括但不限于以下幾種:
[0038] 控制臺I/O函數(shù),包括但不限于在控制臺讀取字符類型、整型、浮點型等類型的數(shù) 據(jù),和在控制臺輸出字符類型、整型、浮點型等類型的數(shù)據(jù)。
[0039] 文件I/O函數(shù),包括但不限于打開、關閉文件,讀取文件內(nèi)容,寫文件內(nèi)容,查看文 件狀態(tài)等。
[0040] 網(wǎng)絡I/O函數(shù),包括但不限于建立、斷開網(wǎng)絡連接,接收數(shù)據(jù)和發(fā)送數(shù)據(jù),查看網(wǎng) 絡連接狀等。
[0041] 數(shù)據(jù)庫I/O函數(shù),包括但不限于建立、斷開數(shù)據(jù)庫連接,從數(shù)據(jù)庫讀取數(shù)據(jù),寫數(shù) 據(jù)到數(shù)據(jù)庫,查看數(shù)據(jù)庫狀態(tài)等。
[0042] S23、將被測程序中對子函數(shù)的調(diào)用語句以文本的形式變換成樁函數(shù),并對所述樁 函數(shù)進行定義,構造成可運行的樁函數(shù);
[0043] 構造樁函數(shù)具體為:定義樁函數(shù)形參個數(shù)、順序和類型,返回值類型與被調(diào)用子函 數(shù)一致,樁函數(shù)用來模擬被測函數(shù)中調(diào)用的接口,在樁函數(shù)中可以根據(jù)路徑的約束改變其 返回值和參數(shù)值。
[0044] S24、將被測程序以探針函數(shù)進行插樁,并對所述探針函數(shù)進行定義,構造成可運 行的探針函數(shù)。
[0045] 其中,插裝的覆蓋準則包括但不限于以下方式:基于語句覆蓋的插裝,基于分支覆 蓋的插裝和基于判定/條件覆蓋的插裝。
[0046] 探針函數(shù)根據(jù)覆蓋準則的不同分為但不限于以下三種:語句探針函數(shù),分支探針 函數(shù),判定/條件探針函數(shù)。
[0047] S25、構造驅(qū)動函數(shù),驅(qū)動函數(shù)是一個主函數(shù),根據(jù)測試用例生成的結果在驅(qū)動函 數(shù)中定義要傳入被測函數(shù)的參數(shù)值,在驅(qū)動函數(shù)中調(diào)用被測函數(shù)單元,保存被測函數(shù)的返 回值。
[0048] 根據(jù)本發(fā)明的另一個方面,提供一種結構測試中被測程序的改造系統(tǒng),包括:
[0049]分析單元10,用于根據(jù)被測程序的結構生成抽象語法樹和控制流圖,并得到所述 被測程序的輸入/輸出函數(shù)信息;
[0050] 改造單元20,用于改造被測程序,并在所述被測程序中分別構造驅(qū)動函數(shù)、樁函數(shù) 和探針函數(shù);
[0051] 執(zhí)行單元30,用于執(zhí)行所述被測程序,得到所述探針函數(shù)的插樁返回信息,根據(jù)所 述插樁返回信息和所述控制流圖分析所述被測程序的路徑覆蓋情況。
[0052] 下面通過具體實施例詳細描述本發(fā)明的改造方法。
[0053] 設置被測程序為如下C程序:
【權利要求】
1. 一種結構測試中被測程序的改造方法,其特征在于,所述方法包括: 51、 根據(jù)被測程序的結構生成抽象語法樹和控制流圖,并得到所述被測程序的輸入/ 輸出函數(shù)信息; 52、 改造所述被測程序,并在所述被測程序中分別構造驅(qū)動函數(shù)、樁函數(shù)和探針函數(shù); 53、 執(zhí)行所述被測程序,得到所述探針函數(shù)的插樁返回信息,根據(jù)所述插樁返回信息和 所述控制流圖分析所述被測程序的路徑覆蓋情況。
2. 根據(jù)權利要求1所述的結構測試中被測程序的改造方法,其特征在于,所述步驟S2 具體包括: 521、 判斷所述被測程序是否是主函數(shù),是,則對所述被測程序重命名,然后執(zhí)行步驟 S22 ;否則直接執(zhí)行步驟S22 ; 522、 對所述被測函數(shù)中的輸入/輸出函數(shù)進行變換,使輸入函數(shù)中的參數(shù)作為所述被 測程序的輸入,并將輸出函數(shù)的輸出結果保存; 523、 將所述被測程序中對子函數(shù)的調(diào)用語句變換成樁函數(shù),并對所述樁函數(shù)進行定 義,構造成可運行的樁函數(shù); 524、 對所述被測程序以探針函數(shù)進行插樁,并對所述探針函數(shù)進行定義,構造成可運 行的探針函數(shù); 525、 構造驅(qū)動函數(shù)。
3. 根據(jù)權利要求1所述的結構測試中被測程序的改造方法,其特征在于,所述輸入/輸 出函數(shù)信息包括:所述被測程序的形參名及其類型,所述被測程序的返回值類型;輸入/輸 出函數(shù)的函數(shù)名,輸入/輸出函數(shù)中參數(shù)名及其類型。
4. 根據(jù)權利要求1所述的結構測試中被測程序的改造方法,其特征在于,所述輸入/輸 出函數(shù)包括:控制臺I/O函數(shù),文件I/O函數(shù),網(wǎng)絡I/O函數(shù),數(shù)據(jù)庫I/O函數(shù)。
5. -種結構測試中被測程序的改造系統(tǒng),其特征在于,所述系統(tǒng)包括: 分析單元,用于根據(jù)被測程序的結構生成抽象語法樹和控制流圖,并得到所述被測程 序的輸入/輸出函數(shù)信息; 改造單元,用于改造被測程序,并在所述被測程序中分別構造驅(qū)動函數(shù)、樁函數(shù)和探針 函數(shù); 執(zhí)行單元,用于執(zhí)行所述被測程序,得到所述探針函數(shù)的插樁返回信息,根據(jù)所述插樁 返回信息和所述控制流圖分析所述被測程序的路徑覆蓋情況。
【文檔編號】G06F11/36GK104317710SQ201410564233
【公開日】2015年1月28日 申請日期:2014年10月21日 優(yōu)先權日:2014年10月21日
【發(fā)明者】宮云戰(zhàn), 楊憶文, 王雅文, 黃俊飛, 金大海 申請人:北京郵電大學