欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于符號執(zhí)行的帶反饋測試用例生成方法

文檔序號:6372288閱讀:834來源:國知局
專利名稱:一種基于符號執(zhí)行的帶反饋測試用例生成方法
技術(shù)領(lǐng)域
本發(fā)明涉及軟件自動化測試中的測試用例生成,特別涉及在現(xiàn)有測試用例基礎(chǔ)上,應(yīng)用符號執(zhí)行方法,通過設(shè)定覆蓋目標(biāo)和選擇種子測試用例,限制約束求解的范圍,以反饋和迭代的方式高效率生成測試用例。
背景技術(shù)
在軟件測試過程中,測試用例生成是最重要的環(huán)節(jié)之一。有效的測試用例生成可以提高測試執(zhí)行效果,同時降低測試成本和時間。目前測試用例生成基本靠人工來完成,耗時耗力,難以達(dá)到理想的程序覆蓋率,因此需要有效的自動化測試用例生成方法。自動化測試用例生成的效果一般由程序覆蓋率來度量,較高的覆蓋率意味著更高的缺陷檢測概率和軟件質(zhì)量保證能力。一個好的測試用例生成方法能夠以較少的測試用例數(shù)量來達(dá)到較高的·程序覆蓋率?,F(xiàn)有的自動化測試用例生成方法包含三個類別隨機(jī)測試、基于搜索的測試以及符合執(zhí)行。其中隨機(jī)測試方法采用隨機(jī)的方式生成測試用例輸入,常生成過多的測試用例,且難以完成對特定程序覆蓋目標(biāo)的處理;基于搜索的測試方法采用遺傳算法等來達(dá)到指定程序路徑的覆蓋,常需要過多的時間來生成測試用例,且受到搜索空間的限制;符號執(zhí)行方法采用符號變量來執(zhí)行程序,通過求解約束表達(dá)式來達(dá)到程序覆蓋目標(biāo);在面對較大規(guī)模程序時,常遇到約束條件爆炸問題,在現(xiàn)有約束求解技術(shù)下難以完成復(fù)雜約束表達(dá)式的求解。

發(fā)明內(nèi)容
本發(fā)明的主要目的是針對傳統(tǒng)自動化測試用例生成方法不能獨(dú)立完成自動化測試用例生成任務(wù)的問題,提出一種基于符號執(zhí)行的帶反饋測試用例生成方法,以反饋和迭代的方式,通過收集程序覆蓋信息,設(shè)定覆蓋目標(biāo),限制符號執(zhí)行中約束求解的范圍,高效率生成測試用例。為實(shí)現(xiàn)本發(fā)明所述目的,本發(fā)明采用如下的步驟
1)執(zhí)行已有的測試用例并收集測試用例覆蓋信息;確定每個測試用例在執(zhí)行時覆蓋的被測程序中的語句塊,一個語句塊指在任何程序輸入下,執(zhí)行情況都相同的一組語句;匯總所有測試用例所覆蓋的語句塊,確定被測程序中尚未覆蓋的語句塊集合;
2)根據(jù)被測程序的控制流圖確定符號執(zhí)行的覆蓋目標(biāo);覆蓋目標(biāo)是被測程序中尚未覆蓋的某個語句塊;
3)對被測程序插樁,植入引導(dǎo)符號執(zhí)行的控制代碼;控制代碼包括標(biāo)記語句和判定語
句;
4)從已有測試用例集中選擇合適的種子測試用例,用于啟動符號執(zhí)行方法;5)針對覆蓋目標(biāo)應(yīng)用符號執(zhí)行方法生成新的測試用例;將新生成的多個測試用例補(bǔ)充到已有的測試用例集合中。上述5個步驟迭代執(zhí)行,直至達(dá)到給定的測試用例生成目標(biāo)。上述步驟2)中根據(jù)被測程序控制流圖確定符號執(zhí)行覆蓋目標(biāo)的處理過程是首先根據(jù)代碼控制結(jié)構(gòu),將被測程序語句塊組織成控制流圖僅,圖中的節(jié)點(diǎn)對應(yīng)語句塊,邊代表語句塊執(zhí)行順序;識別被測程序中每個函數(shù)/過程/方法中處于最高層次的子樹,定義為上層子樹;然后尋找覆蓋率最低的函數(shù)/過程/方法(通過補(bǔ)充已有測試用例使其至少部分覆蓋),在其對應(yīng)的控制流圖中確定第一個沒有充分覆蓋的上層子樹;最后選擇該上層子樹中第一個沒有被覆蓋的語句塊(對應(yīng)非控制節(jié)點(diǎn))作為本次符號執(zhí)行的覆蓋目標(biāo)。上述步驟3)中被測程序插樁以植入引導(dǎo)符號執(zhí)行的控制代碼的處理過程是首先確定覆蓋目標(biāo)所在的函數(shù)/過程/方法,在其起始位置插入判定變量定義語句,判定變量 的初值置為“false”;然后在覆蓋目標(biāo)之前的位置插入判定變量賦值語句,將判定變量賦值為“true”;最后確定覆蓋目標(biāo)所處的上層子樹,在上層子樹之后的位置插入控制符號執(zhí)行的判定語句;在符號執(zhí)行中,判定語句根據(jù)判定變量的取值決定是否繼續(xù)補(bǔ)充約束條件以求解更復(fù)雜的約束表達(dá)式。上述步驟4)中從已有測試用例集中選擇種子測試用例的處理過程是首先從已有測試用例中篩選覆蓋了步驟2中覆蓋目標(biāo)的父節(jié)點(diǎn)的所有測試用例;令控制流圖CFG中覆蓋目標(biāo)所對應(yīng)的節(jié)點(diǎn)為%,父節(jié)點(diǎn)是fTG中位于節(jié)點(diǎn)%之前且直接與%相連接的節(jié)點(diǎn)(按步驟2中的處理方式,父節(jié)點(diǎn)有且僅有一個);然后從這些測試用例中篩選對覆蓋目標(biāo)所處之上層子樹的覆蓋程度最高的測試用例;最后在剩余的測試用例中選擇覆蓋語句塊總數(shù)最少的測試用例作為種子測試用例。上述步驟5)中針對覆蓋目標(biāo)應(yīng)用符號執(zhí)行方法生成測試用例的處理過程是首先根據(jù)覆蓋目標(biāo)確定符號執(zhí)行的入口,包括對應(yīng)函數(shù)/過程/方法的名稱和參數(shù)列表;然后識別或選擇符號執(zhí)行需要處理的輸入?yún)?shù),即參數(shù)處理類型,符號執(zhí)行無法處理的非數(shù)值參數(shù)必須作為常量,其他作為符號變量;根據(jù)種子測試用例為輸入?yún)?shù)賦初值并設(shè)置符號執(zhí)行的配置信息;配置信息的具體內(nèi)容取決于所采用的符號執(zhí)行方法,其中的關(guān)鍵是符號執(zhí)行入口和參數(shù)處理類型;最后以插樁程序?yàn)榛A(chǔ)驅(qū)動符號執(zhí)行方法生成新的測試用例。本發(fā)明利用人工、隨機(jī)生成、或者歷史積累的初始測試用例集,以迭代和反饋的方式,通過收集程序覆蓋信息,設(shè)定覆蓋目標(biāo),有效限制符號執(zhí)行中約束求解的范圍,從而降低約束表達(dá)式的復(fù)雜度,減少符號執(zhí)行的規(guī)模和數(shù)量,高效率生成測試用例。為達(dá)到同等的程序覆蓋率,同隨機(jī)測試方法相比較,本發(fā)明方法無論在測試用例生成時間上,還是在測試用例生成數(shù)量上,都遠(yuǎn)小于隨機(jī)測試方法;同單純符號執(zhí)行方法相比較,除生成的測試用例數(shù)量略多以外,本發(fā)明只需要更少的測試用例生成時間,就可以處理更大規(guī)模和復(fù)雜度的軟件程序,可以靈活處理不需要或者不能夠進(jìn)行符號執(zhí)行的輸入?yún)?shù)。歸納起來,本發(fā)明的優(yōu)點(diǎn)主要是可用于各個測試階段的自動化測試生成工作;可用于各種類型軟件程序測試,不依賴于編程語言和測試環(huán)境;可充分利用被測程序已有的測試用例集;在自動化測試生成過程中,便于人工干預(yù)或引入其他的測試用例生成方法,具有較好的靈活性、可擴(kuò)展性和適應(yīng)性。


圖I是基于符號執(zhí)行的帶反饋測試用例生成方法的結(jié)構(gòu) 圖2是根據(jù)控制流圖確定符號執(zhí)行覆蓋目標(biāo)的工作流程 圖3是一個程序代碼示例及其對應(yīng)的控制流 圖4是被測程序插樁并植入符號執(zhí)行控制代碼的工作流程 圖5是程序代碼示例和基于JPF工具的控制代碼插樁示意 圖6是從已有測試用例集中選擇種子測試用例的工作流程 圖7是應(yīng)用符號執(zhí)行方法生成新測試用例的工作流程圖; 圖8是針對程序代碼示例的部分JPF工具配置信息示意圖。
具體實(shí)施例方式下面結(jié)合附圖進(jìn)行詳細(xì)說明。如圖I所示,本發(fā)明方法由五個步驟組成其一,收集已有測試用例的程序覆蓋信息;其二,根據(jù)被測程序的控制流圖確定符號執(zhí)行的覆蓋目標(biāo);其三,對被測程序插樁,植入引導(dǎo)符號執(zhí)行的控制代碼;其四,從已有測試用例集中選擇合適的種子測試用例;其五,針對覆蓋目標(biāo)應(yīng)用符號執(zhí)行方法生成新的測試用例。新生成的測試用例補(bǔ)充入現(xiàn)有的測試用例集;其六,重復(fù)上述步驟,直至達(dá)到給定的測試用例生成目標(biāo),如100%語句覆蓋率。本發(fā)明方法的輸入包括被測程序、以及由人工或隨機(jī)測試等方法生成的測試用例集;輸出是達(dá)到了指定程序覆蓋率的測試用例集。步驟一是收集已有測試用例的程序覆蓋信息。確定每個測試用例在執(zhí)行時覆蓋的程序語句塊,一個語句塊(或代碼塊)指在任何程序輸入下,執(zhí)行情況都相同的一組語句。匯總所有測試用例所覆蓋的語句塊,可以確定被測程序中尚未覆蓋的語句塊集合。步驟二是根據(jù)被測程序的控制流圖確定符號執(zhí)行的覆蓋目標(biāo),過程如圖2所示。根據(jù)代碼控制結(jié)構(gòu),被測程序的語句塊可以組織成為控制流圖CFG =其中JV為控制流圖的節(jié)點(diǎn)集合,每個節(jié)點(diǎn)對應(yīng)一個語句塊為控制流圖的邊集。對于任意兩個語句塊&;和%,有向邊< >€ 表示W(wǎng)和\之間存在順序關(guān)系,即\可能在\之后執(zhí)行。有向邊關(guān)聯(lián)的節(jié)點(diǎn)為父子關(guān)系,即&是b的父節(jié)點(diǎn),而b是K的子節(jié)點(diǎn)。圖3所示為一個程序代碼示例及其對應(yīng)的控制流圖。一個軟件程序通常包含多個函數(shù)/過程/方法,控制流圖一般以函數(shù)/過程/方法為單位組織。圖3顯示了函數(shù)“func(x,y) ”的語句塊組成、及其所對應(yīng)的一個控制流圖。圖3中在代碼的左側(cè)標(biāo)識了每個語句塊的編號,對應(yīng)控制流圖中相應(yīng)節(jié)點(diǎn)的編號??刂屏鲌D中的節(jié)點(diǎn)一般分為控制節(jié)點(diǎn)(如節(jié)點(diǎn)I和4)和非控制節(jié)點(diǎn)(如節(jié)點(diǎn)2和5),控制節(jié)點(diǎn)對應(yīng)程序中的控制語句。圖中節(jié)點(diǎn)Γ3組成一個分支(或選擇)結(jié)構(gòu),本身構(gòu)成一顆子樹;節(jié)點(diǎn)4、組成一個循環(huán)結(jié)構(gòu),如果不考慮逆向邊< !U >,則也構(gòu)成了一顆子樹;在這顆子樹中,節(jié)點(diǎn)6 8又組成了一個分支結(jié)構(gòu),構(gòu)成低一層次的子樹。有向邊關(guān)聯(lián)的節(jié)點(diǎn)對為父子節(jié)點(diǎn),例如對有向邊< 5.6 >,節(jié)點(diǎn)5是節(jié)點(diǎn)6的父節(jié)點(diǎn),而節(jié)點(diǎn)6是節(jié)點(diǎn)5的子節(jié)點(diǎn)。在組織被測程序的控制流圖時,識別每個函數(shù)/過程/方法中最高層次的所有子樹,定義為上層子樹。圖3所示的函數(shù)代碼中包含3個上層子樹,分別由節(jié)點(diǎn)f 3、節(jié)點(diǎn)Γ9、以及節(jié)點(diǎn)l(Tll構(gòu)成。
接下來確定符號執(zhí)行的覆蓋目標(biāo)尋找覆蓋率最低的函數(shù)/過程/方法,如果其覆蓋率為0,則需采用人工或隨機(jī)測試方法補(bǔ)充現(xiàn)有測試用例;這里假設(shè)該函數(shù)/過程/方法已部分覆蓋;然后在其對應(yīng)的控制流圖中確定第一個沒有充分覆蓋的上層子樹;再選擇該上層子樹中第一個沒有被覆蓋的語句塊(要求對應(yīng)非控制節(jié)點(diǎn))作為本次符號執(zhí)行的覆蓋目標(biāo)。按上述策略設(shè)定覆蓋目標(biāo)的目的是使得本次迭代中新生成的測試用例能夠覆蓋更多的未覆蓋語句塊。步驟三是插樁并植入引導(dǎo)符號執(zhí)行的控制代碼,過程如圖4所示??刂拼a的作用是保證隨后的符號執(zhí)行僅會搜索和求解該子樹中覆蓋目標(biāo)所處路徑上的約束表達(dá)式。所插樁的控制代碼包含兩個部分其一是標(biāo)記語句,標(biāo)記語句的功能有兩個,第一是定義一個布爾型的判定變量;第二是為該變量設(shè)置布爾值。判定變量的定義位置可以根據(jù)編程語言的特性來確定,一般作為局部變量定義在對應(yīng)函數(shù)/過程/方法的起始位置;在布爾值設(shè)定方面,其初始值設(shè)置為“false”,然后在覆蓋目標(biāo)(語句塊)的起始位置將布爾值設(shè)置為
“true”。其二是判定語句,判定語句的功能是限制約束求解的范圍和復(fù)雜度;判定語句置于覆蓋目標(biāo)所處的上層子樹之后,要求是該子樹執(zhí)行之后、對應(yīng)函數(shù)/過程/方法返回之前執(zhí)行的第一條語句。判定語句的語法結(jié)構(gòu)取決于所基于的符號執(zhí)行方法,目標(biāo)是根據(jù)判定變量的取值決定是否繼續(xù)補(bǔ)充約束條件以求解更復(fù)雜的約束表達(dá)式。圖5所示是根據(jù)圖3的示例插樁后的程序代碼。其中假設(shè)編程語言是Java,所采用的符號執(zhí)行工具是JPF (Java Path Finder)。令函數(shù)“func (x, y) ”中尚未覆蓋的第一個語句塊編號是7。插樁后新增加了 3條語句,語句I和語句2是標(biāo)記語句,分別定義布爾型判定變量“—flag_”并對其設(shè)置合適的布爾值。語句3是判定語句,置于循環(huán)結(jié)構(gòu)(節(jié)點(diǎn)Γ9)之后,根據(jù)變量“—flag_”的取值決定是否繼續(xù)添加后續(xù)的約束條件,圖中若變量值為“false”則不再繼續(xù)求解約束表達(dá)式。步驟四是從已有測試用例集中選擇合適的種子測試用例,用于啟動符號執(zhí)行方法。圖6所示為選擇種子測試用例的工作流程。對于符號執(zhí)行,種子測試用例的作用主要有兩個方面一是提供確定的輸入?yún)?shù)值,引導(dǎo)符號執(zhí)行覆蓋既定的程序覆蓋目標(biāo);二是符號執(zhí)行方法目前只能處理數(shù)值參數(shù),對于非數(shù)值參數(shù),種子測試用例能夠提供合適的固定值(符號執(zhí)行過程中將這些參數(shù)值視為常量)?;谏鲜?,選擇種子測試用例時遵循以下基本原則
1)種子測試用例必須覆蓋既定覆蓋目標(biāo)的父節(jié)點(diǎn)。按步驟2,覆蓋目標(biāo)是上層子樹中第一個未覆蓋的語句塊(對應(yīng)控制流圖中的非控制節(jié)點(diǎn)),其父節(jié)點(diǎn)必然被某一個測試用例覆蓋??刂屏鲌D中存在多個父節(jié)點(diǎn)的節(jié)點(diǎn)必然是控制節(jié)點(diǎn),如圖3中的節(jié)點(diǎn)3、4、8和9等,覆蓋目標(biāo)對應(yīng)非控制節(jié)點(diǎn),有且僅有一個父節(jié)點(diǎn);
2)種子測試用例對覆蓋目標(biāo)所處的上層子樹覆蓋盡可能多;
3)種子測試用例所覆蓋的語句塊總數(shù)盡可能少。按照原則I和2,種子測試用例可以有效減少符號執(zhí)行的規(guī)模和范圍,提高符號執(zhí)行的效率;按照原則3,種子測試用例盡量簡單,可以減少符號執(zhí)行的運(yùn)行時間,能夠在較短的時間里生成更多的測試用例。如圖6所示,按照上述原則,首先從已有測試用例集中篩選覆蓋了既定覆蓋目標(biāo)的父節(jié)點(diǎn)的所有測試用例;然后從這些測試用例中篩選對覆蓋目標(biāo)所處之上層子樹的覆蓋程度最高的測試用例;最后在剩余測試用例中選擇覆蓋語句塊總數(shù)最少的測試用例作為種子測試用例。步驟五是針對覆蓋目標(biāo)應(yīng)用符號執(zhí)行方法生成新的測試用例,過程如圖7所示。首先根據(jù)覆蓋目標(biāo)確定符號執(zhí)行的入口,需要獲取兩個方面信息第一是進(jìn)行符號執(zhí)行的函數(shù)/過程/方法名稱,如圖3中的“func () ”,其中包含既定的覆蓋目標(biāo);第二是析取該函數(shù)/過程/方法的參數(shù)列表,包括各參數(shù)的類型和名稱,圖3中為兩個整型參數(shù)“X,y”、以及一個字符串參數(shù)“z”。然后根據(jù)參數(shù)類型確定可以采用符號執(zhí)行處理的參數(shù),目前符號執(zhí)行方法尚不能處理非數(shù)值參數(shù)和結(jié)構(gòu)類型參數(shù),在圖3中整型參數(shù)“X,y”可以作為符號變量由符號執(zhí)行來處理,而字符串參數(shù)“z”只能作為常量來處理。再后根據(jù)種子測試用例為輸入?yún)?shù)賦初值,并設(shè)置符號執(zhí)行方法的配置信息。圖8所示為符號執(zhí)行方法配置信息的一個實(shí)例,所采用的符號執(zhí)行工具是JPF,運(yùn)行對 象是圖3中的示例函數(shù),其中函數(shù)定義“func (int x, int y, String z)”被轉(zhuǎn)換為^func(SymSsymScon) ”,確定了可以采用符號執(zhí)行處理的輸入?yún)?shù)。最后采用插樁后的程序,驅(qū)動符號執(zhí)行方法,生成新的測試用例。新生成的多個測試用例補(bǔ)充到已有的測試用例
^ 由
: 口卞 O上述五個步驟以迭代方式重復(fù)執(zhí)行,直至達(dá)到給定的測試用例生成目標(biāo)(如100%語句覆蓋率)。應(yīng)用符號執(zhí)行需要考慮程序中存在不可達(dá)路徑的問題,本發(fā)明方法在迭代過程中允許人工介入,可以采用限制符號執(zhí)行時間、限制方法的迭代次數(shù)、以及插樁時人為修改控制代碼等方式更靈活地解決不可達(dá)路徑問題。實(shí)證研究中我們采用十余個樣本程序應(yīng)用本發(fā)明方法生成測試用例,并同隨機(jī)測試和單純符號執(zhí)行方法進(jìn)行比對。實(shí)驗(yàn)結(jié)果表明,同隨機(jī)測試方法相比較,為達(dá)到同等的程序覆蓋率,本發(fā)明方法無論在測試用例生成時間上,還是在測試用例生成數(shù)量上,都遠(yuǎn)小于隨機(jī)測試方法;同單純符號執(zhí)行方法相比較,本發(fā)明方法需要更少的測試用例生成時間,可以處理更大規(guī)模和復(fù)雜度的軟件程序,可以靈活處理不需要或者不能夠進(jìn)行符號執(zhí)行的輸入?yún)?shù);但由于初始測試用例集的存在,測試用例生成數(shù)量略多于單純符號執(zhí)行方法。
權(quán)利要求
1.一種基于符號執(zhí)行的帶反饋測試用例生成方法,其特征在于包括以下步驟 1)執(zhí)行已有的測試用例并收集測試用例覆蓋信息;確定每個測試用例在執(zhí)行時覆蓋的被測程序中的語句塊;匯總所有測試用例所覆蓋的語句塊,確定被測程序中尚未覆蓋的語句塊集合; 2)根據(jù)被測程序的控制流圖確定符號執(zhí)行的覆蓋目標(biāo);覆蓋目標(biāo)是被測程序中尚未覆蓋的某個語句塊; 3)對被測程序插樁,植入引導(dǎo)符號執(zhí)行的控制代碼;控制代碼包括標(biāo)記語句和判定語句; 4)從已有測試用例集中選擇合適的種子測試用例,用于啟動符號執(zhí)行方法; 5)針對覆蓋目標(biāo)應(yīng)用符號執(zhí)行方法生成新的測試用例;將新生成的多個測試用例補(bǔ)充到已有的測試用例集合中; 6)上述5個步驟迭代執(zhí)行,直至達(dá)到給定的測試用例生成目標(biāo)。
2.根據(jù)權(quán)利要求I所述的基于符號執(zhí)行的帶反饋測試用例生成方法,其特征在于,上述步驟2)中根據(jù)被測程序控制流圖確定符號執(zhí)行覆蓋目標(biāo)的處理過程是首先根據(jù)代碼控制結(jié)構(gòu),將被測程序語句塊組織成控制流圖CTC7,圖中的節(jié)點(diǎn)對應(yīng)語句塊,邊代表語句塊執(zhí)行順序;識別被測程序中每個函數(shù)/過程/方法中處于最高層次的子樹,定義為上層子樹;然后尋找覆蓋率最低的函數(shù)/過程/方法,在其對應(yīng)的控制流圖中確定第一個沒有充分覆蓋的上層子樹;最后選擇該上層子樹中第一個沒有被覆蓋的語句塊,對應(yīng)非控制節(jié)點(diǎn)作為本次符號執(zhí)行的覆蓋目標(biāo)。
3.根據(jù)權(quán)利要求I或2所述的基于符號執(zhí)行的帶反饋測試用例生成方法,其特征在于,上述步驟3)中被測程序插樁以植入引導(dǎo)符號執(zhí)行的控制代碼的處理過程是首先確定覆蓋目標(biāo)所在的函數(shù)/過程/方法,在其起始位置插入判定變量定義語句,判定變量的初值置為“false”;然后在覆蓋目標(biāo)之前的位置插入判定變量賦值語句,將判定變量賦值為“true”;最后確定覆蓋目標(biāo)所處的上層子樹,在上層子樹之后的位置插入控制符號執(zhí)行的判定語句;在符號執(zhí)行中,判定語句根據(jù)判定變量的取值決定是否繼續(xù)補(bǔ)充約束條件以求解更復(fù)雜的約束表達(dá)式。
4.根據(jù)權(quán)利要求2所述的基于符號執(zhí)行的帶反饋測試用例生成方法,其特征在于,上述步驟4)中從已有測試用例集中選擇種子測試用例的處理過程是首先從已有測試用例中篩選覆蓋了步驟2)中覆蓋目標(biāo)的父節(jié)點(diǎn)的所有測試用例;令控制流圖CTG中覆蓋目標(biāo)所對應(yīng)的節(jié)點(diǎn)為~,父節(jié)點(diǎn)是CFG中位于節(jié)點(diǎn)nr之前且直接與nf相連接的節(jié)點(diǎn),父節(jié)點(diǎn)有且僅有一個;然后從這些測試用例中篩選對覆蓋目標(biāo)所處之上層子樹的覆蓋程度最高的測試用例;最后在剰余的測試用例中選擇覆蓋語句塊總數(shù)最少的測試用例作為種子測試用例。
5.根據(jù)權(quán)利要求I或2所述的基于符號執(zhí)行的帶反饋測試用例生成方法,其特征在干,上述步驟5)中針對覆蓋目標(biāo)應(yīng)用符號執(zhí)行方法生成測試用例的處理過程是首先根據(jù)覆蓋目標(biāo)確定符號執(zhí)行的入ロ,包括對應(yīng)函數(shù)/過程/方法的名稱和參數(shù)列表;然后識別或選擇符號執(zhí)行需要處理的輸入?yún)?shù),即參數(shù)處理類型,符號執(zhí)行無法處理的非數(shù)值參數(shù)必須作為常量,其他作為符號變量;根據(jù)種子測試用例為輸入?yún)?shù)賦初值并設(shè)置符號執(zhí)行的配置信息;配置信息的具體內(nèi)容取決于所采用的符號執(zhí)行方法,其中的關(guān)鍵是符號執(zhí)行入口和參數(shù)處理類型; 后以插樁程序?yàn)榛A(chǔ)驅(qū)動符號執(zhí)行方法生成新的測試用例。
全文摘要
本發(fā)明公開了一種基于符號執(zhí)行的帶反饋測試用例生成方法,其步驟為(1)執(zhí)行已有的測試用例并收集測試用例覆蓋信息;(2)根據(jù)被測程序的控制流圖確定符號執(zhí)行的覆蓋目標(biāo);(3)對被測試程序插樁,植入符號執(zhí)行的控制代碼;(4)從已有測試用例集中選擇合適的種子測試用例;(5)針對覆蓋目標(biāo)應(yīng)用符號執(zhí)行方法生成新的測試用例,新生成的測試用例補(bǔ)充入測試用例集;(6)重復(fù)上述步驟,直至達(dá)到給定的測試用例生成目標(biāo)。本發(fā)明可廣泛應(yīng)用于軟件開發(fā)過程中的自動化測試,自動化生成測試用例,避免單純符號執(zhí)行的約束條件爆炸問題,提高效率;同時能夠結(jié)合其他生成方法,緩解符號執(zhí)行方法不能處理復(fù)雜數(shù)據(jù)結(jié)構(gòu)的問題。
文檔編號G06F11/36GK102736979SQ20121021928
公開日2012年10月17日 申請日期2012年6月29日 優(yōu)先權(quán)日2012年6月29日
發(fā)明者莊元 , 湯九斌, 陳道蓄, 顧慶 申請人:南京大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
陇南市| 同德县| 奉新县| 曲阳县| 乌兰察布市| 安庆市| 博罗县| 揭西县| 兰溪市| 南和县| 东乌珠穆沁旗| 丹阳市| 鄯善县| 黔江区| 千阳县| 丹江口市| 密山市| 贵德县| 阜平县| 镶黄旗| 白水县| 福贡县| 大安市| 昆明市| 鄂伦春自治旗| 曲麻莱县| 南木林县| 棋牌| 宕昌县| 高台县| 延川县| 卢湾区| 涿州市| 义乌市| 青州市| 琼海市| 茶陵县| 宜黄县| 静海县| 蓬溪县| 南和县|