午夜毛片免费看,老师老少妇黄色网站,久久本道综合久久伊人,伊人黄片子

一種自動生成字符串類型測試用例的方法

文檔序號:9471291閱讀:1255來源:國知局
一種自動生成字符串類型測試用例的方法
【技術領域】
[0001] 本發(fā)明涉及軟件測試領域中的測試用例自動生成技術,具體是一種自動生成字符 串類型測試用例的方法。
【背景技術】
[0002] 隨著互聯(lián)網時代的來臨,數據庫、網絡協(xié)議等軟件得到廣泛應用,字符串類型經常 作為基本的數據類型使用,并且通過標準庫中的字符串函數進行操作。
[0003] 面向路徑的測試用例自動生成技術中,通常的方法是利用符號執(zhí)行技術得到路徑 上輸入變量的約束,即符號表達式,然后利用約束求解器得到滿足路徑約束的變量取值。
[0004] 1976年,JamesC.King等人提出符號執(zhí)行技術用于判斷程序的正確性。
[0005] 符號執(zhí)行技術是指:使用符號執(zhí)行分析程序時,該程序會使用符號值作為輸入,而 非一般執(zhí)行程序時使用的具體值。在達到目標代碼時,分析器可以得到相應的路徑約束,即 輸出符號表達式,然后通過約束求解器來得到可以觸發(fā)目標代碼的具體值,即通過對符號 表達式的分析對程序的正確性進行判定。
[0006] 現(xiàn)有技術中,測試用例自動生成的工具無法自動對字符串類型生成滿足約束的測 試用例。由于字符串類型是一種常用的復雜數據類型,具有結構屬性和數值屬性,并且常常 通過字符串函數調用的形式操作,字符串函數操作導致字符串的約束是非線性的約束,因 此現(xiàn)有的測試用例自動生成工具無法支持字符串的測試用例自動生成。

【發(fā)明內容】

[0007] 本發(fā)明的目的是為了解決現(xiàn)有的測試用例自動生成工具無法支持字符串的測試 用例自動生成,提出了一種自動生成字符串類型測試用例的方法,具體包括如下步驟:
[0008] 步驟一、針對源程序的執(zhí)行路徑,對每條執(zhí)行路徑的每個語句分別使用符號執(zhí)行 技術進行約束提取,得到每個語句的字符串約束;
[0009] 步驟二、取當前語句的字符串約束,判斷是否包含字符串函數,如果包含,則執(zhí)行 步驟三;否則執(zhí)行步驟四;當前語句初始值為第一個語句;
[0010] 步驟三、根據字符串函數在路徑中所表示的語義,使用中間變量以及原子函數的 組合來表示該函數;
[0011] 首先、生成字符串類型的數據結構符號,其結構符號包含兩個屬性:
[0012] 1)是字符成員屬性,以"下標"_ "字符"為鍵值對的集合;2)是長度屬性;
[0013] 然后、定義三個原子函數:
[0014] ⑴訪問字符串str中下標為i的一個成員,原子函數為StrAtomic1 (str,i),參 數符號為:str和i;
[0015] (2)同時訪問字符串str中下標由down至up的|up-down+lI個成員,原子函數 為:
[0016]StrAtomic2 (str, down, up),參數符號為:str, down, up ;
[0017] (3)同時訪問Str中n個不確定位置的成員,原子函數為:StrAtomic3 (str,n),參 數符號為:str,n;
[0018] 中間變量指代三種原子函數中除了str之外的參數變量的位置,均為數值類型。
[0019] 步驟四、順序選取下一語句返回步驟二,直至當前語句是尾語句,輸出所有字符串 約束,并為中間變量的所有數值型符號,生成初始值域;
[0020] 步驟五、判斷當前數值型符號是否為原子函數的參數,如果是轉到步驟六;否則轉 到步驟十;
[0021] 當前數值型符號的初始值是從步驟四中的所有數值型符號中任選一個。
[0022] 步驟六、為當前原子函數的參數在初始值域中選值作為該參數確定值,執(zhí)行步驟 七;
[0023] 具體為:若當前原子函數是第一種原子函數StrAtomic1 (str,i),則為第二個參數 i在值域中選擇一個值,執(zhí)行結束;
[0024]若當前原子函數是第二種原子函數StrAtomic2 (str,down,up),貝Ij依次為第二、三 個參數
[0025] down,up在其值域中各選擇一個值,執(zhí)行結束;
[0026] 若當前原子函數是第三種原子函數StrAtomic3 (str,n),則為第二個參數n在其值 域中選擇一個值,執(zhí)行結束;
[0027] 如果值域中的值都被選取過并且該參數不是首個選取的數值型符號,則選擇前一 個數值型符號作為當前符號,并轉到步驟五;如果值域中的值都被選取過并且該參數是首 個選取的數值型符號,則算法失敗,執(zhí)行結束。
[0028] 步驟七、根據原子函數的參數確定值,對原子函數進行解釋,如果解釋失敗,則說 明參數取值錯誤,轉到執(zhí)行步驟八;否則執(zhí)行步驟九;
[0029] 具體解釋過程為:若當前選擇的是第一種原子函數StrAtomic1 (str,i)的參數 符號i,在i的值域中選擇一個值Vi,若str的字符成員集合中不存在下標是Vi的成 員,則新建下標為Vi的成員;否則取str中位置是Vi的成員;然后對于路徑約束中的 StrAtomic1 (str,i)替換為str中位置Vi的成員,執(zhí)行結束;
[0030] 若當前選擇的是第二種原子函數StrAtomic2 (str,down,up),參數符號為 down,up;
[0031] 在down,up的取值域中分別選擇值Vdown,Vup,若Str的字符成員集合中不存在下 標是Vdown至Vup的范圍中的成員,則新建相應位置的成員;否則取已經存在的成員,并且 對于路徑約束中的StrAtomic2(str,down,up)替換為str中位置在Vdown至Vup的范圍中 的每一個成員,執(zhí)行結束;
[0032] 若當前選擇的是第三種原子函數StrAtomic3 (str,n)的參數符號n,在n的 取值域中選擇值Vn,然后生成Vn個str的字符成員,對應的下標分別為indexvl,ind exv2,…indexvn,對于路徑約束中的StrAtomic2 (str,down,up)替換為str中位置在 indexvl,indexv2, . . .indexvn的每一個成員,執(zhí)行結束;
[0033] 原子函數解釋過程中,在字符串的數據結構中新建的字符成員如果與現(xiàn)有的字符 成員沖突,或者數據結構的長度屬性不符合要求,則原子函數解釋失敗。
[0034] 步驟八、參數取值錯誤后,根據步驟六中選擇的參數符號和參數確定值增加新的 約束:當前參數符號不能取當前參數確定值;并且將原子函數解釋失敗導致的改變恢復至 原來狀態(tài),重新轉到步驟六;
[0035] 步驟九、使用區(qū)間運算方法,對符號的取值區(qū)間進行縮減,縮減成功后轉到步驟五 繼續(xù)處理下一個字符串約束;否則,返回步驟八;直至對當前路徑約束中對所有字符串處 理完畢,轉到步驟十一;
[0036] 步驟十、在當前數值型符號的值域中選取一個值作為其確定值;轉到步驟九。
[0037] 如果當前符號值域中的值都被選取過并且當前符號不是首個選取的數值型符號, 則回到前一個選值的數值型符號作為當前符號,并轉到步驟五;如果當前符號值域的所有 值都被選過并且當前符號是首個選取的符號,則算法失敗,執(zhí)行結束。
[0038] 步驟十一、若所有字符串約束的參數符號都得到了確定值,則結合變量和符號的 關系組成測試用例,測試用例生成結束;
[0039] 本發(fā)明的優(yōu)點與積極效果在于:
[0040] (1) -種自動生成字符串類型測試用例的方法,提出的使用三種原子函數來表示 被測程序中出現(xiàn)的字符串函數的方法,可以應用于處理各種字符串函數。
[0041] (2) -種自動生成字符串類型測試用例的方法,能夠自動生成字符串類型的測試 用例,能夠減少人工測試耗費的代價,提高軟件測試的自動化程度。
【附圖說明】
[0042] 圖1為本發(fā)明一種自動生成字符串類型測試用例的方法流程圖;
【具體實施方式】
[0043] 下面將結合附圖和實施例對本發(fā)明作進一步的詳細說明。
[0044] 一種自動生成字符串類型測試用例的方法,能夠對包含字符串類型的輸入參數以 及含有字符串函數調用的C語言代碼進行測試用例自動生成,提高軟件測試的自動化程 度。
[0045] -種自動生成字符串類型測試用例的方法,首先,使用一個字符數組和一個長度 屬性作為字符串類型的數據模型,定義了三個原子函數,使用三個原子函數的組合表示C 語言標準庫中的字符串函數,然后,利用符號執(zhí)行技術得到一條程序路徑的約束提取過程 中,對于字符串和字符串函數進行約束提取,得到包含原子函數表示的字符串約束;最后, 針對源程序的執(zhí)行路徑,對每條路徑的字符串約束進行約束求解,約束求解過程中,根據原 子函數的參數的確定值,對于原子函數進行解釋得到字符串的結構和取值,直到得到滿足 路徑所有約束的測試用例。
[0046] 具體步驟如圖1所示,包括:
[0047] 步驟一、針對一段源程序的多條執(zhí)行路徑,對每條執(zhí)行路徑的每個語句分別使用 符號執(zhí)行技術進行約束提取,得到每個語句的符號表達式;
[0048] 源程序中的可能執(zhí)行路徑,又名語句序列;
[0049] 步驟二、判斷當前語句的符號表達式是否包含字符串函數,如果包含,則執(zhí)行步驟 三;否則執(zhí)行步驟四;當前語句初始值為第一個語句;
[0050] 步驟三、對于字符串函數,根據其在路徑中所表示的語義,使用中間變量以及原子 函數的組合進行表示;
[0051 ] 對于字符串函數中的字符串類型參數,生成表示字符串
當前第1頁1 2 3 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1