基于程序控制依賴引導(dǎo)的回歸測試案例生成方法
【專利摘要】本發(fā)明提出一種基于程序控制依賴引導(dǎo)的回歸測試案例生成方法,可以自動(dòng)生成對程序修改部分進(jìn)行有效測試的測試案例。該方法以發(fā)生修改的程序代碼為測試目標(biāo),通過分析程序的控制流和信息流,建立程序控制依賴圖;計(jì)算各個(gè)分支語句到達(dá)測試目標(biāo)代碼的概率(到達(dá)概率),引導(dǎo)符號執(zhí)行生成可以保證目標(biāo)代碼被執(zhí)行的測試案例;計(jì)算所有分支語句的可能使得目標(biāo)代碼執(zhí)行結(jié)果無法傳播到輸出的概率(阻斷概率),引導(dǎo)符號執(zhí)行生成可以保證目標(biāo)代碼執(zhí)行結(jié)果影響輸出的測試案例。相比現(xiàn)有回歸測試方法,本方法可以保證測試案例的有效性,同時(shí)顯著提高測試案例生成的效率。
【專利說明】基于程序控制依賴引導(dǎo)的回歸測試案例生成方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及可信軟件及軟件測試領(lǐng)域,特別涉及回歸測試案例生成方法。
【背景技術(shù)】
[0002]軟件回歸測試是指軟件代碼修改后,重新進(jìn)行測試以確認(rèn)修改沒有引入新的錯(cuò)誤或?qū)е缕渌a產(chǎn)生錯(cuò)誤。對軟件的有效修改需要滿足兩個(gè)條件:1)程序的修改符合預(yù)期行為,即能夠?qū)⒋薷牡牟糠中薷恼_;2)程序的修改不會影響其它非預(yù)期的行為發(fā)生變化,即修改部分不會影響其它不需要修改的程序行為?;貧w測試是保證軟件修改符合預(yù)期的重要手段,如何高效地進(jìn)行回歸測試也是軟件測試中的重要問題。現(xiàn)有思路主要分為以下兩種:1)連續(xù)測試,利用已有的測試案例對演化的程序進(jìn)行重新測試,此方法存在的主要問題是效率低,其絕大部分測試案例對被修改程序來說都是無效的測試案例。2)針對程序修改部分增量生成新的測試案例,其難點(diǎn)是如何高效地自動(dòng)生成符合期望的測試案例。
[0003]為解決連續(xù)測試效率低下的問題,研究人員提出了兩種改進(jìn)方法,測試案例選擇和測試案例排序。這兩種方法都是通過分析測試案例和演化程序的關(guān)系來選擇出最合適的測試案例。雖然測試案例選擇和測試案例排序解決了連續(xù)測試的效率低下問題,但是沒有解決連續(xù)測試的有效性問題,因?yàn)橐延械臏y試案例在創(chuàng)建時(shí)并不會考慮到將來程序的變化,所以有可能這些測試案例都不能覆蓋被修改的程序部分。
[0004]為解決測試案例集覆蓋率低下的問題,目前研究的熱點(diǎn)是將程序抽象為形式化模型,采用測試案例自動(dòng)生成算法對形式化模型中的各種信息進(jìn)行提取、生成一個(gè)完備的測試案例集。其中最常用的方法是符號執(zhí)行,符號執(zhí)行是20世紀(jì)70年代提出的一種程序驗(yàn)證方法,是一種基于符號化的模型檢驗(yàn)方法。廣泛用于符號調(diào)試,測試案例生成等。其核心思想是使用符號值代替具體的變量輸入,并使用符號表達(dá)式來表示程序中各變量的值。最終,程序的輸出值被轉(zhuǎn)化為一個(gè)以符號值作為輸入的函數(shù)。符號執(zhí)行將程序抽象為符號執(zhí)行樹,其中順序語句對應(yīng)著樹的計(jì)算節(jié)點(diǎn),分支語句對應(yīng)著分支節(jié)點(diǎn),而對于循環(huán)語句,將其按循環(huán)次數(shù)展開為語義上等價(jià)的分支語句。一般,一條循環(huán)語句對應(yīng)一組分支節(jié)點(diǎn)。可以認(rèn)為,在符號執(zhí)行過程中,程序只有順序和分支兩種結(jié)構(gòu)。
[0005]符號執(zhí)行的過程本質(zhì)上是路徑條件的構(gòu)造過程。路徑條件指的是對于執(zhí)行該路徑的測試案例,程序輸入值所需要滿足的數(shù)學(xué)約束條件。因而一個(gè)路徑條件唯一地對應(yīng)一條執(zhí)行路徑。一個(gè)路徑條件由一組子條件(sub-condition)組成,每一個(gè)被執(zhí)行分支的條件作為一個(gè)子條件。在初始時(shí)路徑條件為true,在探索程序的過程中,每遇到一個(gè)分支語句,就更新路徑條件,將被執(zhí)行分支的條件加入到路徑條件中,公式為PC=PCTnewsub-condition。由于每一個(gè)分支語句都對應(yīng)著true和false兩個(gè)分支,而符號執(zhí)行基于靜態(tài)分析,變量沒有具體的數(shù)值,因而無法確定執(zhí)行哪一條分支。所以對兩條分支都進(jìn)行探索(搜索順序可按需定義,深度優(yōu)先,廣度優(yōu)先等),即分別以兩個(gè)分支的條件作為子條件來更新路徑條件。這樣就得到了兩個(gè)新的路徑條件,對應(yīng)兩條不同的執(zhí)行路徑。之后,繼續(xù)對這兩條路徑分別進(jìn)行探索。符號執(zhí)行實(shí)現(xiàn)了對程序的全路徑探索。當(dāng)程序探索結(jié)束時(shí)就得到了被測程序所有執(zhí)行路徑的路徑條件。最后,檢查所有得到的路徑條件,如果路徑條件是無法被滿足的,則說明該路徑是一條不可執(zhí)行路徑,如果路徑條件可以被滿足,則說明該路徑是一條可執(zhí)行路徑。將路徑條件輸入約束求解器即可解出對應(yīng)的測試案例。
[0006]符號執(zhí)行存在兩個(gè)阻礙,使得其難以大規(guī)模使用。I)符號執(zhí)行是一種基于搜索的遍歷算法,需要對程序的所有分支進(jìn)行遍歷,雖然可以通過一些附加的剪枝條件進(jìn)行優(yōu)化,但其算法的復(fù)雜度非常高,為O (2η),其中η為被測程序中條件語句(包括分支,循環(huán),邏輯運(yùn)算)的數(shù)目;2)符號執(zhí)行不能很好地解決測試案例集更新的問題,每次代碼進(jìn)行修改后,只能重新遍歷一次符號執(zhí)行樹來生成一個(gè)新的測試案例集。由前面的分析可知,重新生成一個(gè)測試案例集的時(shí)間開銷比較大,而且一個(gè)軟件可能會頻繁變更,如果每次變更之后都通過符號執(zhí)行生成一個(gè)新的測試案例集,測試的效率就會受到影響。
【發(fā)明內(nèi)容】
[0007]本發(fā)明的目的在于提供一種基于程序控制依賴引導(dǎo)的回歸測試案例生成方法,以提高測試效率。
[0008]為了實(shí)現(xiàn)上述目的,本發(fā)明采用如下技術(shù)方案:
[0009]基于程序控制依賴引導(dǎo)的回歸測試案例生成方法,包括如下步驟:
[0010]S101)、利用程序靜態(tài)分析方法,分析測試程序的控制流和信息流,建立測試程序的控制依賴圖;
[0011]S102)、針對輸入的測試程序的目標(biāo)代碼,根據(jù)步驟S101)中建立的控制依賴圖中計(jì)算各個(gè)分支的到達(dá)概率;
[0012]S103)、采用基于分支到達(dá)概率引導(dǎo)的約束生成算法,迭代搜索和取反測試案例執(zhí)行路徑上到達(dá)概率最大的分支條件,生成新的約束,利用符號執(zhí)行方法進(jìn)行求解,若可以生成一個(gè)執(zhí)行目標(biāo)代碼的測試案例,轉(zhuǎn)入步驟S104);若無法生成測試案例可以執(zhí)行目標(biāo)代碼,則表示測試目標(biāo)代碼在程序中不會被執(zhí)行,轉(zhuǎn)入步驟S107);
[0013]S104)、針對測試程序的目標(biāo)代碼,根據(jù)程序信息流,檢測各個(gè)分支語句是否阻斷目標(biāo)代碼執(zhí)行結(jié)果對程序輸出的影響,若改變則標(biāo)記為阻斷分支;然后,計(jì)算各個(gè)分支的阻斷概率;
[0014]S105)、采用基于分支阻斷概率引導(dǎo)的約束生成算法,迭代搜索和取反測試案例執(zhí)行路徑上阻斷概率最小的分支條件,生成新的約束,利用符號執(zhí)行方法進(jìn)行求解,若可以生成一個(gè)測試案例保證目標(biāo)代碼執(zhí)行結(jié)果影響輸出,轉(zhuǎn)入步驟S106);若無法生成測試案例,轉(zhuǎn)入步驟S103);
[0015]S106)輸出有效測試案例,流程結(jié)束;所述有效測試案例是指該測試案例可以保證測試目標(biāo)代碼被執(zhí)行,且執(zhí)行結(jié)果影響程序輸出結(jié)果;
[0016]S107)針對輸出測試程序和測試目標(biāo)代碼,無法生成有效測試案例。
[0017]本發(fā)明進(jìn)一步的改進(jìn)在于:步驟S103)中所述分支到達(dá)概率為:對于某一個(gè)分支,從該分支到目標(biāo)代碼,所需要經(jīng)過的最少依賴分支數(shù)目的倒數(shù)。
[0018]本發(fā)明進(jìn)一步的改進(jìn)在于:步驟S103)中所述基于分支到達(dá)概率引導(dǎo)的約束生成算法具體包括:
[0019]S1031)、執(zhí)行測試案例,第一次執(zhí)行初始測試案例;從第二次開始執(zhí)行上一周期步驟S10310)生成的測試案例;
[0020]S1032)、檢查目標(biāo)代碼是否被執(zhí)行;如果測試案例能執(zhí)行到期望執(zhí)行的目標(biāo)代碼,則轉(zhuǎn)至步驟S10312);如果測試案例不能執(zhí)行到目標(biāo)代碼,則轉(zhuǎn)至步驟S1033);
[0021]S1033)、檢查執(zhí)行路徑上是否有可取反的分支,如果有,則轉(zhuǎn)至步驟S1034);如果沒有,則轉(zhuǎn)至步驟S1035);
[0022]S1034)、取反所有可取反的分支來生成一系列待擴(kuò)展路徑片段,并將待擴(kuò)展路徑片段最后一個(gè)分支的分支到達(dá)概率值作為該路徑片段能覆蓋目標(biāo)代碼的概率,存入第一未探測集合中;
[0023]S1035)、未探測集合是否為空,若為空,轉(zhuǎn)至步驟S10311),若不為空,轉(zhuǎn)至步驟S10316);
[0024]S1036)、從第一未探測集合中選擇一條概率最大的待擴(kuò)展路徑片段,基于此路徑片段進(jìn)行符號執(zhí)行;
[0025]S1037)、符號執(zhí)彳了該路徑片段,并記錄路徑約束Cnew ;
[0026]S1038)、利用約束求解器求解Cnew,若可解,則轉(zhuǎn)至步驟S10310);若不可解,則轉(zhuǎn)至步驟S1039);
[0027]S1039)、廢棄該路徑片段,同時(shí)跳轉(zhuǎn)至步驟S1033);
[0028]S10310)、生成新的測試案例Tnew,然后跳轉(zhuǎn)至步驟S1031);
[0029]S10311)、無有效測試案例輸出;
[0030]S10312)、輸出該能執(zhí)行到期望執(zhí)行的目標(biāo)代碼的有效測試案例。
[0031]本發(fā)明進(jìn)一步的改進(jìn)在于:步驟S104)中所述阻斷分支為目標(biāo)代碼執(zhí)行后,導(dǎo)致目標(biāo)代碼執(zhí)行結(jié)果無法傳遞到輸出語句的分支。
[0032]本發(fā)明進(jìn)一步的改進(jìn)在于:步驟S104)中所述分支阻斷概率為:對于在目標(biāo)代碼之后執(zhí)行的某一個(gè)分支,執(zhí)行該分支后將會執(zhí)行阻斷分支的概率;取值范圍為0%-100%。
[0033]本發(fā)明進(jìn)一步的改進(jìn)在于:分支阻斷概率的計(jì)算公式為:
[0034]BP=1- Nb/Np
[0035]其中分支阻斷概率的計(jì)算方法包括:首先將待測程序的所有分支分為Ep,Eb兩個(gè)集合,Ep為所有分支的集合,Eb為阻斷分支的集合;對于某一個(gè)分支,從兩個(gè)集合中選擇子集Ep’,Eb’,分別表示在該分支之后執(zhí)行的所有分支和所有阻斷分支,然后基于Ep’,Eb’構(gòu)建可能的執(zhí)行路徑;Np為基于Ep’構(gòu)建的路徑數(shù),Nb為基于Eb’構(gòu)建的路徑數(shù);得到Nb,Np后代入公式即可得到某一分支的分支阻斷概率值BP。
[0036]本發(fā)明進(jìn)一步的改進(jìn)在于:步驟S105)中所述基于分支阻斷概率引導(dǎo)的約束生成算法包括:
[0037]S1051)、執(zhí)行測試案例;第一次執(zhí)行步驟S103)的步驟S10312)生成的有效測試案例,從第二次開始執(zhí)行上一周期步驟S10510)生成的測試案例;
[0038]S1052)、檢查目標(biāo)代碼執(zhí)行結(jié)果是否傳遞到輸出語句:如果目標(biāo)代碼執(zhí)行結(jié)果傳遞到了輸出語句,則轉(zhuǎn)至步驟S10512);否則,則轉(zhuǎn)至步驟S1053);
[0039]S1053)、檢查執(zhí)行路徑上是否有可取反的分支,如果有,則轉(zhuǎn)至步驟S1054);如果沒有,則轉(zhuǎn)至步驟S1055);
[0040]S1054)、取反所有可取反的分支來生成一系列待擴(kuò)展路徑片段,并將待擴(kuò)展路徑片段最后一個(gè)分支的分支阻斷概率值作為該路徑片段將執(zhí)行阻斷分支的概率值,存入第二未探測集合中;
[0041]S1055)、第二未探測集合是否為空,若為空,轉(zhuǎn)至步驟S10511 ;若不為空,轉(zhuǎn)至步驟 S1056);
[0042]S1056)、從第二未探測集合中選擇一條阻斷概率最小的待擴(kuò)展路徑片段,基于此路徑片段進(jìn)行符號執(zhí)行;
[0043]S1057)、符號執(zhí)行該路徑片段,并記錄路徑約束Cnew ;
[0044]S1058)、利用約束求解器求解Cnew,若可解,則轉(zhuǎn)至步驟S10510);若不可解,則轉(zhuǎn)至步驟S1059);
[0045]S1059)、廢棄該路徑片段,跳轉(zhuǎn)至步驟S1053);
[0046]S10510)、生成新的測試案例Tnew,然后跳轉(zhuǎn)至步驟S1051);
[0047]S10511)、無有效測試案例輸出;
[0048]S10512)輸出該能執(zhí)行到期望執(zhí)行的目標(biāo)代碼,且執(zhí)行結(jié)果影響程序輸出結(jié)果的有效測試案例。
[0049]相對于現(xiàn)有技術(shù),本發(fā)明具有以下有益效果:本發(fā)明提出一種基于程序控制依賴引導(dǎo)的回歸測試案例生成方法,該方法以發(fā)生修改的程序代碼為測試目標(biāo),通過分析程序的控制流和信息流,建立程序控制依賴圖;計(jì)算各個(gè)分支語句到達(dá)測試目標(biāo)代碼的概率(到達(dá)概率),引導(dǎo)符號執(zhí)行生成可以保證目標(biāo)代碼被執(zhí)行的測試案例;計(jì)算所有分支語句的可能使得目標(biāo)代碼執(zhí)行結(jié)果無法傳播到輸出的概率(阻斷概率),引導(dǎo)符號執(zhí)行生成可以保證目標(biāo)代碼執(zhí)行結(jié)果影響輸出的測試案例;本發(fā)明方法可以自動(dòng)生成對程序修改部分進(jìn)行有效測試的測試案例;相比現(xiàn)有回歸測試方法,本方法可以保證測試案例的有效性,同時(shí)顯著提高測試案例生成的效率。
【專利附圖】
【附圖說明】
[0050]圖1為本發(fā)明方法的整體流程圖;
[0051]圖2為測試目標(biāo)代碼到達(dá)的測試案例生成流程圖;
[0052]圖3為測試目標(biāo)執(zhí)行影響輸出的測試案例生成流程圖;
[0053]圖4為示例待測試程序圖;
[0054]圖5為示例程序的控制依賴圖。
【具體實(shí)施方式】
[0055]以下結(jié)合附圖和實(shí)例詳細(xì)說明本發(fā)明的實(shí)施方式。待測程序如圖4所示,對于執(zhí)行路徑,我們以路徑上經(jīng)過的分支語句來表示。假設(shè)某一執(zhí)行路徑經(jīng)過了 2F,3T這兩個(gè)分支語句,則其表示為[2F,3T]。
[0056]步驟SlOl:基于靜態(tài)分析方法分析測試程序的控制流和信息流,生成測試程序的控制依賴圖,控制依賴圖如圖5所示,目標(biāo)代碼為第19行;
[0057]步驟S102:針對輸入的測試程序的目標(biāo)代碼,在步驟SlOl中建立的控制依賴圖中
計(jì)算各個(gè)分支的到達(dá)概率;結(jié)果如下表所示。
[0058]
【權(quán)利要求】
1.基于程序控制依賴引導(dǎo)的回歸測試案例生成方法,其特征在于,包括如下步驟: 5101)、利用程序靜態(tài)分析方法,分析測試程序的控制流和信息流,建立測試程序的控制依賴圖; 5102)、針對輸入的測試程序的目標(biāo)代碼,根據(jù)步驟S101)中建立的控制依賴圖中計(jì)算各個(gè)分支的到達(dá)概率; 5103)、采用基于分支到達(dá)概率引導(dǎo)的約束生成算法,迭代搜索和取反測試案例執(zhí)行路徑上到達(dá)概率最大的分支條件,生成新的約束,利用符號執(zhí)行方法進(jìn)行求解,若可以生成一個(gè)執(zhí)行目標(biāo)代碼的測試案例,轉(zhuǎn)入步驟S104);若無法生成測試案例可以執(zhí)行目標(biāo)代碼,則表示測試目標(biāo)代碼在程序中不會被執(zhí)行,轉(zhuǎn)入步驟S107); 5104)、針對測試程序的目標(biāo)代碼,根據(jù)程序信息流,檢測各個(gè)分支語句是否阻斷目標(biāo)代碼執(zhí)行結(jié)果對程序輸出的影響,若改變則標(biāo)記為阻斷分支;然后,計(jì)算各個(gè)分支的阻斷概率; 5105)、采用基于分支阻斷概率引導(dǎo)的約束生成算法,迭代搜索和取反測試案例執(zhí)行路徑上阻斷概率最小的分支條件,生成新的約束,利用符號執(zhí)行方法進(jìn)行求解,若可以生成一個(gè)測試案例保證目標(biāo)代碼執(zhí)行結(jié)果影響輸出,轉(zhuǎn)入步驟S106);若無法生成測試案例,轉(zhuǎn)入步驟S103); 5106)輸出有效測試案例,流程結(jié)束;所述有效測試案例是指該測試案例可以保證測試目標(biāo)代碼被執(zhí)行,且執(zhí)行結(jié)果影響程序輸出結(jié)果; 5107)針對輸出測試程序和測 試目標(biāo)代碼,無法生成有效測試案例。
2.根據(jù)權(quán)利要求1所述方法,其特征在于,步驟S103)中所述分支到達(dá)概率為:對于某一個(gè)分支,從該分支到目標(biāo)代碼,所需要經(jīng)過的最少依賴分支數(shù)目的倒數(shù)。
3.根據(jù)權(quán)利要求1所述方法,其特征在于,步驟S103)中所述基于分支到達(dá)概率引導(dǎo)的約束生成算法具體包括: 51031)、執(zhí)行測試案例,第一次執(zhí)行初始測試案例;從第二次開始執(zhí)行上一周期步驟S10310)生成的測試案例; 51032)、檢查目標(biāo)代碼是否被執(zhí)行;如果測試案例能執(zhí)行到期望執(zhí)行的目標(biāo)代碼,則轉(zhuǎn)至步驟S10312);如果測試案例不能執(zhí)行到目標(biāo)代碼,則轉(zhuǎn)至步驟S1033); 51033)、檢查執(zhí)行路徑上是否有可取反的分支,如果有,則轉(zhuǎn)至步驟S1034);如果沒有,則轉(zhuǎn)至步驟S1035); 51034)、取反所有可取反的分支來生成一系列待擴(kuò)展路徑片段,并將待擴(kuò)展路徑片段最后一個(gè)分支的分支到達(dá)概率值作為該路徑片段能覆蓋目標(biāo)代碼的概率,存入第一未探測集合中; 51035)、未探測集合是否為空,若為空,轉(zhuǎn)至步驟S10311),若不為空,轉(zhuǎn)至步驟S10316); 51036)、從第一未探測集合中選擇一條概率最大的待擴(kuò)展路徑片段,基于此路徑片段進(jìn)行符號執(zhí)行; 51037)、符號執(zhí)行該路徑片段,并記錄路徑約束Cnew; 51038)、利用約束求解器求解Cnew,若可解,則轉(zhuǎn)至步驟S10310);若不可解,則轉(zhuǎn)至步驟 S1039);S1039)、廢棄該路徑片段,同時(shí)跳轉(zhuǎn)至步驟S1033); 510310)、生成新的測試案例Tnew,然后跳轉(zhuǎn)至步驟S1031); 510311)、無有效測試案例輸出; 510312)、輸出該能執(zhí)行到期望執(zhí)行的目標(biāo)代碼的有效測試案例。
4.根據(jù)權(quán)利要求1所述方法,其特征在于,步驟S104)中所述阻斷分支為目標(biāo)代碼執(zhí)行后,導(dǎo)致目標(biāo)代碼執(zhí)行結(jié)果無法傳遞到輸出語句的分支。
5.根據(jù)權(quán)利要求1所述方法,其特征在于,步驟S104)中所述分支阻斷概率為:對于在目標(biāo)代碼之后執(zhí)行的某一個(gè)分支,執(zhí)行該分支后將會執(zhí)行阻斷分支的概率;取值范圍為0%-100%。
6.根據(jù)權(quán)利要求1或5所述方法,其特征在于,分支阻斷概率的計(jì)算公式為:
BP=1- Nb/Np 其中分支阻斷概率的計(jì)算方法包括:首先將待測程序的所有分支分為Ep,Eb兩個(gè)集合,Ep為所有分支的集合,Eb為阻斷分支的集合;對于某一個(gè)分支,從兩個(gè)集合中選擇子集Ep’,Eb’,分別表示在該分支之后執(zhí)行的所有分支和所有阻斷分支,然后基于Ep’,Eb’構(gòu)建可能的執(zhí)行路徑;Np為基于Ep’構(gòu)建的路徑數(shù),Nb為基于Eb’構(gòu)建的路徑數(shù);得到Nb,Np后代入公式即可得到某一分支的分支阻斷概率值BP。
7.根據(jù)權(quán)利要求1所述方法,其特征在于,步驟S105)中所述基于分支阻斷概率引導(dǎo)的約束生成算法包括: 51051)、執(zhí)行測試案例;第一次執(zhí)行步驟S103)的步驟S10312)生成的有效測試案例,從第二次開始執(zhí)行上一周期步驟S10510)生成的測試案例; 51052)、檢查目標(biāo)代碼執(zhí)行結(jié)果是否傳遞到輸出語句:如果目標(biāo)代碼執(zhí)行結(jié)果傳遞到了輸出語句,則轉(zhuǎn)至步驟S10512);否則,則轉(zhuǎn)至步驟S1053); 51053)、檢查執(zhí)行路徑上是否有可取反的分支,如果有,則轉(zhuǎn)至步驟S1054);如果沒有,則轉(zhuǎn)至步驟S1055); 51054)、取反所有可取反的分支來生成一系列待擴(kuò)展路徑片段,并將待擴(kuò)展路徑片段最后一個(gè)分支的分支阻斷概率值作為該路徑片段將執(zhí)行阻斷分支的概率值,存入第二未探測集合中; 51055)、第二未探測集合是否為空,若為空,轉(zhuǎn)至步驟S10511;若不為空,轉(zhuǎn)至步驟S1056); 51056)、從第二未探測集合中選擇一條阻斷概率最小的待擴(kuò)展路徑片段,基于此路徑片段進(jìn)行符號執(zhí)行; 51057)、符號執(zhí)行該路徑片段,并記錄路徑約束Cnew; 51058)、利用約束求解器求解Cnew,若可解,則轉(zhuǎn)至步驟S10510);若不可解,則轉(zhuǎn)至步驟 S1059); 51059)、廢棄該路徑片段,跳轉(zhuǎn)至步驟S1053); 510510)、生成新的測試案例Tnew,然后跳轉(zhuǎn)至步驟S1051); 510511)、無有效測試案例輸出; 510512)輸出該能執(zhí)行到期望執(zhí)行的目標(biāo)代碼,且執(zhí)行結(jié)果影響程序輸出結(jié)果的有效測試案例。
【文檔編號】G06F11/36GK103455421SQ201310362303
【公開日】2013年12月18日 申請日期:2013年8月19日 優(yōu)先權(quán)日:2013年8月19日
【發(fā)明者】鄭慶華, 劉烴, 王海軍, 俞樂晨, 黃小龍 申請人:西安交通大學(xué)