專利名稱:基于控制流圖遍歷和切片前向遍歷相結(jié)合的軟件測(cè)試方法
技術(shù)領(lǐng)域:
本發(fā)明涉及的是一種軟件測(cè)試方法。特別涉及回歸測(cè)試技術(shù)領(lǐng)域的一種基于控制 流圖遍歷和切片前向遍歷算法結(jié)合的選擇性回歸測(cè)試方法。軟件測(cè)試是伴隨著軟件的產(chǎn)生而產(chǎn)生的,早期的軟件開發(fā)過(guò)程中,測(cè)試的含義比 較狹窄,將測(cè)試等同于“調(diào)試”。直到1957年,軟件測(cè)試才開始與調(diào)試區(qū)別開來(lái),成為一種發(fā) 現(xiàn)軟件缺陷的活動(dòng)。目前國(guó)內(nèi)外軟件測(cè)試的研究熱點(diǎn)在軟件測(cè)試過(guò)程模型、單元測(cè)試充分 性標(biāo)準(zhǔn)、回歸測(cè)試、嵌入式軟件測(cè)試、面向?qū)ο筌浖y(cè)試、軟件質(zhì)量和復(fù)雜度度量、自動(dòng)化測(cè) 試數(shù)據(jù)生成等。其中,回歸測(cè)試是軟件測(cè)試領(lǐng)域中的一個(gè)重要研究方向。在回歸測(cè)試中,經(jīng)常面臨數(shù)量巨大的單元測(cè)試用例和復(fù)雜度很高的成員函數(shù),如 何從已存在的測(cè)試用例集中選擇測(cè)試用例或者設(shè)計(jì)新的測(cè)試用例,從而既保證回歸測(cè)試的 質(zhì)量,又提高回歸測(cè)試效率,一直是回歸測(cè)試面臨的主要問(wèn)題。目前,已經(jīng)存在幾種選擇性回歸測(cè)試方法,在這一領(lǐng)域中,測(cè)試方法的優(yōu)劣主要是 通過(guò)安全性和精確度來(lái)衡量的,安全性和精確度的定義如下1.安全性假設(shè)M是一個(gè)選擇性回歸測(cè)試方法,安全性是衡量M從測(cè)試用例集T中選擇修改 揭露測(cè)試用例的范圍。我們定義安全性是根據(jù)一個(gè)特定的程序P、修改的程序P'和測(cè)試用 例集T,具體如下定義假設(shè)T包含了 η個(gè)測(cè)試用例對(duì)于程序P和P'是修改揭露的,假設(shè)選擇這些 測(cè)試用例中的m個(gè),則M關(guān)于P、P'和T的安全性如下如果M確定地選擇了所有的修改揭露測(cè)試用例,那么我們說(shuō)M技術(shù)是安全的。如 果M選擇了一個(gè)已知的修改揭露的超集,則M也是安全的。例如,如果M選擇了所有的修改 遍歷的測(cè)試用例對(duì)于控制性回歸測(cè)試,那么M是安全。如果M是安全的,則M選擇了在T中每一個(gè)錯(cuò)誤揭露測(cè)試用例,而如果M是不安全 的,則它可能忽略一些暴露錯(cuò)誤的測(cè)試用例,此外,我們假設(shè)M1和M2是兩個(gè)選擇性回歸測(cè)試 方法,若M1比M2有更大的安全性,則M1相對(duì)M2有更大的揭露錯(cuò)誤的能力。2.精確度假設(shè)M是一個(gè)選擇性回歸測(cè)試方法,精確度衡量M忽略非修改揭露測(cè)試用例的程 度,定義精確度根據(jù)一個(gè)特定的程序P、被修改的程序P'和測(cè)試用例集T,具體如下定義假設(shè)測(cè)試用例集T中包含了 η個(gè)測(cè)試用例是非修改揭露的,假設(shè)M忽略了其 中的m個(gè)測(cè)試用例,則M關(guān)于P、P'和T的精確度如下
背景技術(shù):
ml η πφΟ 100% η = 0
ml η πφ^ 100% η = 0
與安全性相似,對(duì)于任意的M、P、P'和T,還沒(méi)有一個(gè)算法能夠決定M關(guān)于P、P' 和T的精確度,但是關(guān)于精確度,我們?nèi)匀荒軌虻玫揭恍┯杏玫慕Y(jié)論。首先,我們能夠根據(jù) 精確度來(lái)比較選擇性回歸測(cè)試方法禮和禮的優(yōu)劣;其次,我們能夠證明M是不是精確的,如 果M選擇一個(gè)非修改揭露的測(cè)試用例,則M是不精確的。精確度是很有實(shí)用價(jià)值的,因?yàn)樗饬苛艘粋€(gè)選擇性回歸測(cè)試方法M避免選擇一 些測(cè)試用例的能力,而這些測(cè)試用例在P和P'上不能產(chǎn)生不同輸出結(jié)果。一般來(lái)說(shuō),根據(jù) 精確度比較選擇性回歸測(cè)試方法,能夠識(shí)別哪一個(gè)方法執(zhí)行更少的沒(méi)必要的測(cè)試。與本發(fā)明相關(guān)的文獻(xiàn)包括[1]R. Gupta, Μ. J. Harrold, Μ. L. Soffa. An Approach to Regression Testing UsingSlicing ;[2]H. Agrawal, J. Horgan, E. Krauser, S. London. Incremental Regression Testing ;[3]Gregg Rothermel, Mary Jean Harrold. A Safe,Efficient Regression Test SelectionTechnique0接下來(lái)分析三個(gè)典型的選擇性回歸測(cè)試方法,使用上述的框架來(lái)評(píng)估和分析它 們,為了更加清晰地闡述安全性和精確度,這里用圖1來(lái)描述,在橢圓內(nèi)的所有測(cè)試用例都 是修改遍歷的,其余的測(cè)試用例則不是,在圖1中,T' modification-revealing陰影部分是修改揭露 的測(cè)試用例集,因?yàn)樾薷谋闅v的測(cè)試用例集中一部分測(cè)試用例是修改揭露的,而另一部分 卻不是修改揭露的。文獻(xiàn)[1]提出了基于數(shù)據(jù)流的選擇性回歸測(cè)試方法。安全性僅僅考慮了與變量定義使用對(duì)(define-use)有關(guān)的修改,因此它可能忽略一些 修改揭露的測(cè)試用例,例如函數(shù)調(diào)用代碼的刪除不涉及變量的定義使用,該方法不能選擇 任何測(cè)試用例;相似地,如果一個(gè)測(cè)試用例執(zhí)行一個(gè)新的或修改的輸出語(yǔ)句,但是該語(yǔ)句中 并沒(méi)有包含變量的使用,該方法就不可能選擇對(duì)應(yīng)的測(cè)試用例,即使該語(yǔ)句對(duì)于P和P'是 修改揭露的,因此數(shù)據(jù)流技術(shù)是不全的。精確度1)僅僅選擇執(zhí)行那些新增加的、被修改的或被刪除的變量定義使用對(duì)的測(cè)試用 例,所以,數(shù)據(jù)流選擇性回歸測(cè)試技術(shù)典型地忽略了非修改遍歷的測(cè)試用例;2)數(shù)據(jù)流測(cè)試技術(shù)選擇遍歷新增加的、修改的或刪除的定義使用對(duì)的測(cè)試用例, 數(shù)據(jù)流技術(shù)就可能忽略一些測(cè)試用例,該測(cè)試用例達(dá)到了一個(gè)被修改的變量定義,但是卻 沒(méi)有達(dá)到該變量的使用,這些測(cè)試用例是修改遍歷的,但是非修改揭露的。3)數(shù)據(jù)流技術(shù)可能忽略掉修改揭露的測(cè)試用例,例如,當(dāng)代碼的刪除不涉及到變 量定義使用時(shí)。文獻(xiàn)[2]定義了采用程序切片技術(shù)來(lái)實(shí)現(xiàn)選擇性回歸測(cè)試的方法。包括執(zhí)行切 片、動(dòng)態(tài)切片、相關(guān)切片和近似相關(guān)切片四種切片類型。安全性1)當(dāng)程序P中包含了修改的斷言語(yǔ)句時(shí),動(dòng)態(tài)切片技術(shù)可能忽略一些修改揭露的 測(cè)試用例,所以該技術(shù)是不安全的,;當(dāng)代碼的修改沒(méi)有改變程序P的控制流圖或增加新的變量定義,其它的切片技術(shù)是安全的。2)在程序P中增加斷言語(yǔ)句或賦值語(yǔ)句將會(huì)對(duì)切片技術(shù)的安全性產(chǎn)生不利影響, 例如在P中增加一個(gè)新的賦值語(yǔ)句S,因?yàn)槌绦蚯衅夹g(shù)獲得的切片僅僅是包含在程序修 改之前出現(xiàn)在程序P中的語(yǔ)句,任何測(cè)試用例的切片都不會(huì)包含語(yǔ)句S。但是,在測(cè)試程序 P'時(shí),在τ中任何能夠執(zhí)行到S語(yǔ)句的測(cè)試用例都是修改揭露的,但是切片技術(shù)并沒(méi)有選 擇這些測(cè)試用例,所以切片技術(shù)是不安全的。精確度當(dāng)代碼修改是非結(jié)構(gòu)化的,并且沒(méi)有新代碼的增加,切片技術(shù)僅僅選擇修改遍歷 的測(cè)試用例。通過(guò)限制性地選擇影響程序輸出的測(cè)試用例,動(dòng)態(tài)切片技術(shù)和相關(guān)切片技術(shù) 在不同程度上排除了一些是修改遍歷而不是修改揭露的測(cè)試用例。但是當(dāng)程序P'中包含 結(jié)構(gòu)化的改變,該技術(shù)就可能選擇非修改遍歷的測(cè)試用例。文獻(xiàn)[3]提出了一個(gè)基于控制流圖遍歷技術(shù)的選擇性回歸測(cè)試方法。安全性控制流圖遍歷技術(shù)選擇了所有的修改遍歷的測(cè)試用例,對(duì)于控制性回歸測(cè)試,該 技術(shù)是安全的。精確度控制流圖遍歷技術(shù)并不是100%的精確的??刂屏鲌D具有一個(gè)多次被訪問(wèn)的節(jié)點(diǎn) (multiply-visited-node)特性,同時(shí)當(dāng)程序P和P'中不含有該特性時(shí),該技術(shù)精確地選 擇了修改遍歷的測(cè)試用例;當(dāng)程序P和P'中含有該特性時(shí),該技術(shù)將可能選擇了一些非修 改遍歷的測(cè)試用例。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種同時(shí)保證回歸測(cè)試用例選擇的安全性和精確度的基 于控制流圖遍歷和切片前向遍歷相結(jié)合的軟件測(cè)試方法。本發(fā)明的目的是通過(guò)如下步驟實(shí)現(xiàn)的A.分別創(chuàng)建原有程序及修改后的程序控制流圖G和G',對(duì)回歸測(cè)試之前的測(cè)試 用例集T中每一個(gè)測(cè)試用例,建立其與執(zhí)行路徑的對(duì)應(yīng)關(guān)系;B.對(duì)G和G'同步進(jìn)行深度優(yōu)先搜索遍歷,比較每一個(gè)遍歷能夠到達(dá)的語(yǔ)句節(jié)點(diǎn); 對(duì)于代碼中變量定義的改變,使用前向遍歷算法只識(shí)別所有直接或間接被影響的變量定義 使用對(duì)Vdrfim ,在T中選擇遍歷到變量定義使用對(duì)的測(cè)試用例;對(duì)于比較過(guò)程中其他 的節(jié)點(diǎn)N和N'的語(yǔ)句詞法不一致的情況,在T中選擇所有能夠達(dá)到該節(jié)點(diǎn)的測(cè)試用例;C.列出從T中選出的所有適合修改后程序的測(cè)試用例。上述技術(shù)方案中,所述步驟B進(jìn)一步包括Bi.根據(jù)步驟B中遍歷得到的定義改變的變量,初始化其變量定義使用對(duì)集合,并 記錄該語(yǔ)句所在的節(jié)點(diǎn)位置;B2.繼續(xù)向前遍歷1)若發(fā)現(xiàn)在一個(gè)語(yǔ)句中使用步驟B中遍歷到的變量的值,將其放入定義使用對(duì)集 合中;2)若發(fā)現(xiàn)在一個(gè)語(yǔ)句中使用的變量控制依賴于步驟B中遍歷到的變量的值,將其放入定義使用對(duì)集合中;3)若發(fā)現(xiàn)在一個(gè)語(yǔ)句中,步驟B遍歷得到的變量有一個(gè)新的定義,停止在該路徑 上的遍歷;B3.返回步驟Bl記錄的節(jié)點(diǎn)位置繼續(xù)執(zhí)行步驟B。本發(fā)明在基于控制流圖遍歷的選擇性回歸測(cè)試方法的基礎(chǔ)上,結(jié)合切片前向遍歷 算法,提出了一種改進(jìn)的選擇性回歸測(cè)試方法,使其在保持基于控制流圖遍歷的選擇性回 歸測(cè)試方法的完全安全的優(yōu)點(diǎn)同時(shí),進(jìn)一步改提高回歸測(cè)試用例選擇的精確度。本發(fā)明的方法區(qū)別于現(xiàn)有方法的顯著特征在于對(duì)于代碼中存在的變量定義的改 變,只需識(shí)別所有直接或間接被影響的變量定義使用對(duì)Vdrfim Vuse即可,而不需選擇所有 通過(guò)該變量值定義的測(cè)試用例。直接被影響的變量定義使用對(duì)是指主要由于變量定義值的 直接改變,例如定義語(yǔ)句χ = 2被直接改為χ = 3,代碼改變并沒(méi)有引入新的定義使用對(duì),但 是必須重新測(cè)試所有依賴變量χ值的定義使用對(duì);間接被影響的變量定義使用對(duì)是指某變 量定義使用對(duì)的變量定義值依賴于被改變的變量值,或者是某變量定義使用對(duì)控制依賴于 被改變的變量。選擇遍歷這些變量定義使用對(duì)的測(cè)試用例,即選擇了所有的修改遍歷的測(cè) 試用例,因而也保證了其安全性。本發(fā)明的方法的有益效果主要體現(xiàn)在本發(fā)明中,對(duì)基于控制流圖遍歷的選擇性 回歸測(cè)試方法的遍歷策略進(jìn)行改進(jìn),對(duì)于代碼中變量定義的改變,引用切片前向遍歷算法, 識(shí)別所有直接或間接被影響的變量定義使用對(duì) v_,并只選擇遍歷到這些變量定義 使用對(duì)的測(cè)試用例,避免了選擇所有通過(guò)某節(jié)點(diǎn)的測(cè)試用例而造成的測(cè)試時(shí)間和效力的消 耗。由于改進(jìn)只是針對(duì)變量定義的修改,不考慮代碼的刪除等,所以本發(fā)明公開的方法不會(huì) 對(duì)安全性產(chǎn)生不利的影響,并且在一定范圍內(nèi)提高了測(cè)試用例選擇的精確度。
圖1為測(cè)試用例集關(guān)系圖;圖2為本發(fā)明公開的選擇性回歸測(cè)試方法的具體實(shí)施流程圖;圖3為本發(fā)明公開的選擇性回歸測(cè)試方法選擇的回歸測(cè)試用例集圖。
具體實(shí)施例方式下面結(jié)合附圖舉例對(duì)本發(fā)明做更詳細(xì)地描述結(jié)合圖2,主要包含以下幾個(gè)步驟步驟1 分別創(chuàng)建原有程序及修改后的程序控制流圖G和G',對(duì)回歸測(cè)試之前的 測(cè)試用例集T中每一個(gè)測(cè)試用例,建立其與執(zhí)行路徑的對(duì)應(yīng)關(guān)系。步驟2 對(duì)G和G'同步深度優(yōu)先搜索進(jìn)行遍歷,比較每一個(gè)遍歷能夠到達(dá)的語(yǔ)句 節(jié)點(diǎn)。對(duì)于改變變量定義的節(jié)點(diǎn),跳至步驟3;對(duì)于比較過(guò)程中節(jié)點(diǎn)N和N'的語(yǔ)句詞法不 一致的情況,在T中選擇所有能夠達(dá)到該節(jié)點(diǎn)的測(cè)試用例。步驟3 首先對(duì)前向遍歷算法ForwardWalk (Pairs)中的使用的變量和過(guò)程量進(jìn)行 說(shuō)明算法 Forwardffalk (Pairs)輸入Pairs :(Si,Vi)受影響的變量定義的集合,其中Si為變量Vi定義的語(yǔ)句,Vi為變量。輸出 ValueUseTriples {(s, u, ν)}聲明In[i],Out [i],kill,NewIn 變量的集合Worklist, Cd[i],OldCd, Affected Preds 語(yǔ)句的集合s 語(yǔ)句集ν 原始變量集u 被改變的變量集k,n:語(yǔ)句i,x:節(jié)點(diǎn)DefsOfV[i] (s, ν)定義的集合Pred (i),Succ (i)程序控制流圖中節(jié)點(diǎn)i的前驅(qū)、后繼節(jié)點(diǎn)Def(i)語(yǔ)句i定義的變量具體如下對(duì)于改變變量定義的節(jié)點(diǎn),初始化變量定義使用對(duì)集合ValueUseTriples {(s, u,ν)},令ValueUseTripks = 0。得到受影響的變量定義的集合Pairs中每一個(gè)(s,ν)中s的 直接后繼節(jié)點(diǎn)的深度優(yōu)先搜索工作列表Worklist = ndepth_firet+W0rkliSt。將控制流圖中所 有不在Pairs中的節(jié)點(diǎn)Iii的Infci]和Outfci]初始化為0 ;在Pairs中的節(jié)點(diǎn)s的In[s] 初始化為0,Out [s]初始化為{(s,ν)}。對(duì)于每一個(gè)語(yǔ)句節(jié)點(diǎn)η e G,In和Out集合包含了 定義值被修改或影響的變量,采用一個(gè)二元值用(d,ρ)表示,d為變量的位置,ρ為被改變 或影響的變量,并且這些變量的使用將在后續(xù)遍歷過(guò)程中被發(fā)現(xiàn),集合In[n]表示在節(jié)點(diǎn)η 之前變量的使用已經(jīng)被發(fā)現(xiàn),Out [η]表示在節(jié)點(diǎn)η之后變量的使用將會(huì)被發(fā)現(xiàn)。步驟4 循環(huán)處理Worklist中的每個(gè)節(jié)點(diǎn),如果^0A/樹=0則算法停止,否則從
Worklist中取出第一個(gè)語(yǔ)句節(jié)點(diǎn)η,定義NewIn 二。如果New〗n φ Ιη[η],則
In [η] =NewIn,0WCc/= U。
pe Tea(n)1)如果OWOZ-OZ(X) ,則所有 k e (OldCd-Cd(n)) Π Affected Preds 的語(yǔ) 句,式(1)、(2)、(3)成立,如下In[n] = In[n]-{(k,ViM(1)AffectedPreds = AffectedPreds-{k}(2)ValueUseTriples = ValueUseTriples-{(k, u, ν)} (3)對(duì)于所有(d,ν) e DefsOfV[k]的定義對(duì),式⑷成立,如下ValueUseTriples = ValueUseTriples U {(d, u, ν)} (4)2)如果語(yǔ)句η計(jì)算使用了(d,ν) e In [η]的變量ν,式(5)成立,如下ValueUseTriples = ValueUseTriples U {(d, η, ν)} (5)如果在該路徑上發(fā)現(xiàn)了變量ν的新定義,則停止(d,v)在該路徑上的搜索,并且定 義 kill = {(χ, Def (η)) (χ, Def (η)) e Ιη[η]},式(6)成立,如下Out [η] = (In [η]-kill) U {η, Def (η)}(6)3)如果語(yǔ)句η斷言使用了(d,ν) e In [η]的變量ν,式(7)成立,如下ValueUseTriples = ValueUseTriples U {(d, η, ν)} (7)
再計(jì)算出達(dá)到該斷言語(yǔ)句卻不在In[n]中的定義集合,式(8)、(9)、(10)、(11)成 立,如下DefsOfV[n] = Backwardffalk(η, {ν})-In[η](8)In [η] = In [η] U {(η, Vi) (d, Vi) e DefOfV [η]} (9)Out [η] = In [η](10)Affected Preds = Affected Preds U {η}(11)4)如果語(yǔ)句11定義了一個(gè)變量?,并且0/|>2]門4#^仗^^1^論#0,則Out [η]= Out[η] U {(η, Def (η))};5)否則 Out [η] = In [η];6)如果* 0,將η的所有后繼節(jié)點(diǎn)χ e Succ (η)的深度優(yōu)先搜索加入工作列 表 Worklist = xdepth_first+Workl i st ;7)如果爐w妨;y/ = 0則算法停止,返回ValueUseTriples,否則回到1)。步驟5 在T中選擇遍歷ValueUseTriples集合中所有變量定義使用對(duì)的測(cè)試用 例;步驟6 返回至步驟2中變量定義改變的節(jié)點(diǎn)位置,繼續(xù)基于控制流圖的深度優(yōu)先 搜索遍歷;步驟7 遍歷結(jié)束,列出從T中選出的所有適合修改后程序的測(cè)試用例。以下通過(guò)實(shí)驗(yàn)來(lái)比較研究本發(fā)明公開的方法與以文獻(xiàn)[3]方法的精確度和安全 性,證明了本發(fā)明公開的方法在保證測(cè)試用例選擇安全性的情況下,提高了精確度,比較結(jié) 果詳見表1。表1文獻(xiàn)[3]方法和本發(fā)明公開的方法測(cè)試用例選擇對(duì)照表 實(shí)驗(yàn)結(jié)果分析總結(jié)1)當(dāng)被測(cè)試函數(shù)的復(fù)雜度越大——圈復(fù)雜度和節(jié)點(diǎn)數(shù),如calcup、draw_ft、draw_ feature和drawjoimding等函數(shù),它們的復(fù)雜度都非常高。當(dāng)僅僅在函數(shù)入口改變變量值 時(shí),本發(fā)明公開的方法能夠較大幅度的提高基于控制流圖遍歷技術(shù)的精確度。2)當(dāng)被測(cè)試函數(shù)的復(fù)雜度較小時(shí),函數(shù)內(nèi)部的嵌套語(yǔ)句較少,或者被修改得定義值存在斷言使用時(shí),如getdeg、kp_sub、putspace和get_text_cmds等函數(shù),本發(fā)明公開的 方法與控制流圖遍歷技術(shù)的精確度基本一致。3)當(dāng)被測(cè)試函數(shù)內(nèi)的全局變量值被修改,而在函數(shù)內(nèi)不存在引用時(shí),如getcmds 和get_Chinese_Cmds函數(shù),本發(fā)明公開的方法不會(huì)選擇任何測(cè)試用例,而基于控制流圖遍 歷算法會(huì)選擇所有的測(cè)試用例。綜上所述,本發(fā)明公開的方法能夠在一定范圍內(nèi)提高基于控制流圖遍歷的算法的 精確度,如圖3所示,由于本發(fā)明公開的方法只是針對(duì)變量定義的修改,不考慮代碼的刪除 等,所以不會(huì)對(duì)安全性產(chǎn)生不利的影響。
權(quán)利要求
一種基于控制流圖遍歷和切片前向遍歷相結(jié)合的軟件測(cè)試方法,其特征是A.分別創(chuàng)建原有程序及修改后的程序控制流圖G和G′,對(duì)回歸測(cè)試之前的測(cè)試用例集T中每一個(gè)測(cè)試用例,建立其與執(zhí)行路徑的對(duì)應(yīng)關(guān)系;B.對(duì)G和G′同步進(jìn)行深度優(yōu)先搜索遍歷,尋找語(yǔ)句詞法不一致的節(jié)點(diǎn)N和N′,判斷節(jié)點(diǎn)N和N′是否為改變變量定義的節(jié)點(diǎn);如果是,則使用前向遍歷算法識(shí)別所有直接或間接被影響的變量定義使用對(duì)vdefine~vuse,并在T中選擇變量定義使用對(duì)的測(cè)試用例;如果不是,則直接在T中選擇所有能夠達(dá)到該節(jié)點(diǎn)的測(cè)試用例;C.列出從T中選出的所有適合修改后程序的測(cè)試用例。
2.根據(jù)權(quán)利要求1所述的基于控制流圖遍歷和切片前向遍歷相結(jié)合的軟件測(cè)試方法, 其特征是所述步驟B進(jìn)一步包括Bi.判斷步驟B中尋找到的語(yǔ)句詞法不一致的節(jié)點(diǎn)N和N',并判斷是否為改變變量定 義的節(jié)點(diǎn),如果是則執(zhí)行B2 ;如果不是,則繼續(xù)對(duì)G和G'同步進(jìn)行深度優(yōu)先搜索遍歷,直至 遍歷結(jié)束;B2.根據(jù)步驟B中遍歷得到的定義改變的變量,初始化其變量定義使用對(duì)集合,并記錄 該語(yǔ)句所在的節(jié)點(diǎn)位置;B3.識(shí)別所有直接或間接被影響的變量定義使用對(duì),具體如下1)若發(fā)現(xiàn)在一個(gè)語(yǔ)句中使用了步驟B中遍歷到的變量的值,將其放入變量定義使用對(duì) 集合中;2)若發(fā)現(xiàn)在一個(gè)語(yǔ)句中使用的變量依賴于步驟B中遍歷到的變量的值,將其放入變量 定義使用對(duì)集合中;3)若發(fā)現(xiàn)在一個(gè)語(yǔ)句中,步驟B遍歷得到的變量有一個(gè)新的定義,將其放入變量定義 使用對(duì)集合中,并停止在該路徑上的遍歷;B4.選擇T中遍歷到變量定義使用對(duì)的測(cè)試用例,繼續(xù)對(duì)G和G'同步進(jìn)行深度優(yōu)先搜 索遍歷,直至遍歷結(jié)束。
全文摘要
本發(fā)明提供的是一種基于控制流圖遍歷和切片前向遍歷相結(jié)合的軟件測(cè)試方法。是對(duì)基于控制流圖遍歷的選擇性回歸測(cè)試方法的遍歷策略進(jìn)行改進(jìn),對(duì)于代碼中變量定義的改變,引用切片前向遍歷算法,識(shí)別所有直接或間接被影響的變量定義使用對(duì)vdefine~vuse,并只選擇遍歷到這些變量定義使用對(duì)的測(cè)試用例,避免了選擇所有通過(guò)某節(jié)點(diǎn)的測(cè)試用例而造成的測(cè)試時(shí)間和效力的消耗。由于策略改進(jìn)和算法引入只是針對(duì)變量定義的修改,不考慮代碼的刪除,所以本發(fā)明公開的方法不會(huì)對(duì)安全性產(chǎn)生不利的影響,并且在一定范圍內(nèi)提高了測(cè)試用例選擇的精確度。
文檔編號(hào)G06F11/36GK101916222SQ20101024774
公開日2010年12月15日 申請(qǐng)日期2010年8月9日 優(yōu)先權(quán)日2010年8月9日
發(fā)明者劉廠, 張振興, 李剛, 沈志峰, 高峰, 高昕睿 申請(qǐng)人:哈爾濱工程大學(xué)