專利名稱:一種聯(lián)合差異性隨機(jī)測試方法
技術(shù)領(lǐng)域:
本發(fā)明屬于軟件測試領(lǐng)域尤其是自動(dòng)化測試領(lǐng)域,涉及聯(lián)合差異性隨機(jī)測試技術(shù)CAT (Co-diversified rAndom Testing),用于高效率的生成測試用例集,從而實(shí)現(xiàn)對(duì)程序的有效測試,為一種聯(lián)合程序白盒和黑盒信息差異性的聯(lián)合差異性隨機(jī)測試方法。
背景技術(shù):
隨機(jī)測試RT是一個(gè)簡單的自動(dòng)化黑盒測試用例生成技術(shù),容易實(shí)現(xiàn),廣泛應(yīng)用于源代碼和規(guī)格說明缺失的情景。RT產(chǎn)生測試用例由于完全隨機(jī)缺少目的性,只保證了測試的效率(Efficiency)而無法保證有效性(Effectiveness)。在眾多對(duì)RT的提高或改進(jìn)的方法中,比較著名的是由T. Y. Chen等在2004年提出了的自適應(yīng)隨機(jī)測試ART。同樣是黑盒測試技術(shù),ART引入測試用例在輸入域上的歐幾里得距離來衡量測試用例間的差異性,并通過這個(gè)差異性挑選隨機(jī)生成的測試用例來構(gòu)造整個(gè)測試用例集,以增強(qiáng)隨機(jī)測試的有效性。符號(hào)執(zhí)行是由自J.C.King在1976年提出的,其基本思想就是使用符號(hào)值而不是真實(shí)值來作為程序的輸入。符號(hào)執(zhí)行中一個(gè)基本的概念就是路徑條件PC(PathCondition),路徑條件PC是一系列謂詞的析取(conjunction),輸入變量只有滿足一條路徑的PC條件,才能通過這條路徑。其中,構(gòu)建PC非常具有挑戰(zhàn)性,即使一個(gè)分支語句只包含一個(gè)復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。而謂詞表達(dá)PI (Predicate Interpretation, PI)是一個(gè)PC的子表達(dá)式,一個(gè)分支的PI可以跳過其他分支語句簡單的獲得。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是現(xiàn)有的測試用例生成方法中黑盒測試方法具有很高的效率,但是不能保證測試用例的有效性;白盒測試方法雖然能生成有效的測試用例,但是由于復(fù)雜性問題無法保證測試用例生成的效率。因此需要一種兼顧高效率和高有效性的測試用例生成技術(shù)。本發(fā)明的技術(shù)方案為一種聯(lián)合差異性隨機(jī)測試方法,對(duì)待測試程序,隨機(jī)生成測試用例,在其中挑選測試用例,得到最終測試用例集,包括以下步驟I)隨機(jī)生成初始測試用例集Tu = {t0};2)獲得待測程序的謂詞表達(dá)集合PI {Pl,P2,…,pn}首先使用開源工具Soot生成中間代碼的數(shù)據(jù)流圖,并使用反向數(shù)據(jù)流分析計(jì)算謂詞表達(dá)集合PI,即從數(shù)據(jù)流圖的出口沿?cái)?shù)據(jù)流邊反向依次分析各個(gè)基本塊或每個(gè)語句,PI初始為空集,在分析過程中根據(jù)每個(gè)語句的傳遞函數(shù)fs增加或修改謂詞表達(dá)集合PI,對(duì)應(yīng)處理如下a)如果語句s不是賦值語句也不是條件語句,則fs為單元函數(shù),謂詞表達(dá)集合PI不變;b)如果語句s是一條條件語句,則將其中的謂詞語句加入到謂詞表達(dá)集合PI中fs (χ) = X U gens,其中g(shù)ens表示這個(gè)條件語句中的謂詞集合,X表示原謂詞表達(dá)集合PI ;c)如果語句s是對(duì)變量V的賦值語句V = g(y1;y2,…),那么用V的表達(dá)式替換謂詞集合中的所有變量V fs(pi (V)) = pi (g(y1;y2,…)),其中賦值語句v = g(y1;y2,…)
將變量V賦予關(guān)于變量Yi (i = 1,2,......)的表達(dá)式,g是關(guān)于變量Yi (i = 1,2,......)的
任意一個(gè)函數(shù),pi (V)表示關(guān)于V的謂詞表達(dá)式,pi (g(y1 I2,…))表示將V替換為g(yp12,…)后的謂詞表達(dá)式;3)若沒有達(dá)到預(yù)先定義的測試標(biāo)準(zhǔn),則繼續(xù)步驟4),否則結(jié)束,Tu就是最終的測試用例集,所述測試標(biāo)準(zhǔn)為測試人員根據(jù)測試要求預(yù)先設(shè)定的覆蓋程度,用百分比表示;4)隨機(jī)生成k個(gè)候選測試用例t1 t2, ···, tk,組成候選測試用例集Tr, Tr = It1,t2, ···, tk},對(duì)每一個(gè)候選測試用例& e Tr, i = 1,2,…k,計(jì)算bdi = min{B(ti, t」)}以及edi = miniEUytj)},其中t」e Tiubdi表示測試用例h到Tu中各個(gè)測試用例分支距離的最小值,edi表示測試用例\到Tu中各個(gè)測試用例的最小歐幾里得距離;5)根據(jù)候選測試用例\到測試用例集Tu的分支距離和歐幾里得距離,從候選測試用例集Tr中挑選一個(gè)測試用例用作為新的測試用例加入到測試用例集Tu中,具體為首先計(jì)算各個(gè)候選測試用例\與測試用例集Tu中測試用例的最小分支距離bdp優(yōu)先選擇最小分支距離最大的測試用例,即若測試用例集Tu中不包含最小分支距離bdi最大的測試用例,則選用該用例,若測試用例集Tu中已包含,則選擇最小分支距離bdi第二大的測試用例,以此類推;若具有最小分支距離bdi最大值的測試用例有兩個(gè)以上,則判斷最小歐幾里得距離θφ,優(yōu)先選擇最小歐幾里得距離edi最大的候選測試用例ti;若測試用例集Tu中已包含此測試用例,則選擇最小分支距離bdi第二大的測試用例,以此類推;將選擇的測試用例加入Tu中,回到步驟3),依此不斷選擇新的測試用例,直到滿足測試標(biāo)準(zhǔn)。步驟5)中,測試用例\到Tu中各個(gè)測試用例分支距離的最小值bdi的計(jì)算如下將候選測試用例\帶入謂詞表達(dá)集合PI中的每一個(gè)謂詞表達(dá)式,若其結(jié)果為真,則為1,否則為0,每一個(gè)測試用例得到一個(gè)長度為謂詞表達(dá)集合PI的元素?cái)?shù)目的01序列;對(duì)測試用例集Tu中的每一個(gè)測試用例做同樣計(jì)算,得到測試用例集Tu中各測試用例的01序列,兩個(gè)不同測試用例之間的分支距離B(ti; tj)為其01序列的漢明距離,由此計(jì)算bdi ;測試用例\到Tu中各個(gè)測試用例的最小歐幾里得距離喊的計(jì)算如下設(shè)測試用例\ = (v1; V2,…,vq), V,對(duì)應(yīng)待測程序的第q個(gè)函數(shù)參數(shù),測試用例集Tu中的測試用例\ = (B1, a2,…,aq),aq對(duì)應(yīng)待測程序的第q個(gè)函數(shù)參數(shù),則兩個(gè)測試用例的歐幾里德距離為-.EitiJ) = ^(ν,-α,)2,由此計(jì)算edi。本發(fā)明通過PI識(shí)別隨機(jī)生成的測試用例之間在程序內(nèi)部結(jié)構(gòu)上的差異性,通過測試用例間的歐幾里得距離來識(shí)別測試用例在輸入域上的差異性,然后聯(lián)合這二者的差異,從而高效率地生成有效的測試用例集。對(duì)于一個(gè)隨機(jī)生成的測試用例集Tr,對(duì)任意的ti e Tr,與每一個(gè)\ e Tu進(jìn)行比較,計(jì)算每一個(gè)PI的值,以及由此得到的B(ti; tj);此外計(jì)算E(ti; tp,聯(lián)合B(ti; tj)和E(ti; tj)衡量測試用例\與已使用的測試用例間的差別,從而挑選更加有效的測試用例。 本發(fā)明為一種聯(lián)合差異性隨機(jī)測試技術(shù)CAT,與現(xiàn)有的隨機(jī)測試技術(shù)相比,在選擇測試用例時(shí)加入了程序的謂詞信息,從而在隨機(jī)生成的大量測試用例中挑選更加有效的測試用例,避免了盲目選擇。此外本發(fā)明的處理計(jì)算簡單,雖然加入了程序謂詞信息,但沒有加入所有的程序信息,避免了白盒測試中對(duì)程序的大量分析,如符號(hào)執(zhí)行中路徑約束的計(jì)算,從而提高了生成測試用例的效率。綜上所述,本發(fā)明在避免大量計(jì)算的情況下,高效率的選擇高有效性的隨機(jī)測試用例,綜合了黑盒測試與白盒測試的優(yōu)點(diǎn),為現(xiàn)有的測試技術(shù)提供了新的思路。
圖I為本發(fā)明的流程示意圖。
具體實(shí)施例方式
如圖I,本發(fā)明的步驟如下I)隨機(jī)生成初始測試用例集Tu = {t0};2)獲得程序的謂詞表達(dá)集合PI {Pl,P2,…,pn}首先使用開源工具Soot (http://www. sable, mcgill. ca/soot/)生成中間代碼的數(shù)據(jù)流圖,并使用后向數(shù)據(jù)流分析計(jì)算謂詞表達(dá)集合PI,即從數(shù)據(jù)流圖的出口沿?cái)?shù)據(jù)流邊反向依次分析各個(gè)基本塊或每個(gè)語句。程序中,每條語句的傳遞函數(shù)描述了這個(gè)語句的作用,每條語句的傳遞函數(shù)仁,謂詞表達(dá)集合PI初始為空集,在分析過程中根據(jù)每個(gè)語句的傳遞函數(shù)fs增加或修改謂詞表達(dá)集合PI,對(duì)應(yīng)處理如下a)如果語句s不是賦值語句也不是條件語句,則fs為單元函數(shù),謂詞表達(dá)集合PI不變;b)如果語句s是一條條件語句,則將其中的謂詞語句加入到謂詞表達(dá)集合PI中fs (χ) = X U gens,其中g(shù)ens表示這個(gè)條件語句中的謂詞集合,χ表示原謂詞表達(dá)集合PI ;c)如果語句s是對(duì)變量V的賦值語句V = g(y1;y2,…),那么用V的表達(dá)式替換謂詞集合中的所有變量V fs(pi (V)) = pi (g(y1;y2,…)),其中賦值語句v = g(y1;y2,…)
將變量V賦予關(guān)于變量Yi (i = 1,2,......)的表達(dá)式,g是關(guān)于變量Yi (i = 1,2,......)的
任意一個(gè)函數(shù),pi (V)表示關(guān)于V的謂詞表達(dá)式,pi (g(y1 I2,…))表示將V替換為g(yp12,…)后的謂詞表達(dá)式;3)若沒有達(dá)到預(yù)先定義的測試標(biāo)準(zhǔn),則繼續(xù)步驟4),否則結(jié)束,Tu就是最終的測試用例集,所述測試標(biāo)準(zhǔn)為測試人員根據(jù)測試要求預(yù)先設(shè)定的覆蓋程度,用百分比表示,如50%路徑覆蓋或50%條件覆蓋等;4)隨機(jī)生成k個(gè)候選測試用例t1; t2, ···, tk,組成候選測試用例集Tr, Tr = It1,t2, ···, tk},對(duì)每一個(gè)候選測試用例& e Tr, i = 1,2,…k,計(jì)算bdi = min{B(ti, t」)}以及edi = min{E(ti, t」)},其中t」e Tu, bdi表示測試用例h到Tu中各個(gè)測試用例分支距離的最小值,edi表示測試用例t到Tu中各個(gè)測試用例的最小歐幾里得距離;計(jì)算方法如下將每一個(gè)候選測試用例t帶入謂詞表達(dá)集合PI中的每一個(gè)謂詞表達(dá)式,若其結(jié)果為真,則為1,否則為0,每一個(gè)測試用例得到一個(gè)長度為謂詞表達(dá)集合PI元素?cái)?shù)值的01序列;同理,Tu中的每一個(gè)測試用例也具有這樣的01序列;兩個(gè)不同測試用例之間的分支距離為其01序列的漢明距離,歐幾里得距離的大小通過下面的公式計(jì)算設(shè)測試用例h = (V1, V2, ···, vq) , Vq對(duì)應(yīng)待測程序的第q個(gè)函數(shù)參數(shù),另一測試用例tj = (B1, a2,…,aq),aq對(duì)應(yīng)待測程序的第q個(gè)函數(shù)參數(shù),則兩個(gè)測試用例的歐幾里德距離為
權(quán)利要求
1.一種聯(lián)合差異性隨機(jī)測試方法,其特征是對(duì)待測試程序,隨機(jī)生成測試用例,在其中挑選測試用例,得到最終測試用例集,包括以下步驟 1)隨機(jī)生成初始測試用例集Tu= {t0}; 2)獲得待測程序的謂詞表達(dá)集合PI:{P1,P2,...,pj 首先使用開源工具Soot生成中間代碼的數(shù)據(jù)流圖,并使用反向數(shù)據(jù)流分析計(jì)算謂詞表達(dá)集合PI,即從數(shù)據(jù)流圖的出口沿?cái)?shù)據(jù)流邊反向依次分析各個(gè)基本塊或每個(gè)語句,PI初始為空集,在分析過程中根據(jù)每個(gè)語句的傳遞函數(shù)fs增加或修改謂詞表達(dá)集合PI,對(duì)應(yīng)處理如下 a)如果語句s不是賦值語句也不是條件語句,則fs為單元函數(shù),謂詞表達(dá)集合PI不變; b)如果語句s是一條條件語句,則將其中的謂詞語句加入到謂詞表達(dá)集合PI中fs(x)=X U gens,其中g(shù)ens表示這個(gè)條件語句中的謂詞集合,x表示原謂詞表達(dá)集合PI ; c)如果語句s是對(duì)變量V的賦值語句V= g(y17y2,…),那么用v的表達(dá)式替換謂詞集合中的所有變量V :fs(pi (V)) = pi (g(y1 I2, ···)),其中賦值語句V = g(y1; y2,…)將變量V賦予關(guān)于變量Yi (i = 1,2,......)的表達(dá)式,g是關(guān)于變量yji = 1,2,......)的任意一個(gè)函數(shù),pi (V)表示關(guān)于V的謂詞表達(dá)式,pi (g(y1 I2,…))表示將V替換為g(yp12,…)后的謂詞表達(dá)式; 3)若沒有達(dá)到預(yù)先定義的測試標(biāo)準(zhǔn),則繼續(xù)步驟4),否則結(jié)束,Tu就是最終的測試用例集,所述測試標(biāo)準(zhǔn)為測試人員根據(jù)測試要求預(yù)先設(shè)定的覆蓋程度,用百分比表示; 4)隨機(jī)生成k個(gè)候選測試用例Lt2,"^tk,組成候選測試用例集Tr,Tr = Itpt2,…,tk},對(duì)每一個(gè)候選測試用例h e Tr, i = 1,2,…k,計(jì)算bdi =以及θφ =min{E(ti, tj)},其中t」e Tu, bdi表示測試用例h到Tu中各個(gè)測試用例分支距離的最小值,ed,表示測試用例\到Tu中各個(gè)測試用例的最小歐幾里得距離; 5)根據(jù)候選測試用例ti到測試用例集Tu的分支距離和歐幾里得距離,從候選測試用例集Tr中挑選一個(gè)測試用例用作為新的測試用例加入到測試用例集Tu中,具體為首先計(jì)算各個(gè)候選測試用例\與測試用例集Tu中測試用例的最小分支距離bdp優(yōu)先選擇最小分支距離最大的測試用例,即若測試用例集Tu中不包含最小分支距離bdi最大的測試用例,則選用該用例,若測試用例集Tu中已包含,則選擇最小分支距離bdi第二大的測試用例,以此類推;若具有最小分支距離bdi最大值的測試用例有兩個(gè)以上,則判斷最小歐幾里得距離edp優(yōu)先選擇最小歐幾里得距離edi最大的候選測試用例ti;若測試用例集Tu中已包含此測試用例,則選擇最小分支距離bdi第二大的測試用例,以此類推;將選擇的測試用例加入Tu中,回到步驟3),依此不斷選擇新的測試用例,直到滿足測試標(biāo)準(zhǔn)。
2.根據(jù)權(quán)利要求I所述的一種聯(lián)合差異性隨機(jī)測試方法,其特征是步驟5)中,測試用例\到Tu中各個(gè)測試用例分支距離的最小值bdi的計(jì)算如下 將候選測試用例\帶入謂詞表達(dá)集合PI中的每一個(gè)謂詞表達(dá)式,若其結(jié)果為真,則為、1,否則為0,每一個(gè)測試用例得到一個(gè)長度為謂詞表達(dá)集合PI的元素?cái)?shù)目的01序列;對(duì)測試用例集Tu中的每一個(gè)測試用例做同樣計(jì)算,得到測試用例集Tu中各測試用例的01序列,兩個(gè)不同測試用例之間的分支距離B(ti; tj)為其01序列的漢明距離,由此計(jì)算bdi ; 測試用例\到Tu中各個(gè)測試用例的最小歐幾里得距離edi的計(jì)算如下設(shè)測試用例ti= (v1; V2,…,V,),V,對(duì)應(yīng)待測程序的第q個(gè)函數(shù)參數(shù),測試用例集Tu中的測試用例h= (a1;a2,…,a,),a,對(duì)應(yīng)待測程序的第q個(gè)函數(shù)參數(shù), 則兩個(gè)測試用例的歐幾里德距離為
全文摘要
一種聯(lián)合差異性隨機(jī)測試方法,通過PI識(shí)別隨機(jī)生成的測試用例之間在程序內(nèi)部結(jié)構(gòu)上的差異性,通過測試用例間的歐幾里得距離來識(shí)別測試用例在輸入域上的差異性,然后聯(lián)合這二者的差異,高效率地生成有效的測試用例集,為一種結(jié)合黑盒測試技術(shù)和白盒測試技術(shù)的自動(dòng)化隨機(jī)測試技術(shù),本發(fā)明既改善了ART忽略程序結(jié)構(gòu)所導(dǎo)致的測試用例冗余問題,也緩解了符號(hào)執(zhí)行中的PC路徑的復(fù)雜性問題,兼顧了軟件測試中測試用例生成的高效率和高有效性。
文檔編號(hào)G06F11/36GK102629229SQ20121005269
公開日2012年8月8日 申請(qǐng)日期2012年3月2日 優(yōu)先權(quán)日2012年3月2日
發(fā)明者張智軼, 徐寶文, 時(shí)清凱, 陳振宇 申請(qǐng)人:南京大學(xué)