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