两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種基于遺傳算法和帶權(quán)匹配算法的測試案例自動(dòng)生成方法

文檔序號(hào):6603260閱讀:322來源:國知局
專利名稱:一種基于遺傳算法和帶權(quán)匹配算法的測試案例自動(dòng)生成方法
技術(shù)領(lǐng)域
本發(fā)明涉及系統(tǒng)測試技術(shù)領(lǐng)域,特別涉及工程測試中的測試案例自動(dòng)生成方法, 是一種能夠顯著提高測試案例自動(dòng)生成質(zhì)量的方法。
背景技術(shù)
在當(dāng)前的系統(tǒng)工程測試中,白盒測試和黑盒測試是兩種普遍應(yīng)用的測試方法。其 中,黑盒測試是以用戶的角度,從輸入數(shù)據(jù)與輸出數(shù)據(jù)的對應(yīng)關(guān)系出發(fā)進(jìn)行測試的。在設(shè)計(jì) 測試案例時(shí),黑盒測試不需要考慮程序的內(nèi)部結(jié)構(gòu)和內(nèi)部特性,即避免了引入代碼細(xì)節(jié),使 得測試案例的設(shè)計(jì)可以只需依賴程序的功能要求,而不必像白盒測試那樣等到代碼正式開 發(fā)完成再針對代碼進(jìn)行測試案例設(shè)計(jì)。而黑盒測試案例的生成十分耗費(fèi)人力,而且測試案 例設(shè)計(jì)的質(zhì)量往往與測試人員的專業(yè)素質(zhì)息息相關(guān)。例如一個(gè)測試案例的使用可能涉及到 很多功能,而這些功能的不同使用順序會(huì)導(dǎo)致不同的測試結(jié)果。假設(shè)一個(gè)應(yīng)用涉及到300 個(gè)相互作用的功能,若需要人力來進(jìn)行測試案例的設(shè)計(jì)和生成,很可能就是按照測試人員 的邏輯思維將這300個(gè)功能簡單串聯(lián)起來成為一個(gè)測試案例,容易漏掉一些潛在的會(huì)出錯(cuò) 的功能測試序列。而借助計(jì)算機(jī)自動(dòng)進(jìn)行測試案例的生成就能將這種出錯(cuò)的可能性大大減 小,從而減少對測試人員能力的依賴,同時(shí)使得測試案例的生成變得簡單和高效。一種典型 的測試案例自動(dòng)生成方法包括如下步驟1.測試人員選取測試的功能點(diǎn)并加以定義。這些需要測試的功能點(diǎn)可以通過項(xiàng)目 功能說明書進(jìn)行劃定,待測功能點(diǎn)的粒度大小及數(shù)量可以按照項(xiàng)目的實(shí)際情況進(jìn)行確定。2.測試人員根據(jù)步驟1所定義的功能點(diǎn)設(shè)計(jì)一個(gè)測試案例生成方法,以產(chǎn)生由這 些待測功能點(diǎn)組成的測試案例。其中實(shí)現(xiàn)的策略可以是隨機(jī)、暴力枚舉等。在生成測試案 例的過程中,還需要生成對應(yīng)測試案例的預(yù)期測試結(jié)果用以比對;生成過程根據(jù)測試人員 的要求生成包含不同功能點(diǎn)的測試案例。3.根據(jù)步驟2所生成的測試案例及其對應(yīng)的預(yù)期測試結(jié)果,測試人員將這些測試 案例在被測對象中進(jìn)行執(zhí)行,并將得到的實(shí)際運(yùn)行結(jié)果與預(yù)期測試結(jié)果進(jìn)行比較,如此就 完成了一個(gè)測試案例的測試。在上述自動(dòng)生成測試案例的方法的實(shí)現(xiàn)過程中,使用最多的便是通過隨機(jī)算法進(jìn) 行功能操作的枚舉,雖然隨機(jī)枚舉這種實(shí)現(xiàn)方式能夠克服測試人員設(shè)計(jì)測試案例時(shí)的主觀 因素,但是由于隨機(jī)的不可控性,在一個(gè)測試案例中會(huì)產(chǎn)生很多連續(xù)的冗余的代碼段,而且 隨著生成功能點(diǎn)的增多,生成的測試案例將會(huì)變得非常龐大,一旦出現(xiàn)錯(cuò)誤,開發(fā)人員的調(diào) 試任務(wù)將會(huì)非常繁重。例如,假如需要產(chǎn)生一個(gè)300個(gè)功能點(diǎn)使用的測試案例,我們假設(shè) 1個(gè)功能點(diǎn)對應(yīng)一個(gè)操作,那么,一個(gè)隨機(jī)產(chǎn)生的測試案例可能包含有超過1000個(gè)功能調(diào) 用。但是我們希望這些功能調(diào)用盡量精簡(這樣在交付給開發(fā)人員后定位錯(cuò)誤比較方便)。如此就產(chǎn)生了一個(gè)矛盾既要保證功能點(diǎn)的充分包含,同時(shí)還要讓測試案例的長 度維持在一個(gè)合理的范圍,而且還不能丟掉代碼生成的隨機(jī)性。如何很好地解決這一技術(shù)
4問題,成為本領(lǐng)域技術(shù)人員函待解決的技術(shù)難題。

發(fā)明內(nèi)容
本發(fā)明的目標(biāo)是設(shè)計(jì)一種新型的測試案例自動(dòng)生成方法,其能夠獲得高質(zhì)量的測 試案例集該測試案例集中可以包括多個(gè)測試案例,每個(gè)測試案例的長度都是相同的,同時(shí) 該長度是由測試人員所指定的;每個(gè)測試案例都是相互獨(dú)立的,且每個(gè)測試案例都各自覆 蓋了一定數(shù)量的功能覆蓋點(diǎn);最后能夠在比較快的時(shí)間里得到一個(gè)測試案例集,該測試案 例集中的測試案例都運(yùn)行之后,能保證需要覆蓋的功能點(diǎn)都能被測試到。為了解決上述問題,本發(fā)明公開了一種基于遺傳算法和帶權(quán)匹配算法的測試案例 自動(dòng)生成方法,其包括如下步驟(1)提取并形成測試案例數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)中包含一個(gè)測試案例的具體內(nèi)容, 同時(shí)還包含一個(gè)第一覆蓋向量,其用來記錄該測試中有哪些功能點(diǎn)會(huì)被測試到;(2)提取并形成測試案例集的集數(shù)據(jù)結(jié)構(gòu),在該集數(shù)據(jù)結(jié)構(gòu)中,包含若干個(gè)測試案 例數(shù)據(jù)結(jié)構(gòu),該集數(shù)據(jù)結(jié)構(gòu)包含一個(gè)第二覆蓋向量,其用來記錄該測試案例集中的測試案 例能夠保證哪些功能點(diǎn)被測試到;(3)建立初始種群;(4)根據(jù)所述集數(shù)據(jù)結(jié)構(gòu)建立遺傳算法的適應(yīng)性函數(shù);(5)進(jìn)入遺傳算法部分,在進(jìn)行交叉的過程中,先基于遺傳算法和帶權(quán)匹配算法對 待交叉的兩個(gè)個(gè)體進(jìn)行處理,再繼續(xù)進(jìn)行遺傳算法的交叉,變異,選擇過程;(6)迭代得出符合要求的測試案例集,生成測試案例。優(yōu)選地,步驟(5)中所述的基于遺傳算法和帶權(quán)匹配算法對待交叉的兩個(gè)個(gè)體進(jìn) 行處理包括如下步驟a以每個(gè)個(gè)體的適應(yīng)度為依據(jù),根據(jù)概率選擇一個(gè)適應(yīng)度高的個(gè)體,其具有功能覆
蓋向量;b在當(dāng)前種群中通過相似函數(shù)尋找一個(gè)與該個(gè)體最互補(bǔ)的互補(bǔ)個(gè)體,互補(bǔ)個(gè)體具 有功能覆蓋向量,其中所述個(gè)體與互補(bǔ)個(gè)體是不相同的個(gè)體;c將這兩個(gè)個(gè)體所包含的內(nèi)容映射到對應(yīng)的二分圖中,該二分圖的每個(gè)頂點(diǎn)代表 某個(gè)測試案例;且二分圖的邊這樣連接對于左半部分的每一個(gè)頂點(diǎn),我們都與另一半邊 的頂點(diǎn)相連接,除了與其代表同一測試案例的頂點(diǎn)不連接;使用相似函數(shù)衡量每一對測試 案例的相似度,該值作為這個(gè)二分圖邊的權(quán)值;將這個(gè)二分圖作為輸入,讓帶權(quán)匹配算法進(jìn) 行處理,得到需要的相似對,使得總的相似度和最大;d通過返回的測試案例相似對,對該個(gè)體和互補(bǔ)個(gè)體中的測試案例進(jìn)行重新調(diào)整; 這兩個(gè)調(diào)整過的個(gè)體被作為待交叉操作的兩個(gè)個(gè)體,進(jìn)行余下的交叉操作。優(yōu)選地,所述相似函數(shù)為一輔助函數(shù),其接收兩個(gè)功能覆蓋向量,并返回這兩個(gè)功 能覆蓋向量所關(guān)聯(lián)的兩個(gè)測試案例或兩個(gè)測試案例集所覆蓋的功能點(diǎn)的相似度。優(yōu)選地,所述第二覆蓋向量的值由該測試案例集中的每一個(gè)測試案例的第一覆蓋 向量來綜合獲得。優(yōu)選地,所述帶權(quán)匹配算法為Kuhn-Munkres算法。優(yōu)選地,采用顯式編碼對存儲(chǔ)測試案例的所述案例數(shù)據(jù)結(jié)構(gòu)和集數(shù)據(jù)結(jié)構(gòu)的具體
5的內(nèi)容進(jìn)行編碼。優(yōu)選地,在所述步驟(1)和(2)中還包括為功能覆蓋向量賦值的步驟。優(yōu)選地,所述為功能覆蓋向量賦值的步驟包括a對于每一個(gè)測試案例集,通過隨機(jī)的方法生成指定數(shù)量、指定長度的測試案例;b對每個(gè)測試案例都進(jìn)行分析,記錄其覆蓋了多少功能點(diǎn),同時(shí)賦值每個(gè)測試案例 相關(guān)的功能覆蓋向量;c對于每一個(gè)測試案例集,通過其包含的測試案例對應(yīng)的功能覆蓋向量,綜合得到 該測試案例集的功能覆蓋向量。優(yōu)選地,步驟(4)中所述的適應(yīng)性函數(shù)通過測試案例集的功能覆蓋向量統(tǒng)計(jì)出個(gè) 體中所包含的測試案例總共覆蓋的功能點(diǎn)個(gè)數(shù)。優(yōu)選地,所述適應(yīng)函數(shù)為
其中k為功能點(diǎn)個(gè)數(shù),di為表示第i個(gè) 功能點(diǎn)是否被覆蓋的二元變量(取1時(shí)覆蓋,取0時(shí)未覆蓋),p為功能覆蓋向量,f(p)為 計(jì)算測試案例或測試案例集覆蓋的不同功能點(diǎn)數(shù)量的函數(shù)。本發(fā)明與現(xiàn)有的方法相比,具備以下優(yōu)點(diǎn)1.該方法能夠解決普通遺傳算法所不 能解決的測試案例覆蓋質(zhì)量的問題,具有很大的應(yīng)用價(jià)值;2.該方法對于原測試框架沒有 影響,整合進(jìn)入比較方便;在涉及的測試案例自動(dòng)生成的地方,該方法都能比較簡單的整入 到原來的測試流程中,從而提高生成的測試案例的質(zhì)量;3.該方法的提出建立在兩個(gè)成熟 算法之上,使用較為安全。


圖1 傳統(tǒng)的遺傳算法流程圖;圖2本發(fā)明中涉及的A和B個(gè)體所包含測試案例的功能點(diǎn)覆蓋向量圖;圖3本發(fā)明中涉及的優(yōu)化算法在整個(gè)遺傳算法框架中所處的位置示意圖;圖4本發(fā)明中涉及的優(yōu)化算法流程圖;圖5本發(fā)明中的測試案例的編碼形式示意圖;圖6本發(fā)明中的測試案例在二分圖中與頂點(diǎn)的映射關(guān)系示意圖;圖7本發(fā)明中的測試案例二分圖表示的邊權(quán)值情況示意圖。
具體實(shí)施例方式發(fā)明原理本發(fā)明的測試案例自動(dòng)生成方法是建立在遺傳算法之上,在遺傳算法進(jìn)行交叉的 過程中,對兩個(gè)待交叉的個(gè)體所包含的測試案例映射到二分圖的頂點(diǎn)上,用這些測試案例 覆蓋功能的相似度作為這個(gè)二分圖邊的權(quán)值本,然后通過Kuhn-Mimkres算法處理這個(gè)二 分圖,對每一個(gè)測試案例找到一個(gè)唯一的、測試盡可能多相同功能點(diǎn)的測試案例,最后通過 這些相似測試案例對來調(diào)整兩個(gè)待交叉?zhèn)€體中的測試案例,使得整個(gè)遺傳算法因此能獲得 更好的執(zhí)行效果。本發(fā)明的特點(diǎn)就是通過一個(gè)優(yōu)化技術(shù),將一般方法不能生成的這樣具有 高隨機(jī)性、高覆蓋性同時(shí)還具有一定的測試案例長度限制的測試案例集。本優(yōu)化技術(shù)的算 法復(fù)雜度是多項(xiàng)式級(jí)的0(rT3),對遺傳算法的每一代迭代運(yùn)算的時(shí)間影響很小。遺傳算法是模擬達(dá)爾文生物進(jìn)化論的自然選擇和遺傳學(xué)機(jī)理的生物進(jìn)化過程的計(jì)算模型,它的一般算法流程包括1.創(chuàng)建一個(gè)隨機(jī)的初始狀態(tài)2.評(píng)估每個(gè)個(gè)體的適應(yīng)度3.判斷是否有滿足要求的個(gè)體,若有,則返回;若無,則繼續(xù)4操作4.繁殖(包括交叉和變異)5.產(chǎn)生下一代,返回步驟2遺傳算法是一種建立在隨機(jī)方法之上的優(yōu)化算法,它還是要依靠隨機(jī)算法生成一 定數(shù)量的原始解,通過每一階段的迭代操作,將這些初始解進(jìn)行交叉和變異操作,然后淘汰 掉質(zhì)量差的個(gè)體,使得最后的解慢慢接近于最優(yōu)的解。利用遺傳算法能夠顯著的提高生成 的測試案例的質(zhì)量。在使用遺傳算法的過程中,最重要的就是對每一階段產(chǎn)生的數(shù)據(jù)進(jìn)行評(píng)估,該部 分的評(píng)估通常通過定義一個(gè)評(píng)估函數(shù)來實(shí)現(xiàn)。對于之前描述的測試案例生成過程來說,這 個(gè)評(píng)估函數(shù)是比較明顯的,對于一個(gè)測試案例來說,在測試案例的長度確定之后,覆蓋越多 功能點(diǎn)其適應(yīng)度(也就是測試案例的質(zhì)量)就越高。以上描述的步驟是非常通用的遺傳算法應(yīng)用,雖然是通用的方法,對于特定的問 題,遺傳算法還是需要具體的修改以使得其能夠更為有效的處理特定的優(yōu)化問題,在本發(fā) 明中,就在遺傳算法中的交叉環(huán)節(jié)中采用了 Kuhn-Mimkres帶權(quán)匹配算法對兩個(gè)待交叉的 個(gè)體進(jìn)行處理,使得交叉能夠更為有效的調(diào)整測試案例集合,產(chǎn)生比一般測試案例生成方 法更有質(zhì)量的測試案例。Kuhn-Munkres帶權(quán)匹配算法又被稱為匈牙利算法,該算法主要用來獲得一個(gè)匹配 集合,使得該匹配集合中的邊的權(quán)值最大或者最小。我們在遺傳算法的交叉過程中,將兩個(gè) 待交叉?zhèn)€體中包含的測試案例映射到二分圖中,再賦予適當(dāng)?shù)臋?quán)值,最后通過該算法獲得 一個(gè)匹配集合,繼而通過這個(gè)匹配集合調(diào)整兩個(gè)個(gè)體中的測試案例,獲得更好的交叉后代。實(shí)施例下面結(jié)合附圖,對本發(fā)明的測試案例自動(dòng)生成方法作詳細(xì)闡述。該測試案例自動(dòng)生成方法具體包括如下步驟1.提取并形成測試案例數(shù)據(jù)結(jié)構(gòu)(SingleTestCase)。該SingleTestCase里包含 了一個(gè)測試案例的具體內(nèi)容,同時(shí)還包含一個(gè)覆蓋向量Pc (稱之為第一覆蓋向量),用來記 錄該測試中有哪些功能點(diǎn)會(huì)被測試到。Pc的值通過測試人員分析該測試案例得到,例如通 過開發(fā)的解析程序?qū)崿F(xiàn)。2.提取并形成測試案例集的集數(shù)據(jù)結(jié)構(gòu)(TestCaseSet)。在TestCaseSet中,包 含若干個(gè)SingleTestCase,即該測試案例集含有多少測試案例,就在該數(shù)據(jù)結(jié)構(gòu)中包含多 少個(gè)SingleTestCase類型的變量來記錄。同時(shí),該TestCaseSet中也包含一個(gè)覆蓋向量 Ps(稱之為第二覆蓋向量),用來記錄該測試案例集中的測試案例能夠保證哪些功能點(diǎn)被 測試到,Ps的值由該測試案例集中的每一個(gè)測試案例的Pc來綜合獲得。例如,我們設(shè)一個(gè) 測試案例集含有3個(gè)測試案例,它們的覆蓋向量分別是Pel = <1,0,1,0,1>,Pc2 = <1,1,0, 0,0>,Pc3 = <0,0,1,0,0>,其中,測試案例的覆蓋向量的每一維代表一個(gè)待測的功能點(diǎn),若 對應(yīng)的維度取0,則表明該功能沒有被該測試案例覆蓋到,若為1,則表明該功能被覆蓋了。 這樣,通過Pel,Pc2, Pc3,我們就可以得到Ps = <1,1,1,0,1>,這個(gè)測試案例集覆蓋向量就
7表明了若將這個(gè)測試案例集的測試案例都進(jìn)行測試的話,所覆蓋功能點(diǎn)的情況。推導(dǎo)的方 法很簡單,只要將Pel,Pc2,Pc3的對應(yīng)維度進(jìn)行取或操作,最后的值就是Ps對應(yīng)維度的值。 這里的TestCaseSet對應(yīng)于遺傳算法中的一個(gè)個(gè)體,是遺傳算法進(jìn)行交叉和選擇的目標(biāo)。SingleTestCase中存儲(chǔ)測試案例的具體的內(nèi)容需要進(jìn)行適當(dāng)?shù)木幋a,在經(jīng)典的遺 傳算法中,由0和1組成的二進(jìn)制串被用來對具體的內(nèi)容進(jìn)行編碼,這種編碼的方式對于遺 傳算法的交叉和變異過程來說非常方便。但是對于本發(fā)明來說,因?yàn)樾枰诿恳淮傻?時(shí)候?qū)γ總€(gè)測試案例進(jìn)行衡量,判斷該測試案例的功能點(diǎn)覆蓋情況,所以我們就采用了顯 式編碼的方法,即如圖5所示,我們可以開一個(gè)足夠大的數(shù)組,該數(shù)組被劃分為等長的段, 每一段的開頭存儲(chǔ)一個(gè)具體的功能調(diào)用,該段的其余部分就存儲(chǔ)該操作所需要的參數(shù)。這 樣的編碼大大簡化了遺傳算法對個(gè)體的評(píng)估過程。知道了具體的編碼方式之后,SingleTestCase和TestCaseSet的數(shù)據(jù)結(jié)構(gòu)就可 以定義了,SingleTestCase除了 1所說明的編碼方式之外,還需要為每一個(gè)測試案例定 義一個(gè)相對應(yīng)的功能覆蓋向量來表明該測試案例實(shí)際能夠測試到的功能點(diǎn)的情況。其中 TestCaseSet由多個(gè)SingleTestCase組成(數(shù)量由測試人員指定),同樣也需要定義一個(gè) 對應(yīng)的表示功能覆蓋的功能向量。對這些數(shù)據(jù)結(jié)構(gòu)的賦值過程是這樣的a對于每一個(gè)測試案例集,通過隨機(jī)的方法生成指定數(shù)量,指定長度的測試案例。b對每個(gè)測試案例都進(jìn)行分析,記錄其覆蓋了多少功能點(diǎn),同時(shí)賦值每個(gè)測試案例 相關(guān)的功能覆蓋向量。c對于每一個(gè)測試案例集來說,通過其包含的測試案例對應(yīng)的功能覆蓋向量,綜合 得到該測試案例集的功能覆蓋向量。3.根據(jù)遺傳算法的要求建立初始種群,即假定測試人員指定了種群的大小(即測 試案例集的數(shù)量)為N,每個(gè)個(gè)體(即測試案例集)中包含M個(gè)獨(dú)立的測試案例,每個(gè)測試 案例的長度指定為L。這樣,通過隨機(jī)的方法,生成M個(gè)獨(dú)立的測試案例,并將這些案例存儲(chǔ) 到SingleTestCase中,然后再將這些SingleTestCase分配到N個(gè)測試案例集中。最后再 將這些測試案例對應(yīng)的覆蓋向量Pc賦值,對每個(gè)測試案例集覆蓋向量Ps進(jìn)行賦值。4.根據(jù)上述提供的TestCaseSet,我們根據(jù)該數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)遺傳算法的適應(yīng)性函 數(shù),測試人員對測試案例集的要求就是覆蓋盡可能多的功能點(diǎn),這樣,當(dāng)被測試程序被定義 了 k個(gè)功能點(diǎn)時(shí),對于個(gè)體A,其對應(yīng)的功能覆蓋向量假設(shè)為P = <dl,d2,d3,…,dk>,這 樣適應(yīng)函數(shù)
,其中,di為表示第i個(gè)功能點(diǎn)是否被覆蓋的二元變量(取1時(shí) 覆蓋,取0時(shí)未覆蓋),p為功能覆蓋向量,f(p)為計(jì)算測試案例或測試案例集覆蓋的不同 功能點(diǎn)數(shù)量的函數(shù)。這個(gè)函數(shù)是很好理解的,即通過測試案例集的功能覆蓋向量,我們統(tǒng)計(jì) 出該個(gè)體中所包含的測試案例總共覆蓋了多少個(gè)功能點(diǎn),覆蓋的功能點(diǎn)越多,該個(gè)體在整 一代中的適應(yīng)度函數(shù)值就越高,被選擇留下來的幾率就越高。5.進(jìn)入遺傳算法部分,其中在進(jìn)行交叉的過程中,先使用本發(fā)明的下述的優(yōu)化技 術(shù)對待交叉的兩個(gè)個(gè)體進(jìn)行處理,再繼續(xù)進(jìn)行一般通用的遺傳算法的交叉,變異,選擇等過 程,直至迭代得出符合要求的測試案例集。傳統(tǒng)的遺傳算法流程如圖1所示。我們這里著 重介紹下本方法所提供的優(yōu)化功能的理論依據(jù)。我們假設(shè)被測的應(yīng)用程序含有5個(gè)待測功 能點(diǎn),分別為Sl,s2,…,s5。等待進(jìn)行進(jìn)行交叉操作的兩個(gè)個(gè)體A和B分別包含3個(gè)測試案 例,其中A的三個(gè)測試案例分別表示為a,b,c ;B中的三個(gè)測試案例分別表示為d,e, f。這些測試案例的功能點(diǎn)覆蓋情況如圖2所示,從圖2中我們可以知道,測試案例集A中的測試 案例a,b,c累計(jì)覆蓋了 4個(gè)不同的功能點(diǎn)Sl,s2, s3, s4 ;測試案例集B中的測試案例d,e, f 累計(jì)覆蓋了 3個(gè)不同的功能點(diǎn)Sl,s2, s5。從圖2中,我們可以很容易發(fā)現(xiàn)一個(gè)現(xiàn)象,若我們 對個(gè)體A和B應(yīng)用遺傳算法中經(jīng)典的三種交叉方法單點(diǎn)交叉,兩點(diǎn)交叉,均勻交叉。我們 將無法獲得功能覆蓋點(diǎn)超過4的新個(gè)體(因?yàn)橐陨辖徊娣椒ǖ脑硎钱a(chǎn)生由1和0組成的 掩碼,來決定對應(yīng)位置上的測試案例是否交換,在圖2中,就是指(a,d),(b,e),(c, f)這三 對測試案例是否交換)。從圖2中還可以觀察到一個(gè)現(xiàn)象,例如在個(gè)體A中,測試案例a其 實(shí)已經(jīng)覆蓋了整個(gè)測試案例集覆蓋的4個(gè)功能點(diǎn),換句話說就是,a其實(shí)在一定程度上具有 整個(gè)測試案例集所具有的測試功能,其余的兩個(gè)測試案例b和c即使被移除,也不會(huì)影響整 個(gè)測試案例集的功能覆蓋點(diǎn)的數(shù)量。本發(fā)明的優(yōu)化技術(shù)即是基于這兩個(gè)現(xiàn)象而產(chǎn)生的。首 先我們定義一個(gè)輔助函數(shù)Similarity(p,q),該輔助函數(shù)接收的兩個(gè)功能覆蓋向量(可以 是測試案例的功能向量,也可以是測試案例集的功能向量),該函數(shù)能夠返回這兩個(gè)功能覆 蓋向量所關(guān)聯(lián)的兩個(gè)測試案例(或兩個(gè)測試案例集)所覆蓋的功能點(diǎn)的相似度。如圖2所 示,測試案例a,b,c的功能覆蓋向量分別為Pa = <1,1,1,1,0>,Pb = <1,1,1,0,0>,Pc = <l,0,l,0,0>,KWSimilarity(Pa,Pb) = 3, Similarity (Pa, Pc) =2。由這幾個(gè)數(shù)據(jù)可以 看出,若將測試案例b,c從測試案例集A中移除,對測試案例集A的功能覆蓋點(diǎn)的數(shù)量沒有 影響。其原因就是,隨機(jī)生成的兩個(gè)測試案例b,c所覆蓋的功能點(diǎn)都被測試案例a所覆蓋 了,在測試中,我們希望一個(gè)測試案例集能覆蓋盡量多的功能點(diǎn),但是這種覆蓋相似功能點(diǎn) 的測試案例卻影響著遺傳算法的最后效果。如果我們能發(fā)現(xiàn)這些覆蓋相似功能點(diǎn)的測試案 例,再選擇將這些覆蓋相似功能點(diǎn)的測試案例與其它個(gè)體相交換,換回覆蓋其它不同功能 點(diǎn)的測試案例,那么,我們就能提升該測試案集的功能覆蓋數(shù)量。而被交換出去的測試案例 也沒有被拋棄,而是被調(diào)整到其它個(gè)體中,其覆蓋的功能點(diǎn)也有極大的概率提高另一個(gè)個(gè) 體的功能覆蓋數(shù)量,這樣就使得整個(gè)遺傳算法中每一代的每一個(gè)個(gè)體都能有大的覆蓋率的 提升。這樣,使得迭代產(chǎn)的結(jié)果質(zhì)量上升,同時(shí)使得其迭代的結(jié)果更為穩(wěn)定,退化的現(xiàn)象減 少。因?yàn)閭鹘y(tǒng)遺傳算法的交叉過程并不能分辨出有哪些個(gè)體是覆蓋相同功能點(diǎn)的,其交叉 算法都是針對兩個(gè)個(gè)體相同位置進(jìn)行交換,所以這種交叉方式對于提高功能覆蓋率并沒有 幫助,因?yàn)槿粝駡D2中所示的情況,將案例a與案例d相交換,個(gè)體A最多覆蓋4個(gè)功能點(diǎn), 而B也只能覆蓋4個(gè)功能點(diǎn);但是若我們將個(gè)體A中相似的兩個(gè)測試案例a和b分開,將b 與d相交換,那么,就可以使得個(gè)體A的功能點(diǎn)覆蓋提升到5,同時(shí)B也能覆蓋比原來高的3 個(gè)功能點(diǎn)。因此,對于如圖2的情況,我們建立如圖6所示的二分圖,我們使用Similarity 函數(shù)衡量每一對測試案例的相似度,該值作為這個(gè)二分圖邊的權(quán)值。二分圖中的每個(gè)點(diǎn)代 表一個(gè)測試案例。在建立這個(gè)二分圖之后,我們就是用Kuhn-Mimkres帶權(quán)匹配算法對這個(gè) 二分圖進(jìn)行處理,為每一個(gè)測試案例找到唯一的另一個(gè)相似測試案例,使得最后的邊權(quán)值 的和最大。例如圖2所示的情況,可能的匹配對及其權(quán)值的情況如下Similarity (a, b) = 4,Similarity (a, c) = 2,Similarity (a, d) = 0Similarity (a, e) = 1,Similarity (a, f) = 2,Similarity (b, c) = 2Similarity (b, d) = 0,Similarity (b, e) = 1,Similarity (b, f) = 2Similarity (c, d) = 0,Similarity (c, e) = 1,Similarity (c, f) = 1Similarity (d, e) = 0,Similarity (d, f) = 0,Similarity (e, f) = 1
我們要從這些序?qū)χ刑暨x3對,使得每一個(gè)測試案例都只出現(xiàn)一次,而且使得這 三對Similarity值最大。這個(gè)工作我們就交給Kuhn-Munkres帶權(quán)匹配算法來完成。我們 應(yīng)用Kuhn-Munkres帶權(quán)匹配算法之后,就能選出(a,b),(c, f),(d,e)這一組符合之上所述 條件的結(jié)果。對于這些找出的測試案例對來說,每一對測試案例都必須分配到不同的兩個(gè) 個(gè)體中(A或者B),例如測試案例對(a,b),a和b不能同時(shí)分配到A或者B中。這樣,我們 通過將每一個(gè)測試案例對中的測試案例分別分配到兩個(gè)個(gè)體中,我們就可以重新獲得兩個(gè) 新的調(diào)整過的個(gè)體A’和B’。這樣,在A’和B’中處于相同位置的測試案例就是相似的測試 案例,我們就可以繼續(xù)在這兩個(gè)新的個(gè)體上使用遺傳算法的交叉過程。我們的優(yōu)化在整個(gè) 生物算法流程中所處的位置如圖3所示。這個(gè)優(yōu)化算法產(chǎn)生的效果可以用生物學(xué)的觀點(diǎn)來 解釋,在生物體的染色體中,兩條互相纏繞的DNA鏈上對應(yīng)位置的基因控制著同一種功能, 在生物體中也經(jīng)常會(huì)出現(xiàn)染色體上控制相同功能的基因片段進(jìn)行互換,這樣就不會(huì)影響整 個(gè)生物體的功能。我們的優(yōu)化找到的就是這些相似功能的基因片段,并將它們分配到兩個(gè) 不同DNA鏈上的同一位置。6.迭代得出符合要求的測試案例集,生成測試案例。其中,所述基于遺傳算法和帶權(quán)匹配算法對待交叉的兩個(gè)個(gè)體進(jìn)行處理(亦即優(yōu) 化)如圖4所示,具體包括如下步驟a)首先以每個(gè)個(gè)體的適應(yīng)度為依據(jù),根據(jù)概率選擇一個(gè)適應(yīng)度高的個(gè)體A(適應(yīng) 度越大,被選擇的概率越高)。A的功能覆蓋向量為Pa;b)在當(dāng)前種群中通過相似函數(shù)(Similarity函數(shù))尋找一個(gè)與A最互補(bǔ)的個(gè)體 B,B的功能覆蓋向量為Pb。即使得Similarity (Pa, Pb)的值最小,其中A與B是不相同的 個(gè)體。我們假設(shè)這里的A、B的具體情況與圖2中的A、B相同。c)將這兩個(gè)個(gè)體所包含的映射到對應(yīng)的二分圖中,如圖6所示,我們建立這個(gè)二 分圖,這個(gè)二分圖的每個(gè)頂點(diǎn)代表了某一個(gè)測試案例。二分圖的邊是這樣連接的對于左半 部分的每一個(gè)頂點(diǎn),我們都與另一半邊的頂點(diǎn)相連接(除了與其代表同一測試案例的頂點(diǎn) 不連接)。即假如一共有6個(gè)測試案例,每一個(gè)左半部分的頂點(diǎn)將與5個(gè)其它代表不同測 試案例的右半部分頂點(diǎn)相連接。每條邊的權(quán)值如圖7所示,其中N/A表示邊不存在。這樣, 每一條邊就代表一個(gè)測試案例相似對的相似度,例如(a,b)這條邊就表示測試案例a和測 試案例b的覆蓋了相同功能點(diǎn)的個(gè)數(shù)。我們需要注意到一個(gè)情況,對于每一對,我們在這個(gè) 二分圖中存在兩條邊,例如測試案例a和測試案例b,我們有(a,b)和(b,a)這兩條邊來表 示,因?yàn)檫@樣有利于Kuhn-Munkres算法進(jìn)行處理。通過這樣表示之后,我們就將這個(gè)二分 圖作為輸入,讓Kuhn-Munkres算法進(jìn)行處理,得到需要的相似對,使得總的相似度和最大。 Kuhn-Munkres最后得到的結(jié)果也是正確結(jié)果的兩倍,這個(gè)并不影響最終的結(jié)果。例如,根 據(jù)圖2所示的情況建好如圖6的二分圖之后,Kuhn-Munkres得到的是這些相似對(a,b), (c,f), (d,e),(b,a),(f,c),(e,d),由于對稱性,我們只需要去掉重復(fù)的對數(shù)就可以了,最后 取(a, b),(c, f)和(d,e)就可以進(jìn)行調(diào)整了。這樣,我們通過這些返回的測試案例相似對,對A和B中的測試案例進(jìn)行重新調(diào) 整。即每一對中的兩個(gè)測試案例分別放在兩個(gè)不同的測試案例集中(A或者B)。這樣的做 法使得A或者B中的測試案例盡量不相同,這樣,就能使得測試案例集所覆蓋的功能點(diǎn)盡可
10能多。最后,這兩個(gè)調(diào)整過的個(gè)體A和B將作為待交叉操作的兩個(gè)個(gè)體,進(jìn)行余下的交叉操作。 上面以舉例方式對本發(fā)明進(jìn)行了說明,但本發(fā)明不限于上述具體實(shí)施例,凡基于 本發(fā)明所做的任何改動(dòng)或變型均屬于本發(fā)明要求保護(hù)的范圍。
權(quán)利要求
一種基于遺傳算法和帶權(quán)匹配算法的測試案例自動(dòng)生成方法,其特征在于,具體包括以下步驟(1)提取并形成測試案例數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)中包含一個(gè)測試案例的具體內(nèi)容,同時(shí)還包含一個(gè)第一覆蓋向量(Pc),其用來記錄該測試中有哪些功能點(diǎn)會(huì)被測試到;(2)提取并形成測試案例集的集數(shù)據(jù)結(jié)構(gòu),在該集數(shù)據(jù)結(jié)構(gòu)中,包含若干個(gè)測試案例數(shù)據(jù)結(jié)構(gòu),該集數(shù)據(jù)結(jié)構(gòu)包含一個(gè)第二覆蓋向量(Ps),其用來記錄該測試案例集中的測試案例能夠保證哪些功能點(diǎn)被測試到;(3)建立初始種群;(4)根據(jù)所述集數(shù)據(jù)結(jié)構(gòu)建立遺傳算法的適應(yīng)性函數(shù);(5)進(jìn)入遺傳算法部分,在進(jìn)行交叉的過程中,先基于遺傳算法和帶權(quán)匹配算法對待交叉的兩個(gè)個(gè)體進(jìn)行處理,再繼續(xù)進(jìn)行遺傳算法的交叉,變異,選擇過程;(6)迭代得出符合要求的測試案例集,生成測試案例。
2.根據(jù)權(quán)利要求1所述的測試案例自動(dòng)生成方法,其特征在于,步驟(5)中所述的基于 遺傳算法和帶權(quán)匹配算法對待交叉的兩個(gè)個(gè)體進(jìn)行處理包括如下步驟a.以每個(gè)個(gè)體的適應(yīng)度為依據(jù),根據(jù)概率選擇一個(gè)適應(yīng)度高的個(gè)體(A),其具有功能 覆蓋向量(Pa);b.在當(dāng)前種群中通過相似函數(shù)尋找一個(gè)與該個(gè)體(A)最互補(bǔ)的互補(bǔ)個(gè)體(B),互補(bǔ)個(gè) 體(B)具有功能覆蓋向量(Pb),其中所述個(gè)體(A)與互補(bǔ)個(gè)體(B)是不相同的個(gè)體;c.將這兩個(gè)個(gè)體所包含的內(nèi)容映射到對應(yīng)的二分圖中,該二分圖的每個(gè)頂點(diǎn)代表某個(gè) 測試案例;且二分圖的邊這樣連接左半部分的每一個(gè)頂點(diǎn)都與另一半邊的頂點(diǎn)相連接, 除了與其代表同一測試案例的頂點(diǎn)不連接;使用相似函數(shù)衡量每一對測試案例的相似度, 該值作為這個(gè)二分圖邊的權(quán)值;將這個(gè)二分圖作為輸入,用帶權(quán)匹配算法進(jìn)行處理,得到需 要的相似對,使得總的相似度和最大;d.通過返回的測試案例相似對,對該個(gè)體(A)和互補(bǔ)個(gè)體(B)中的測試案例進(jìn)行重新 調(diào)整;這兩個(gè)調(diào)整過的個(gè)體被作為待交叉操作的兩個(gè)個(gè)體,進(jìn)行余下的交叉操作。
3.根據(jù)權(quán)利要求2所述的測試案例自動(dòng)生成方法,其特征在于,所述相似函數(shù)為一輔 助函數(shù),其接收兩個(gè)功能覆蓋向量,并返回這兩個(gè)功能覆蓋向量所關(guān)聯(lián)的兩個(gè)測試案例或 兩個(gè)測試案例集所覆蓋的功能點(diǎn)的相似度。
4.根據(jù)權(quán)利要求1所述的測試案例自動(dòng)生成方法,其特征在于,所述第二覆蓋向量 (Ps)的值由該測試案例集中的每一個(gè)測試案例的第一覆蓋向量(Pc)來綜合獲得。
5.根據(jù)權(quán)利要求1所述的測試案例自動(dòng)生成方法,其特征在于,所述帶權(quán)匹配算法為 Kuhn-Munkres 算法。
6.根據(jù)權(quán)利要求1所述的測試案例自動(dòng)生成方法,其特征在于,采用顯式編碼對存儲(chǔ) 測試案例的所述案例數(shù)據(jù)結(jié)構(gòu)和集數(shù)據(jù)結(jié)構(gòu)的具體的內(nèi)容進(jìn)行編碼。
7.根據(jù)權(quán)利要求1所述的測試案例自動(dòng)生成方法,其特征在于,在所述步驟(1)和(2) 中還包括為功能覆蓋向量賦值的步驟。
8.根據(jù)權(quán)利要求7所述的測試案例自動(dòng)生成方法,其特征在于,所述為功能覆蓋向量 賦值的步驟包括a)對于每一個(gè)測試案例集,通過隨機(jī)的方法生成指定數(shù)量、指定長度的測試案例;b)對每個(gè)測試案例都進(jìn)行分析,記錄其覆蓋功能點(diǎn)的個(gè)數(shù),同時(shí)賦值每個(gè)測試案例相 關(guān)的功能覆蓋向量;C)對于每一個(gè)測試案例集,通過其包含的測試案例對應(yīng)的功能覆蓋向量,綜合得到該 測試案例集的功能覆蓋向量。
9.根據(jù)權(quán)利要求1所述的測試案例自動(dòng)生成方法,其特征在于,步驟(4)中所述的適應(yīng) 性函數(shù)通過測試案例集的功能覆蓋向量統(tǒng)計(jì)出個(gè)體中所包含的測試案例總共覆蓋的功能 點(diǎn)個(gè)數(shù)。
10.根據(jù)權(quán)利要求9所述的測試案例自動(dòng)生成方法,其特征在于,所述適應(yīng)函數(shù)為 m =其中k為功能點(diǎn)個(gè)數(shù),di為表示第i個(gè)功能點(diǎn)是否被覆蓋的二元變量,ρ為 功能覆蓋向量,f (P)為計(jì)算測試案例或測試案例集覆蓋的不同功能點(diǎn)數(shù)量的函數(shù)。
全文摘要
本發(fā)明涉及工程測試中的測試案例自動(dòng)生成方法,屬于系統(tǒng)測試技術(shù)領(lǐng)域,是一種能夠顯著提高測試案例自動(dòng)生成質(zhì)量的方法,其特點(diǎn)是在現(xiàn)有測試案例自動(dòng)生成方法中融入遺傳算法和帶權(quán)匹配算法,使得應(yīng)用該方法能夠自動(dòng)獲得高質(zhì)量的測試案例集測試案例集中包括多個(gè)測試案例,每個(gè)測試案例的長度相同,同時(shí)該長度由測試人員指定;每個(gè)測試案例相互獨(dú)立,且每個(gè)測試案例都各自覆蓋了一定數(shù)量的功能覆蓋點(diǎn);能夠在較快時(shí)間里得到一個(gè)測試案例集,該測試案例集中的測試案例都運(yùn)行之后,能保證需要覆蓋的功能點(diǎn)都能被測試到。
文檔編號(hào)G06F11/36GK101853202SQ20101018685
公開日2010年10月6日 申請日期2010年5月28日 優(yōu)先權(quán)日2010年5月28日
發(fā)明者周霖, 姚劉杰, 張成碩, 李紅, 王鑄, 顧宗華 申請人:浙江大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
新竹市| 佛冈县| 湘阴县| 泽普县| 阿图什市| 新龙县| 清原| 定远县| 湄潭县| 安阳县| 新沂市| 禹州市| 东至县| 萨迦县| 湄潭县| 肃北| 岑巩县| 韶关市| 上蔡县| 龙岩市| 高平市| 东乡县| 青神县| 石河子市| 彭水| 博湖县| 五大连池市| 开平市| 镇雄县| 株洲县| 和田县| 汉中市| 德令哈市| 简阳市| 侯马市| 祁门县| 陆河县| 城步| 寻乌县| 禄丰县| 平昌县|