結(jié)構(gòu)測試中的邊界值測試方法及其系統(tǒng)的制作方法
【專利摘要】本發(fā)明涉及一種結(jié)構(gòu)測試中的邊界值測試方法及其系統(tǒng),所述方法包括:S1,根據(jù)被測文件中的語句的語義和表達式的語義選擇特定的邊界覆蓋準則;S2,根據(jù)所述邊界覆蓋準則獲取所述被測文件的語句邊界值和表達式邊界值;S3,為所述語句邊界值和所述表達式邊界值選擇對應(yīng)的可達路徑;S4,根據(jù)所述可達路徑生成測試用例,并對所述測試用例進行比較,從而得到邊界值測試結(jié)果。本發(fā)明的結(jié)構(gòu)測試中的邊界值測試方法及其系統(tǒng),通過對不同的語句以及表達式選擇特定的邊界值覆蓋準則,可以快速地找到對應(yīng)的邊界值,從而可以在結(jié)構(gòu)測試中對語句以及表達式的邊界值進行測試。
【專利說明】結(jié)構(gòu)測試中的邊界值測試方法及其系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及軟件測試【技術(shù)領(lǐng)域】,尤其是,尤其涉及一種在結(jié)構(gòu)測試中的邊界值測試方法。
【背景技術(shù)】
[0002]邊界值測試的提出是用于功能測試。1979年,Myers GJ.提出輸入域的邊界比中間更加容易發(fā)生錯誤,從而將邊界值分析看成補充等價類劃分的測試用例生成技術(shù),即不是選擇等價類的任意元素,而是選擇等價類的邊界。1997年Reid使用真實工程中的17個模塊做實驗,對比邊界值、語句覆蓋、分支覆蓋、隨機以及其他的測試方法的錯誤檢測效果。試驗結(jié)果表明,邊界值比其他所有方法都好,找到了幾乎17個模塊中的所有錯誤;其中的14個模塊,需要50000個隨機測試用例才能得到與邊界值相當?shù)臏y試效果。
[0003]結(jié)構(gòu)測試是一種基于代碼的測試,人們提出各種覆蓋準則來驗證結(jié)構(gòu)測試的充分性,比如語句覆蓋、分支覆蓋、全定義覆蓋、全引用覆蓋等等。但是這些傳統(tǒng)的覆蓋測試技術(shù)都是基于控制流圖,以控制流圖上的點和邊為覆蓋元素,所以只要求為覆蓋元素生成一個測試用例即可,而不關(guān)注取值是否在邊界上,導(dǎo)致傳統(tǒng)覆蓋測試很難檢測到邊界值發(fā)生錯誤的情況。
【發(fā)明內(nèi)容】
[0004]本發(fā)明提供一種結(jié)構(gòu)測試中的邊界值測試方法及其系統(tǒng),可以快速地找到各個語句以及表達式的邊界值,并對其邊界值進行測試。
[0005]根據(jù)上述目的,本發(fā)明提供了一種結(jié)構(gòu)測試中的邊界值測試方法,該包括:SI,根據(jù)被測文件中的語句的語義和表達式的語義選擇特定的邊界覆蓋準則;S2,根據(jù)所述邊界覆蓋準則獲取所述被測文件的語句邊界值和表達式邊界值;S3,為所述語句邊界值和所述表達式邊界值選擇對應(yīng)的可達路徑;S4,根據(jù)所述可達路徑生成測試用例,并對所述測試用例進行比較,從而得到邊界值測試結(jié)果。
[0006]其中,所述步驟S2包括:從所述結(jié)構(gòu)測試的控制流圖中,得到語句節(jié)點,然后根據(jù)所述邊界覆蓋準則得到所述語句邊界值;從結(jié)構(gòu)測試中的抽象語法樹中,得到所述表達式的節(jié)點,然后根據(jù)所述邊界覆蓋準則得到所述表達式邊界值。
[0007]其中,根據(jù)所述邊界值覆蓋準則獲取所述語句邊界值的過程還包括:所述結(jié)構(gòu)測試中的跳轉(zhuǎn)語句的每個邊界值為一個路徑集合,所述邊界覆蓋準則檢測到所述集合中的任一個元素,則得到所述跳轉(zhuǎn)語句的語句邊界值。
[0008]其中,當語句邊界值為路徑集合時,為所述路徑集合中的任一個元素選擇到可達路徑,即為此語句邊界值選擇到可達路徑。
[0009]其中,當語句邊界值為路徑集合時,對此語句邊界值選擇路徑的具體步驟包括:S51,獲取所述語句邊界值中的第一個元素;S52,選擇一條經(jīng)過所述第一個元素的第一路徑;S53,判斷所述第一路徑是否為所述第一個元素的可達路徑;S54,如果是,則將所述第一路徑作為所述語句邊界值的可達路徑;如果否,則選擇所述語句邊界值中的下一個元素,并重復(fù)進行上述判斷,直到找到所述語句邊界值的可達路徑。
[0010]其中,對所述表達式邊界值選擇路徑的具體步驟包括:S61,找到所述表達式所在的控制流圖節(jié)點;S62,獲取所述表達式的邊界值的約束Cv ;S63,選擇一條經(jīng)過所述控制流圖節(jié)點的路徑;S64,獲取所述路徑的約束Cp ;S65,判斷C=Cv Λ Cp是否有解;S66,如果判定C有解,則所述路徑為所述表達式邊界值的可達路徑;如果判定C無解,則重新選擇一條經(jīng)過所述控制流圖節(jié)點的路徑,直至C有解。
[0011]根據(jù)本發(fā)明的另一個方面,提供了一種故障自動注入與故障檢測的系統(tǒng),所述系統(tǒng)包括:邊界覆蓋準則選擇模塊,用于根據(jù)被測文件中的語句的語義和表達式的語義選擇特定的邊界覆蓋準則;邊界值選取模塊,用于根據(jù)所述邊界覆蓋準則獲取所述被測文件的語句邊界值和表達式邊界值;可達路徑選擇模塊,用于為所述語句邊界值和所述表達式邊界值選擇對應(yīng)的可達路徑;邊界值測試模塊,用于根據(jù)所述可達路徑生成測試用例,并對所述測試用例進行比較,從而得到邊界值測試結(jié)果。
[0012]本發(fā)明所述的結(jié)構(gòu)測試中的邊界值測試方法及其系統(tǒng),通過對不同的語句以及表達式選擇特定的邊界值覆蓋準則,可以快速地找到對應(yīng)的邊界值,從而可以在結(jié)構(gòu)測試中對語句以及表達式的邊界值進行測試。
【專利附圖】
【附圖說明】
[0013]通過參考附圖會更加清楚的理解本發(fā)明的特征和優(yōu)點,附圖是示意性的而不應(yīng)理解為對本發(fā)明進行任何限制,在附圖中:
[0014]圖1示出了本發(fā)明的結(jié)構(gòu)測試中的邊界值測試方法的流程圖;
[0015]圖2示出了本發(fā)明的結(jié)構(gòu)測試中的邊界值測試方法的對語句邊界值選擇路徑的實施例的流程圖;
[0016]圖3示出了本發(fā)明的結(jié)構(gòu)測試中的邊界值測試方法的對所述表達式邊界值選擇路徑的實施例的流程圖;
[0017]圖4示出了本發(fā)明的結(jié)構(gòu)測試中的邊界值的測試系統(tǒng)的結(jié)構(gòu)框圖。
【具體實施方式】
[0018]下面將結(jié)合附圖對本發(fā)明的實施例進行詳細描述。
[0019]圖1示出了本發(fā)明的結(jié)構(gòu)測試中的邊界值測試方法的流程圖。
[0020]參照圖1,本發(fā)明的實施例的結(jié)構(gòu)測試中的邊界值測試方法包括:
[0021]步驟SI,根據(jù)被測文件中的語句的語義和表達式的語義選擇特定的邊界覆蓋準則。
[0022]步驟S2,根據(jù)所述邊界覆蓋準則獲取所述被測文件的語句邊界值和表達式邊界值。
[0023]在本實施例中,通過從所述結(jié)構(gòu)測試的控制流圖中,得到語句節(jié)點,然后根據(jù)所述邊界覆蓋準則得到所述語句邊界值。并且,在所述結(jié)構(gòu)測試中的跳轉(zhuǎn)語句的每個邊界值為一個路徑集合,所述邊界覆蓋準則檢測到所述集合中的任一個元素,則得到所述跳轉(zhuǎn)語句的語句邊界值。[0024]同時,從結(jié)構(gòu)測試中的抽象語法樹中,得到所述表達式的節(jié)點,然后根據(jù)所述邊界覆蓋準則得到所述表達式邊界值。
[0025]步驟S3,為所述語句邊界值和所述表達式邊界值選擇對應(yīng)的可達路徑。
[0026]在本實施例中,當語句邊界值為路徑集合時,為所述路徑集合中的任一個元素選擇到可達路徑,則為此語句邊界值選擇到可達路徑。
[0027]圖2示出了本發(fā)明的結(jié)構(gòu)測試中的邊界值測試方法的對語句邊界值選擇路徑的實施例的流程圖。
[0028]參照圖2,當語句邊界值為路徑集合V=Ivi |i=l,2,3...}時,對此語句邊界值V=Ivi I i=l, 2,3...}選擇路徑的具體步驟包括:
[0029]S51,獲取語句邊界值V中的任一個元素V1 ;
[0030]S52,選擇一條經(jīng)過元素V1的路徑P ;
[0031]S53,判斷路徑P是否為元素V1的可達路徑;
[0032]S54,如果是,則將路徑P作為語句邊界值V的可達路徑;如果否,則選擇語句邊界值V中的下一個元素,并重復(fù)進行上述判斷,直到找到語句邊界值V的可達路徑。
[0033]在本實施例中,其他不是路徑集合的邊界值,都是控制流圖中的點和邊,其選擇路徑的方法與現(xiàn)有測試程序中的方法相同,在此不再贅述。
[0034]圖3示出了本發(fā)明的結(jié)構(gòu)測試中的邊界值測試方法的對所述表達式邊界值選擇路徑的實施例的流程圖;
[0035]參照圖3,在本發(fā)明的另一個實施例中,對表達式邊界值選擇路徑的具體步驟包括:
[0036]S61,找到所述表達式所在的控制流語句節(jié)點S,
[0037]S62,得到所述表達式的邊界值的約束Cv ;
[0038]S63,選擇一條經(jīng)過上述控制流圖節(jié)點S的路徑P ;
[0039]S64,獲取所述路徑的約束Cp ;
[0040]S65,判斷C=Cv Λ Cp是否有解;
[0041]S66,如果判定C有解,則所述路徑為所述表達式邊界值的可達路徑;如果判定C無解,則重新選擇一條經(jīng)過所述控制流圖節(jié)點的路徑,直至C有解。
[0042]S4,根據(jù)所述可達路徑生成測試用例,并對所述測試用例進行比較,從而得到邊界值測試結(jié)果。
[0043]下面是本發(fā)明的在結(jié)構(gòu)測試中進行邊界值測試的一個具體的實施例。
[0044]對一個字符串表示的小數(shù),四舍五入取整:
[0045]程序源代碼(節(jié)選)及對應(yīng)的控制流圖如下所示:
[0046][0047]
【權(quán)利要求】
1.結(jié)構(gòu)測試中的邊界值測試方法,其特征在于,包括: Si,根據(jù)被測文件中的語句的語義和表達式的語義選擇特定的邊界覆蓋準則; S2,根據(jù)所述邊界覆蓋準則獲取所述被測文件的語句邊界值和表達式邊界值; S3,為所述語句邊界值和所述表達式邊界值選擇對應(yīng)的可達路徑; S4,根據(jù)所述可達路徑生成測試用例,并對所述測試用例進行比較,從而得到邊界值測試結(jié)果。
2.根據(jù)權(quán)利要求1所述的故障自動注入與故障檢測的方法,其特征在于,所述步驟S2包括: 從所述結(jié)構(gòu)測試的控制流圖中,得到語句節(jié)點,然后根據(jù)所述邊界覆蓋準則得到所述語句邊界值; 從結(jié)構(gòu)測試中的抽象語法樹中,得到所述表達式的節(jié)點,然后根據(jù)所述邊界覆蓋準則得到所述表達式邊界值。
3.根據(jù)權(quán)利要求2所述的故障自動注入與故障檢測的方法,其特征在于,根據(jù)所述邊界值覆蓋準則獲取所述語句邊界值的過程還包括: 所述結(jié)構(gòu)測試中的跳轉(zhuǎn)語句的每個邊界值為一個路徑集合,所述邊界覆蓋準則檢測到所述集合中的任一個元素,則得到所述跳轉(zhuǎn)語句的語句邊界值。
4.根據(jù)權(quán)利要求1所述的故障自動注入與故障檢測的方法,其特征在于,當語句邊界值為路徑集合時,為所述路徑集合中的任一個元素選擇到可達路徑,即為此語句邊界值選擇到可達路徑。
5.根據(jù)權(quán)利要求4所述的故障自動注入與故障檢測的方法,其特征在于,當語句邊界值為路徑集合時,對此語句邊界值選擇路徑的具體步驟包括: S51,獲取所述語句邊界值中的第一個元素; S52,選擇一條經(jīng)過所述第一個元素的第一路徑; S53,判斷所述第一路徑是否為所述第一個元素的可達路徑; S54,如果是,則將所述第一路徑作為所述語句邊界值的可達路徑;如果否,則選擇所述語句邊界值中的下一個元素,并重復(fù)進行上述判斷,直到找到所述語句邊界值的可達路徑。
6.根據(jù)權(quán)利要求1所述的故障自動注入與故障檢測的方法,其特征在于,對所述表達式邊界值選擇路徑的具體步驟包括: S61,找到所述表達式所在的控制流圖節(jié)點; S62,獲取所述表達式的邊界值的約束Cv ; S63,選擇一條經(jīng)過所述控制流圖節(jié)點的路徑; S64,獲取所述路徑的約束Cp ; S65,判斷C=Cv Λ Cp是否有解; S66,如果判定C有解,則所述路徑為所述表達式邊界值的可達路徑;如果判定C無解,則重新選擇一條經(jīng)過所述控制流圖節(jié)點的路徑,直至C有解。
7.故障自動注入與故障檢測的系統(tǒng),其特征在于,所述系統(tǒng)包括: 邊界覆蓋準則選擇模塊,用于根據(jù)被測文件中的語句的語義和表達式的語義選擇特定的邊界覆蓋準則; 邊界值選取模塊,用于根據(jù)所述邊界覆蓋準則獲取所述被測文件的語句邊界值和表達式邊界值; 可達路徑選擇模塊,用于為所述語句邊界值和所述表達式邊界值選擇對應(yīng)的可達路徑; 邊界值測試模塊,用于根據(jù)所述可達路徑生成測試用例,并對所述測試用例進行比較,從而得到邊界值測試結(jié) 果。
【文檔編號】G06F11/36GK103914380SQ201410115157
【公開日】2014年7月9日 申請日期:2014年3月26日 優(yōu)先權(quán)日:2014年3月26日
【發(fā)明者】宮云戰(zhàn), 李峰, 黃俊飛, 金大海, 王雅文 申請人:北京郵電大學(xué)