專利名稱:一種生成測試用例的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及軟件測試領(lǐng)域,尤其涉及一種生成測試用例的方法及裝置。
背景技術(shù):
隨機(jī)測試是通過在程序輸入域上隨機(jī)選擇輸入數(shù)據(jù)來進(jìn)行程序測試。它是一種應(yīng)用廣泛且極具潛力的軟件自動化測試技術(shù)。在第29屆軟件工程國際會議上,隨機(jī)測試被認(rèn)為是測試用例生成領(lǐng)域最具潛力的三大技術(shù)之一。在軟件工程方面,隨機(jī)測試已被廣泛應(yīng)用到各領(lǐng)域,如Unix工具集、Windows GUI應(yīng)用軟件、Java程序等等。但是在隨機(jī)測試的實(shí)際應(yīng)用中,存在覆蓋率低,冗余測試用例重復(fù)生成等等各種缺點(diǎn),嚴(yán)重限制了隨機(jī)測試方法優(yōu)點(diǎn)的體現(xiàn)。在隨機(jī)測試中很重要的一個方面是生成測試用例集合,也就是生成隨機(jī)測試的有 效的輸入數(shù)據(jù)的集合。在生成測試用例集合的時候,是將一個個的測試用例進(jìn)行是否為有效用例的判斷,僅將有效的測試用例生成測試用例集合,提供給隨機(jī)測試的程序。一直以來,人們都利用Daikon輸出的似然不變量作為用例有效性的判定依據(jù),Daikon是目前常用的似然不變量提取工具,如圖I所示,為Daikon的原理框圖,對于每個測試用例,將其輸入到Daikon中,進(jìn)行動態(tài)不變量的提取,運(yùn)行后生成涵蓋了該測試用例的似然不變量集合,而后在對比該次生成的似然不變量集合與已有的似然不變量集合相比是否發(fā)生變化,若無變化,則該測試用例為無效用例,反之,則為有效用例,在測試用例集合中添加該有效的測試用例。通常Daikon提取不變量的過程中,首先會產(chǎn)生不變量文本,不變量文本包括程序位置、程序不變量和分隔符等內(nèi)容,讀取該不變量文本并將該文本的內(nèi)容拆分為若干條記錄后,對每條記錄進(jìn)行不變量形式匹配,將不符合不變量形式的記錄從中刪除,此時,各條記錄剩余的內(nèi)容只包括程序位置與程序不變量,而后刪除無意義及空的不變量記錄后,輸出保留的有用的不變量,即似然不變量集合,這是一個較復(fù)雜和耗時的過程,而利用這種方法生成測試用例,需要對每個測試用例都運(yùn)行Daikon,而測試用例通常為隨機(jī)生成的,其中有大量的無效的測試用例,若不論是有效用例還是無效用例都需要運(yùn)行Daikon,這增加了時間開銷,降低了測試用例集合生成的效率。
發(fā)明內(nèi)容
本發(fā)明的實(shí)施例提供了一種生成測試用例集合的方法,通過斷言判斷測試用例的有效性,大大降低時間開銷,提高了測試用例集合生成的效率。為實(shí)現(xiàn)上述目的,本發(fā)明實(shí)施例提供了如下技術(shù)方案—種生成測試用例的方法,該方法包括SI,隨機(jī)生成一個測試用例;S2,判斷所述測試用例是否違反與測試用例集合的似然不變量集合相對應(yīng)的斷言;S3,當(dāng)所述測試用例違反斷言時,將所述測試用例添加到測試用例集合中,并進(jìn)行不變量提取,以生成添加了所述測試用例的測試用例集合的似然不變量集合并將其轉(zhuǎn)化為相應(yīng)的斷言。其中,所述方法還包括步驟S4 :重復(fù)執(zhí)行步驟S1-S3,直到終止測試用例的生成。當(dāng)所述測試用例沒有違反所述斷言時,執(zhí)行步驟SI。利用Daikon進(jìn)行不變量提取。
判斷測試用例是否違反所述斷言的步驟包括將所述斷言進(jìn)行插裝以形成斷言程序,利用所述斷言程序判斷測試用例是否違反所述斷言。此外,本發(fā)明還提供了生成測試用例的裝置,包括測試用例提供模塊,用于隨機(jī)生成測試用例;測試用例有效性判斷模塊,用于判斷測試用例是否違反斷言;測試用例添加模塊,當(dāng)所述測試用例違反所述斷言時,用于將所述測試用例添加到測試用例集合中;不變量提取模塊,當(dāng)所述測試用例違反所述斷言時,用于進(jìn)行不變量提取,以生成添加了所述測試用例的測試用例集合的似然不變量集合;斷言生成模塊,用于將所述似然不變量集合轉(zhuǎn)化為相應(yīng)的斷言。其中,測試用例有效性判斷模塊包括插裝子模塊,用于將斷言進(jìn)行插裝以形成斷言程序;判斷子模塊,用于利用所述斷言程序判斷測試用例是否違反所述斷言。所述斷言生成模塊包括不變量提取及解析子模塊,用于從似然不變量集合中提取不變量信息,并對不變量信息進(jìn)行解析;生成模塊,用于根據(jù)解析后的不變量信息,生成與似然不變量集合相對應(yīng)的斷言。本發(fā)明的生成測試用例集合的方法及裝置,通過判斷測試用例是否違反已有的測試用例集合的似然不變量集合相對應(yīng)的斷言,來判斷測試用例的有效性,僅當(dāng)所述測試用例違反所述斷言時,即為有效測試用例時,才進(jìn)行不變量的提取,這樣,減少了無效測試用例的不變量提取的步驟,大大降低時間開銷,提高了測試用例集合生成的效率。
圖I為現(xiàn)有的Daikon的原理框圖;圖2為根據(jù)本發(fā)明的生成測試用例集合的方法流程圖;圖3為本發(fā)明實(shí)施例的生成測試用例集合的方法流程圖;圖4為本發(fā)明一實(shí)施例與現(xiàn)有技術(shù)中不變量提取次數(shù)的對比圖;圖5為本發(fā)明一實(shí)施例與現(xiàn)有技術(shù)中程序覆蓋率的對比圖;圖6為本發(fā)明另一實(shí)施例與現(xiàn)有技術(shù)中時間開銷對比圖;圖7為本發(fā)明另一實(shí)施例與現(xiàn)有技術(shù)中程序覆蓋率對比圖。
具體實(shí)施例方式為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖對本發(fā)明的具體實(shí)施方式
做詳細(xì)的說明。在下面的描述中闡述了很多具體細(xì)節(jié)以便于充分理解本發(fā)明,但是本發(fā)明還可以采用其他不同于在此描述的其它方式來實(shí)施,本領(lǐng)域技術(shù)人員可以在不違背本發(fā)明內(nèi)涵的情況下做類似推廣,因此本發(fā)明不受下面公開的具體實(shí)施例的限制。正如背景技術(shù)中的描述,在現(xiàn)有技術(shù)中,在生成測試用例集合時,對每個測試用例運(yùn)行Daikon,生成涵蓋了該測試用例的似然不變量集合,而后在對比該次生成的似然不變量集合與已有的似然不變量集合相比是否發(fā)生變化,不論是有效用例還是無效用例都需要運(yùn)行Daikon,增加了時間開銷,降低了測試用例集合生成的效率。其中,在本發(fā)明中,不變量是指在特定程序的某個特定的點(diǎn)或某些特定的點(diǎn)上保持為真的屬性,是描述在程序運(yùn)行時保持不變的性質(zhì)的邏輯斷言,經(jīng)常出現(xiàn)在斷言聲明(assert statement)、形式化描述(formal specifixations)、說明文檔(documentation)中。程序不變量有助于軟件開發(fā)人員理解程序中的數(shù)據(jù)結(jié)構(gòu)、算法及各種操作,對軟件的設(shè)計、編碼、驗(yàn)證、測試、優(yōu)化和維護(hù)等各階段都有著積極的作用。程序不變量是揭示程序?qū)傩缘囊环N邏輯描述,斷言其實(shí)就是另一種形式的不變量,是將不變量進(jìn)行取反,它是對不變量的一種規(guī)約,斷言和程序不變量是一一映射的關(guān)系,對于給定的不變量可以通過查找映射表將其轉(zhuǎn)換成相應(yīng)的斷言。
以下以絕對值算法為例,對絕對值算法的不變量及斷言的對應(yīng)關(guān)系進(jìn)行舉例說明,見表I。絕對值算法如下
權(quán)利要求
1.一種生成測試用例的方法,其特征在于,該方法包括 SI,隨機(jī)生成一個測試用例; S2,判斷所述測試用例是否違反與測試用例集合的似然不變量集合相對應(yīng)的斷言; S3,當(dāng)所述測試用例違反斷言時,將所述測試用例添加到測試用例集合中,并進(jìn)行不變量提取,以生成添加了所述測試用例的測試用例集合的似然不變量集合并將其轉(zhuǎn)化為相應(yīng)的斷言。
2.根據(jù)權(quán)利要求I所述的生成測試用例的方法,其特征在于,所述方法還包括步驟S4重復(fù)執(zhí)行步驟S1-S3,直到終止測試用例的生成。
3.根據(jù)權(quán)利要求I所述的生成測試用例的方法,其特征在于,當(dāng)所述測試用例沒有違反所述斷言時,執(zhí)行步驟SI。
4.根據(jù)權(quán)利要求I所述的生成測試用例的方法,其特征在于,利用Daikon進(jìn)行不變量提取。
5.根據(jù)權(quán)利要求I所述的生成測試用例的方法,其特征在于,判斷測試用例是否違反所述斷言的步驟包括將所述斷言進(jìn)行插裝以形成斷言程序,利用所述斷言程序判斷測試用例是否違反所述斷言。
6.一種生成測試用例的裝置,其特征在于,包括 測試用例提供模塊,用于隨機(jī)生成測試用例; 測試用例有效性判斷模塊,用于判斷測試用例是否違反斷言; 測試用例添加模塊,當(dāng)所述測試用例違反所述斷言時,用于將所述測試用例添加到測試用例集合中; 不變量提取模塊,當(dāng)所述測試用例違反所述斷言時,用于進(jìn)行不變量提取,以生成添加了所述測試用例的測試用例集合的似然不變量集合; 斷言生成模塊,用于將所述似然不變量集合轉(zhuǎn)化為相應(yīng)的斷言。
7.根據(jù)權(quán)利要求6所述的生成測試用例的裝置,其特征在于,測試用例有效性判斷模塊包括插裝子模塊,用于將斷言進(jìn)行插裝以形成斷言程序;判斷子模塊,用于利用所述斷言程序判斷測試用例是否違反所述斷言。
8.根據(jù)權(quán)利要求6所述的生成測試用例的裝置,其特征在于,所述斷言生成模塊包括不變量提取及解析子模塊,用于從似然不變量集合中提取不變量信息,并對不變量信息進(jìn)行解析;生成模塊,用于根據(jù)解析后的不變量信息,生成與似然不變量集合相對應(yīng)的斷言。
全文摘要
一種生成測試用例的方法,該方法包括隨機(jī)生成一個測試用例;判斷所述測試用例是否違反與測試用例集合的似然不變量集合相對應(yīng)的斷言;當(dāng)所述測試用例違反斷言時,將所述測試用例添加到測試用例集合中,并進(jìn)行不變量提取,以生成添加了所述測試用例的測試用例集合的似然不變量集合并將其轉(zhuǎn)化為相應(yīng)的斷言。本發(fā)明的方法僅當(dāng)所述測試用例違反所述斷言時,即為有效測試用例時,才進(jìn)行不變量的提取,這樣,減少了無效測試用例的不變量提取的步驟,大大降低時間開銷,提高了測試用例集合生成的效率。
文檔編號G06F11/36GK102799525SQ20121022822
公開日2012年11月28日 申請日期2012年7月4日 優(yōu)先權(quán)日2012年7月4日
發(fā)明者曾凡平, 袁園, 鄧超強(qiáng), 武飛, 熊能, 董齊興 申請人:中國科學(xué)技術(shù)大學(xué)