專利名稱:不變量指導(dǎo)的隨機(jī)測(cè)試用例自動(dòng)化生成方法
技術(shù)領(lǐng)域:
本專利發(fā)明屬于軟件測(cè)試領(lǐng)域,它是該領(lǐng)域的核心課題一測(cè)試用例自動(dòng)化生成的研究。
2.
背景技術(shù):
3. I隨機(jī)測(cè)試技術(shù)隨機(jī)測(cè)試是通過在程序輸入域上隨機(jī)選擇輸入 數(shù)據(jù)來測(cè)試程序。它是一種應(yīng)用廣泛且極具潛力的軟件自動(dòng)化測(cè)試技術(shù)。在第29屆軟件工程國(guó)際會(huì)議上,隨機(jī)測(cè)試被認(rèn)為是測(cè)試用例生成領(lǐng)域最具潛力的三大技術(shù)之一。在軟件工程方面,隨機(jī)測(cè)試已被廣泛應(yīng)用到各領(lǐng)域,如Unix工具集、Windows GUI應(yīng)用軟件、Java程序等等。但是在隨機(jī)測(cè)試的實(shí)際應(yīng)用中,存在覆蓋率低,冗余測(cè)試用例重復(fù)生成等等各種缺點(diǎn),嚴(yán)重限制了隨機(jī)測(cè)試方法優(yōu)點(diǎn)的體現(xiàn)。3. 2不變量技術(shù)程序不變量是指在程序的某個(gè)特定的點(diǎn)或某些特定的點(diǎn)上保持為真的屬性,是描述在程序運(yùn)行時(shí)保持不變的性質(zhì)的邏輯斷言;它經(jīng)常出現(xiàn)在斷言聲明(assertstatement)、形式化描述(formal specif ications)、說明文檔(documentation)中。程序不變量有助于軟件開發(fā)人員理解程序中的數(shù)據(jù)結(jié)構(gòu)、算法及各種操作,對(duì)軟件的設(shè)計(jì)、編碼、驗(yàn)證、測(cè)試、優(yōu)化和維護(hù)等各階段都有著積極的作用(Ernst,2000)。近年來程序不變量的自動(dòng)提取技術(shù)成為研究熱點(diǎn)之一。
3.
發(fā)明內(nèi)容
本申請(qǐng)書中就軟件測(cè)試的核心問題——測(cè)試用例自動(dòng)化生成,針對(duì)目前一種廣泛應(yīng)用的自動(dòng)化技術(shù)——隨機(jī)測(cè)試方法的缺點(diǎn),提出了一種結(jié)合不變量技術(shù)的隨機(jī)測(cè)試改進(jìn)方法——不變量指導(dǎo)下的隨機(jī)用例生成方法。通過不變量的提取,了解程序?qū)傩裕岣唠S機(jī)方法選取有效用例的概率,降低冗余率,滿足覆蓋率要求,極大地改進(jìn)了傳統(tǒng)隨機(jī)方法的缺點(diǎn)。且整個(gè)用例生成過程完全自動(dòng)化,除了必需的被測(cè)程序外,不需要其它任何的輸入和人工干預(yù)。
4.
具體實(shí)施例方式4. I不變量指導(dǎo)的測(cè)試用例生成方法的理論介紹附圖
I是不變量指導(dǎo)測(cè)試用例生成方法的總體流程圖,通過附圖I中5個(gè)步驟地反復(fù)進(jìn)行(見附圖I說明),可以完成測(cè)試用例集合自動(dòng)化的生成。下面就該流程圖中的幾個(gè)重要理論基礎(chǔ)分別進(jìn)行說明4. I. I新用例的生成過程我們將完成新用例生成的功能模塊稱為測(cè)試用例構(gòu)造器,由三個(gè)相對(duì)獨(dú)立的部分組成——源碼信息抽取、可選用例空間和測(cè)試用例構(gòu)造。本工具以被測(cè)函數(shù)為單位,依次對(duì)被測(cè)函數(shù)中每個(gè)參數(shù)獨(dú)立生成,進(jìn)而構(gòu)造出一個(gè)測(cè)試用例。具體的構(gòu)造流程如附圖2所示。源碼信息抽取模塊,主要分析被測(cè)程序源碼,根據(jù)源碼信息,構(gòu)造出被測(cè)函數(shù)信息表和復(fù)雜類型成員信息表??蛇x用例空間主要由參數(shù)區(qū)間信息表構(gòu)成,該表從被測(cè)函數(shù)信息表,以及復(fù)雜類型成員信息表中提取信息 進(jìn)行構(gòu)造。該表中保存了被測(cè)函數(shù)每一個(gè)參數(shù)的取值區(qū)間,隨機(jī)數(shù)的挑選被限制在這些取值區(qū)間之中,通過這種做法,限制了各個(gè)參數(shù)的取值范圍,縮小用例的可選空間大小,進(jìn)而提高選中有效用例的概率。測(cè)試用例構(gòu)造模塊從被測(cè)函數(shù)信息表中依次選取參數(shù)進(jìn)行構(gòu)造,若為簡(jiǎn)單類型,則從可選用例空間中直接隨機(jī)挑選隨機(jī)數(shù)即可生成;若為復(fù)雜類型,則讀取該類型成員表信息,對(duì)該類的各個(gè)成員依次進(jìn)行構(gòu)造,構(gòu)造過程與參數(shù)構(gòu)造過程類似,若在類成員的構(gòu)造中遇到復(fù)雜類型,則往下遞歸,最終完成測(cè)試用例的構(gòu)造。4. I. 2不變量判斷測(cè)試用例有效性如前背景技術(shù)中所述,不變量對(duì)于軟件開發(fā)維護(hù)的各個(gè)階段有著極其重要的意義,本工具CRT也利用了不變量來進(jìn)行測(cè)試用例有效性的判別。程序不變量是指在程序的某個(gè)特定的點(diǎn)或某些特定的點(diǎn)上保持為真的屬性,是描述在程序運(yùn)行時(shí)保持不變的性質(zhì)的邏輯斷言;它經(jīng)常出現(xiàn)在斷言聲明(assertstatement)、形式化描述(formal specif ications)、說明文檔(documentation)中(Ernstet al,2007),形如表I. I所示
1. field > abs(y)
2y = 2*x+3
3array a is sorted
4for all List objects 1st,1st. next, prev = 1st,,
5for all Treenode objects n,n. left, value < n. right, value,,
6p ! = null = > p. content in myArray表I程序不變量示例程序似然不變量集(Likely Program Invariant)指“可能的,不確定”的程序動(dòng)態(tài)不變量集合,程序動(dòng)態(tài)不變量提取工具的輸出就是程序似然不變量集合,它依賴于程序輸入(測(cè)試用例),它會(huì)在程序動(dòng)態(tài)運(yùn)行時(shí)隨著輸入的變化而改變。輸入越完備,則動(dòng)態(tài)提取的程序似然不變量集越逼近于在理論上的程序動(dòng)態(tài)不變量集??偟膩碚f,程序運(yùn)行時(shí)程序內(nèi)部的某個(gè)保真的屬性稱為程序動(dòng)態(tài)不變量,程序動(dòng)態(tài)不變量的集合稱為程序動(dòng)態(tài)不變量集,程序動(dòng)態(tài)不變量提取工具輸出的是程序似然不變量集合。隨著輸入的不斷增多,程序似然不變量集逐漸地向程序動(dòng)態(tài)不變量集逼近。舉個(gè)例子說明上述情況,例I :
1int test(intx){
2if (x>0) return I;
3elsereturn 0;
4}“return = one of {0,1} ”是該程序的一個(gè)程序動(dòng)態(tài)不變量,它和程序中其他的不變量(若存在)構(gòu)成的集合是程序動(dòng)態(tài)不變量集。程序動(dòng)態(tài)不變量提取工具在程序輸入大于O時(shí)會(huì)給出似然不變量”return == 1”,當(dāng)程序輸入中出現(xiàn)小于等于O的值出現(xiàn)時(shí),不變量提取工具剔除該似然不變量(該似然不變量非程序不變量),最終程序動(dòng)態(tài)不變量提取工具輸出似然不變量集“return = one of{0,1} ”和其他似然不變量(若存在)。此時(shí),從例I可以看出,該似然不變量集就是程序動(dòng)態(tài)不變量集。上述過程就是不變量指導(dǎo)測(cè)試用例生成的核心思想,比較添加新的測(cè)試用例前后的程序似然不變量集,判斷是否有所改善,若有,則該新用例是有效的,添加到有效測(cè)試用例集中,若無,則認(rèn)為該測(cè)試用例是冗余的,丟棄。算法表述見算法I。算法I基本的程序動(dòng)態(tài)不變量集指導(dǎo)測(cè)試用例生成算法.
IProcedure TESTCASE—GENERATER(program P,int N)
2Testsuite S {}
3int i^O
4while i<N do
5testcase c^-RANDNEWCASE()
6if OPABSTR(P,S)!=OPABSTR(P,S U {c}) then
7S^S U {c}
8i^O
9else
10 i^i+1
IIreturn SRANDNEffCASE是隨機(jī)測(cè)試數(shù)據(jù)生成方法。0PABSTR是程序似然不變量集,在本文中用DAIKON不變量提取工具獲得。上述算法(算法I)起始于一個(gè)空的有效測(cè)試用例集合和一個(gè)空的程序動(dòng)態(tài)不變量集,重復(fù)地添加測(cè)試用例,如果該測(cè)試用例改變了程序動(dòng)態(tài)不變量集(如前所述,實(shí)際上是程序似然不變量集),則保留該測(cè)試用例。若連續(xù)N次,程序似然不變量集未發(fā)生改變,算法終止。N是一個(gè)權(quán)衡值,它是綜合考量算法時(shí)間開銷和所得測(cè)試?yán)|(zhì)量的結(jié)果。以一個(gè)簡(jiǎn)單的C程序絕對(duì)值函數(shù)abs (X)來說明算法I的工作流程,該函數(shù)的代碼如例2。例2
int abs(x){
if(x>0) return x; else return -x;
}算法I作用于例2的工作 流程如表2所示
權(quán)利要求
1.一種不變量指導(dǎo)的隨機(jī)測(cè)試用例自動(dòng)化生成方法,其特征是利用程序不變量屬性信息指導(dǎo)隨機(jī)測(cè)試用例的自動(dòng)化生成。
2.根據(jù)權(quán)利要求I所述的方法,其特征是高自動(dòng)化,除需提供必要的被測(cè)源碼外,完全自動(dòng)化。
3.根據(jù)權(quán)利要求I所述的方法,其特征是利用程序不變量的提取結(jié)果來過濾無效用例。降低最終用例集合中的無效用例數(shù)目,降低冗余率。
4.根據(jù)權(quán)利要求I所述的方法,其特征是利用程序不變量的提取結(jié)果來約簡(jiǎn)可選用例空間,見效隨機(jī)用例生成的取值區(qū)間大小,提高有效用例被選中的概率,進(jìn)而提高用例生成效率。
全文摘要
本申請(qǐng)書中就軟件測(cè)試的核心問題——測(cè)試用例自動(dòng)化生成,針對(duì)目前一種廣泛應(yīng)用的自動(dòng)化技術(shù)——隨機(jī)測(cè)試方法的缺點(diǎn),提出了一種結(jié)合不變量技術(shù)的隨機(jī)測(cè)試改進(jìn)方法——不變量指導(dǎo)下的隨機(jī)用例生成方法。主要提出兩個(gè)新方法——利用提取到的程序不變量過濾無效測(cè)試用例,保留有效用例;利用提取到的程序不變量約簡(jiǎn)無效用例空間,提高選中有效用例的概率。通過這些方法,降低冗余率,滿足覆蓋率要求,極大地改進(jìn)了傳統(tǒng)隨機(jī)方法的缺點(diǎn)。且整個(gè)用例生成過程完全自動(dòng)化,除了必需的被測(cè)程序外,不需要其它任何的輸入和人工干預(yù)。
文檔編號(hào)G06F11/36GK102736973SQ20111008586
公開日2012年10月17日 申請(qǐng)日期2011年4月7日 優(yōu)先權(quán)日2011年4月7日
發(fā)明者張美超, 曾凡平, 潘能剛, 黃玉涵 申請(qǐng)人:中國(guó)科學(xué)技術(shù)大學(xué)