一種基于分層遺傳算法的測試用例生成方法
【專利摘要】本發(fā)明是一種基于分層遺傳算法的測試用例生成方法,能有效的防治“近親繁殖”現(xiàn)象,從而有效的解決了“早熟”和局部收斂的問題。步驟一:給路徑分析器部分輸入程序源代碼,然后路徑分析器對輸入的程序源代碼進行路徑分析,分析之后得到相應的路徑列表,并把路徑列表輸出給測試數(shù)據(jù)生成器;步驟二:謂詞插裝器部分對輸入的源代碼進行謂詞插裝,插裝后的代碼輸出給測試數(shù)據(jù)生成器;步驟三:測試數(shù)據(jù)生成器中首先分層遺傳算法對初始種群進行分層,利用插裝好的源代碼將層內(nèi)個體通過路徑與目標路徑相比較,得到通過路徑和目標路徑的匹配值,最后測試數(shù)據(jù)生成器給出針對每條路徑的測試用例。
【專利說明】一種基于分層遺傳算法的測試用例生成方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種基于分層遺傳算法的測試用例生成方法,屬于軟件測試【技術(shù)領(lǐng)域】。
【背景技術(shù)】
[0002]隨著計算機技術(shù)科學的飛速發(fā)展,作為計算機的靈魂,軟件起著舉足輕重的作用,軟件的失效可能造成巨大的經(jīng)濟損失甚至危及生命安全。人們對軟件測試重要性的認識越來越深刻,軟件測試階段在整個軟件開發(fā)周期中所占的比重日益增大?,F(xiàn)有的軟件測試技術(shù),從是否需要被執(zhí)行被測試軟件的角度通常分為靜態(tài)測試和動態(tài)測試。靜態(tài)測試是不執(zhí)行程序代碼而尋找程序代碼中可能存在的錯誤或評估程序代碼的過程。動態(tài)測試通過在抽樣測試數(shù)據(jù)上運行程序來檢驗程序的動態(tài)行為和運行結(jié)果以發(fā)現(xiàn)錯誤。動態(tài)測試包括三部分核心內(nèi)容:生成測試用例、運行程序和驗證程序的運行結(jié)果。
[0003]目前在測試數(shù)據(jù)自動化生成領(lǐng)域中,較為常見的是符號執(zhí)行法、根據(jù)需求規(guī)約產(chǎn)生隨機數(shù)法、Korel法等。符號執(zhí)行法是靜態(tài)的測試數(shù)據(jù)生成方法,對于動態(tài)的面向?qū)ο蟪绦虿贿m合使用;按需求規(guī)約產(chǎn)生隨機數(shù)法屬于動態(tài)方法,在采用測試用例抽樣測試時,這種方法對產(chǎn)生測試數(shù)據(jù)非常有效,但在約束要求較高的測試方法中,比如分支覆蓋或路徑覆蓋,它的效率非常低下,很難產(chǎn)生符合要求的解集;K0rel法屬于面向路徑覆蓋的動態(tài)測試數(shù)據(jù)生成法,它根據(jù)程序動態(tài)運行時的分支函數(shù)的信息,不斷調(diào)整對當前分支函數(shù)有影響的輸入變量的值,使分支函數(shù)最小化。但缺點是如果初始數(shù)據(jù)選得不好,容易陷入不一定能執(zhí)行期望路徑的局部最優(yōu)解。
[0004]現(xiàn)有的基于遺傳算法的測試用例自動生成方法,主要是針對相應的適應度函數(shù)和編碼方法進行不同的改進,例如對適應度函數(shù)的改進能使遺傳算法中的進化更加精確,因為淘汰個體的主要標準就是適應度函數(shù)。同時恰當?shù)木幋a方法也可以使后續(xù)的搜索過程更加快捷。雖然這些改進在測試用例生成中具有不同程度的提高,但仍然普遍存在一些問題即“早熟”和局部收斂的問題。
【發(fā)明內(nèi)容】
[0005]本發(fā)明是一種基于分層遺傳算法的測試用例生成方法,能有效的防治“近親繁殖”現(xiàn)象,從而有效的解決了“早熟”和局部收斂的問題,同時增加了物種的多樣性,便于產(chǎn)生覆蓋度更高的測試用例。
[0006]實現(xiàn)本發(fā)明的技術(shù)方案如下:
[0007]—種基于分層遺傳算法的測試用例生成方法,包括以下步驟:
[0008]步驟一:給路徑分析器部分輸入程序源代碼,然后路徑分析器對輸入的程序源代碼進行路徑分析,分析之后得到相應的路徑列表,并把路徑列表輸出給測試數(shù)據(jù)生成器;
[0009]步驟二:謂詞插裝器部分對輸入的源代碼進行謂詞插裝,首先插裝器對輸入的源代碼進行檢測,一旦檢測到分支語句和循環(huán)語句就在分支語句和循環(huán)語句的后面插入相應的謂詞,直至謂詞插裝器檢測所有分支謂詞和循環(huán)謂詞處都已插裝完畢,插裝后的代碼輸出給測試數(shù)據(jù)生成器;
[0010]步驟三:測試數(shù)據(jù)生成器中主要利用分層遺傳算法和哈夫曼編碼的適應度函數(shù),首先分層遺傳算法對初始種群進行分層,在層內(nèi)與層間來進行變異、交叉、選擇遺傳操作,哈夫曼編碼的適應度函數(shù)構(gòu)建利用插裝好的源代碼將層內(nèi)個體通過路徑與目標路徑相比較,得到通過路徑和目標路徑的匹配值,此匹配值寄為該遺傳個體的適應度值,然后根據(jù)設(shè)定的淘汰規(guī)則進行編譯、交叉、選擇遺傳操作,最后測試數(shù)據(jù)生成器給出針對每條路徑的測試用例。
[0011]步驟三中所述的分層遺傳算法分層模塊具體的步驟如下:
[0012]a.首先產(chǎn)生隨機的初始種群GA ;
[0013]b.對初始種群進行分層分別為 GA111,GA112,GA121,GA122,GA211,GA212,GA221,GA222 ;
[0014]c.設(shè)定遺傳代數(shù)計數(shù)變量t=0,群體層次計數(shù)器m=3;
[0015]d.首先計算第t代第三層GA種群中的個體的適應度GA(t),判斷是否滿足條件,滿足就輸出作為測試用例;不滿足則進入步驟e ;
[0016]e.在第三層的子種群之間進行選擇、變異、交叉操作,然后再計算適應度函數(shù)值,看是否滿足條件,若滿足則輸出作為測試用例,否則m-1,在第二層內(nèi)再進行選擇、變異、交叉操作;
[0017]f.若在第m=l層適應度函數(shù)仍然不滿足條件,則計數(shù)器加I進入到第二代,然后再重復步驟d,如此循環(huán)一直得到覆蓋目標路徑的測試用例為止。
[0018]步驟三所述的哈夫曼編碼的適應度函數(shù)模塊中記第t代進化種群的個體為X,X為被測程序的輸入數(shù)據(jù),X穿越的路徑字符串記為f(x),f(x)的長度記為If(X) I,共有η條待測路徑,fj表示第j條待測路徑,其中」=1,2,...,η,通過計算f(x)與fj的匹配程度得到X的適應度函數(shù)PU),具體計算公式如下所示:
[0019]
【權(quán)利要求】
1.一種基于分層遺傳算法的測試用例生成方法,其特征在于,包括以下步驟: 步驟一:給路徑分析器部分輸入程序源代碼,然后路徑分析器對輸入的程序源代碼進行路徑分析,分析之后得到相應的路徑列表,并把路徑列表輸出給測試數(shù)據(jù)生成器; 步驟二:謂詞插裝器部分對輸入的源代碼進行謂詞插裝,首先插裝器對輸入的源代碼進行檢測,一旦檢測到分支語句和循環(huán)語句就在分支語句和循環(huán)語句的后面插入相應的謂詞,直至謂詞插裝器檢測所有分支謂詞和循環(huán)謂詞處都已插裝完畢,插裝后的代碼輸出給測試數(shù)據(jù)生成器; 步驟三:測試數(shù)據(jù)生成器中主要利用分層遺傳算法和哈夫曼編碼的適應度函數(shù),首先分層遺傳算法對初始種群進行分層,在層內(nèi)與層間來進行變異、交叉、選擇遺傳操作,哈夫曼編碼的適應度函數(shù)構(gòu)建利用插裝好的源代碼將層內(nèi)個體通過路徑與目標路徑相比較,得到通過路徑和目標路徑的匹配值,此匹配值寄為該遺傳個體的適應度值,然后根據(jù)設(shè)定的淘汰規(guī)則進行編譯、交叉、選擇遺傳操作,最后測試數(shù)據(jù)生成器給出針對每條路徑的測試用例。
2.如權(quán)利要求1所述的一種基于分層遺傳算法的測試用例生成方法,其特征在于,步驟三中所述的分層遺傳算法分層模塊具體的步驟如下: a.首先廣生隨機的初始種群GA; b.對初始種群進行分層分別為GA111,GA112, GA121, GA122, GA211, GA212, GA221,GA222 ; c.設(shè)定遺傳代數(shù)計數(shù)變量t=0,群體層次計數(shù)器m=3; d.首先計算第t代第三層GA種群中的個體的適應度GA(t),判斷是否滿足條件,滿足就輸出作為測試用例;不滿足則進入步驟e ; e.在第三層的子種群之間進行選擇、變異、交叉操作,然后再計算適應度函數(shù)值,看是否滿足條件,若滿足則輸出作為測試用例,否則m-1,在第二層內(nèi)再進行選擇、變異、交叉操作; f.若在第m=l層適應度函數(shù)仍然不滿足條件,則計數(shù)器加I進入到第二代,然后再重復步驟d,如此循環(huán)一直得到覆蓋目標路徑的測試用例為止。
3.如權(quán)利要求1或2所述的一種基于分層遺傳算法的測試用例生成方法,其特征在于,步驟三所述的哈夫曼編碼的適應度函數(shù)模塊中記第t代進化種群的個體為X,X為被測程序的輸入數(shù)據(jù),X穿越的路徑字符串記為f(x),f (X)的長度記為If(X) I,共有η條待測路徑,fj表示第j條待測路徑,其中j=l,2,…,n,通過計算f (X)與fj的匹配程度得到X的適應度函數(shù)Ρ(χ),具體計算公式如下所示:
Pj(X) = (C^f (x)))+l)*P/ (x);
【文檔編號】G06F11/36GK103729297SQ201310751237
【公開日】2014年4月16日 申請日期:2013年12月31日 優(yōu)先權(quán)日:2013年12月31日
【發(fā)明者】胡昌振, 薛靜鋒, 劉樹榮, 馬銳, 單純 申請人:北京理工大學