專利名稱:一種基于部分多重覆蓋的回歸測(cè)試用例篩選方法
技術(shù)領(lǐng)域:
本發(fā)明涉及回歸測(cè)試下軟件系統(tǒng)的測(cè)試用例篩選方法,特別涉及軟件系統(tǒng)開(kāi)發(fā)和 升級(jí)中存在大量測(cè)試用例的情況下,針對(duì)需要回歸測(cè)試的系統(tǒng)組件,通過(guò)達(dá)到充分有效的 測(cè)試需求覆蓋來(lái)篩選測(cè)試用例,降低回歸測(cè)試成本。
背景技術(shù):
軟件系統(tǒng)不管是在開(kāi)發(fā)過(guò)程中還是在發(fā)布以后,總是面臨不斷的修正和升級(jí)。在 每一次修改后,為確保軟件系統(tǒng)未變更的功能和組件沒(méi)有受到當(dāng)前修改的負(fù)面影響,需要 對(duì)軟件系統(tǒng)進(jìn)行充分的回歸測(cè)試。由于復(fù)用的軟件組件沒(méi)有得到充分的回歸測(cè)試,曾導(dǎo)致 阿里亞娜5型火箭發(fā)射失敗,造成巨大的損失。這說(shuō)明回歸測(cè)試的必要性。在當(dāng)前流行的 增量式開(kāi)發(fā)和快速迭代式開(kāi)發(fā)中,新版本的連續(xù)發(fā)布需要頻繁的回歸測(cè)試;在敏捷(極限) 編程環(huán)境下,更要求軟件系統(tǒng)每天都通過(guò)若干次回歸測(cè)試。這使得回歸測(cè)試成本在軟件開(kāi) 發(fā)成本中占據(jù)很大比重。如何有效選擇回歸測(cè)試策略從而能夠以低成本高質(zhì)量完成軟件系 統(tǒng)的回歸測(cè)試是本發(fā)明需要考慮的問(wèn)題。直接決定回歸測(cè)試成本的測(cè)試策略是測(cè)試用例庫(kù)的維護(hù)和回歸測(cè)試集的選擇操 作。在軟件系統(tǒng)的開(kāi)發(fā)和升級(jí)過(guò)程中,不同的開(kāi)發(fā)團(tuán)隊(duì)和人員不斷增添新的測(cè)試用例到測(cè) 試用例庫(kù),這使得庫(kù)中存在大量冗余的測(cè)試用例。如何有效刪除冗余的測(cè)試用例,并根據(jù)軟 件系統(tǒng)當(dāng)前的變更選擇合適的回歸測(cè)試集是降低回歸測(cè)試成本并保證回歸測(cè)試質(zhì)量的關(guān) 鍵所在。一個(gè)測(cè)試用例是否冗余決定于它覆蓋的測(cè)試需求。一個(gè)被測(cè)軟件可以視為測(cè)試需 求的集合。測(cè)試需求定義為被測(cè)軟件的測(cè)試覆蓋單元,例如從結(jié)構(gòu)角度,測(cè)試需求可以定義 為語(yǔ)句塊、程序分支、或者變量的定義-引用對(duì);從功能角度,測(cè)試需求可以定義為輸入的 等價(jià)類劃分、輸出的等價(jià)類劃分、或者功能項(xiàng)等。當(dāng)前較多的考慮是從結(jié)構(gòu)角度定義測(cè)試需 求,例如語(yǔ)句塊或程序分支。測(cè)試用例約簡(jiǎn)技術(shù)被用于刪除冗余的測(cè)試用例和選擇合適的回歸測(cè)試集。其原理 是每個(gè)測(cè)試用例都覆蓋一個(gè)測(cè)試需求集合,可以選擇最少數(shù)量的測(cè)試用例集,只要它們覆 蓋的測(cè)試需求集合的并集等于被測(cè)軟件,那么這個(gè)選定集合就可以用于組成回歸測(cè)試集或 者構(gòu)成精簡(jiǎn)后的測(cè)試用例庫(kù)。傳統(tǒng)約簡(jiǎn)技術(shù)的問(wèn)題是如果用于刪除測(cè)試用例庫(kù)中冗余的 測(cè)試用例,則因?yàn)楸A舻臏y(cè)試用例數(shù)量太少,回歸測(cè)試的缺陷檢測(cè)能力不能得到保證;如果 用于回歸測(cè)試集選擇,則因?yàn)榧s簡(jiǎn)后的測(cè)試用例集覆蓋了所有的測(cè)試需求,而當(dāng)前回歸測(cè) 試往往僅需關(guān)注被修改的組件,于是又選擇了過(guò)多的測(cè)試用例,增加了回歸測(cè)試成本。當(dāng)前軟件系統(tǒng)的修改非常頻繁,需要采用面向部分覆蓋的回歸測(cè)試;即只針對(duì)修 改的軟件組件選擇回歸測(cè)試集并達(dá)到對(duì)相關(guān)測(cè)試需求的充分覆蓋,而避開(kāi)其他不相干的測(cè) 試需求。這種處理有以下優(yōu)點(diǎn)其一缺陷修復(fù)向來(lái)不是一次性完成,避開(kāi)未修復(fù)的缺陷組件 可以減少“預(yù)防性”代碼并規(guī)避未修復(fù)缺陷的干擾;其二軟件系統(tǒng)總是包含復(fù)用和購(gòu)買(mǎi)的組 件,這些組件的代碼或者不可見(jiàn),或者其修改不可控,繞開(kāi)這些組件可以完成更有效的回歸 測(cè)試;其三有一些組件可能尚在開(kāi)發(fā)或修改中,能夠避開(kāi)這些未完成組件可以實(shí)施更早的回歸測(cè)試。
發(fā)明內(nèi)容
本發(fā)明的主要目的是針對(duì)軟件系統(tǒng)回歸測(cè)試時(shí)的測(cè)試用例庫(kù)維護(hù)問(wèn)題和回歸測(cè) 試集選擇問(wèn)題,提出一種基于部分多重覆蓋的回歸測(cè)試用例篩選方法,一方面降低測(cè)試用 例庫(kù)的冗余度同時(shí)保證用例庫(kù)的缺陷檢測(cè)能力;另一方面針對(duì)修改組件選擇回歸測(cè)試用 例,減少回歸測(cè)試集的規(guī)模,在保證回歸測(cè)試質(zhì)量前提下降低回歸測(cè)試成本。為實(shí)現(xiàn)本發(fā)明所述目的,本發(fā)明采用如下的步驟1)首先根據(jù)軟件系統(tǒng)特征和測(cè)試用例庫(kù)的歷史數(shù)據(jù),構(gòu)建測(cè)試需求覆蓋矩陣;具 體過(guò)程為將被測(cè)軟件系統(tǒng)視為測(cè)試需求集合R,測(cè)試用例庫(kù)視為測(cè)試用例集合T,根據(jù)測(cè) 試用例庫(kù)中測(cè)試用例的歷史執(zhí)行數(shù)據(jù),構(gòu)筑測(cè)試覆蓋矩陣△ (R,T);根據(jù)△ (R,T),給定測(cè) 試用例、,可了解該測(cè)試用例的覆蓋需求集& ;給定測(cè)試需求可了解該測(cè)試需求的執(zhí)行 用例集凡。2)針對(duì)修改組件,將測(cè)試需求集R劃分為關(guān)注集CR和無(wú)關(guān)集R-CR,其中關(guān)注集CR 是與當(dāng)前軟件修改相關(guān)的測(cè)試需求集合,包含本次回歸測(cè)試必須充分覆蓋的測(cè)試需求;而 無(wú)關(guān)集R-CR是與當(dāng)前修改無(wú)關(guān)的測(cè)試需求集合;關(guān)注集需要被充分測(cè)試,以保證回歸測(cè)試 的質(zhì)量;而無(wú)關(guān)集可以盡量避開(kāi),以降低回歸測(cè)試的成本。3)采用HATS算法選擇回歸測(cè)試集,針對(duì)關(guān)注集CR,選擇最少數(shù)量的測(cè)試用例充分 覆蓋關(guān)注集中的所有測(cè)試需求;針對(duì)無(wú)關(guān)集R-CR,選擇對(duì)無(wú)關(guān)集中測(cè)試需求覆蓋少的測(cè)試 用例;通常一個(gè)較大(復(fù)雜)的測(cè)試用例會(huì)同時(shí)覆蓋較多的關(guān)注需求和無(wú)關(guān)需求,HATS算 法設(shè)定一個(gè)權(quán)值,平衡考慮對(duì)關(guān)注需求的覆蓋和對(duì)無(wú)關(guān)需求的避免。4)對(duì)于測(cè)試用例庫(kù)的維護(hù),采用基于風(fēng)險(xiǎn)或操作剖面定義的測(cè)試需求多重覆蓋策 略;按照操作剖面,不同的測(cè)試需求對(duì)使用者的重要程度或使用頻率互不相同。對(duì)較重要的 和使用頻率較高的測(cè)試需求,需要更多的覆蓋次數(shù)。另外不同測(cè)試需求所代表的風(fēng)險(xiǎn)-即 可疑程度或關(guān)鍵程度等也各不相同,其中需求關(guān)鍵程度可采用卡諾(Kano)模型描述。風(fēng)險(xiǎn) 較大的測(cè)試需求也需要更多的覆蓋次數(shù)。5)根據(jù)給定的多重覆蓋策略,采用MHATS算法篩選測(cè)試用例集,MHATS算法重復(fù)調(diào) 用HATS算法,直到所有測(cè)試需求被覆蓋指定次數(shù)。實(shí)例驗(yàn)證表明基于多重覆蓋策略維護(hù)測(cè) 試用例庫(kù),既可以減少用例庫(kù)的冗余度,又可以有效保證用例庫(kù)的缺陷檢測(cè)能力。上述步驟2)中集合操作“_”的含義定義如下Α-Β = {Χ\Χ&Α/^Χ^Β} (Α 和 B 是兩個(gè)集合)。上述步驟3)的HATS算法遵循啟發(fā)式貪婪搜索模式,采用不斷迭代的方法,一次選 擇一個(gè)或多個(gè)局部最優(yōu)(如覆蓋最多數(shù)量關(guān)注需求或者覆蓋最少數(shù)量無(wú)關(guān)需求)的測(cè)試用 例,直到關(guān)注集CR中所有測(cè)試需求都被覆蓋;HATS算法包括三個(gè)測(cè)試用例篩選策略策略1.必選策略,如果當(dāng)前關(guān)注集cur_CR中存在測(cè)試需求1>1^僅被當(dāng)前用例集 cur_T中唯一的一個(gè)測(cè)試用例、覆蓋,則用例、必然被選入當(dāng)前選擇集cur_Select ;策略2.替代策略,如果當(dāng)前用例集cur_T中存在兩個(gè)測(cè)試用例、和tk,tj覆蓋的 當(dāng)前關(guān)注集cur_CR中需求子集包含tk覆蓋的cur_CR中需求子集,且、覆蓋的無(wú)關(guān)需求子 集被tk覆蓋的無(wú)關(guān)需求子集包含,則用例tk可以從集合cur_T中刪除;
策略3.優(yōu)選策略,選擇當(dāng)前用例集cur_T中最合適的測(cè)試用例、,tj覆蓋“盡可 能多”的當(dāng)前關(guān)注集cur_CR中測(cè)試需求,同時(shí)覆蓋“盡可能少”的無(wú)關(guān)集中測(cè)試需求。策略3所述的優(yōu)選策略定義兩個(gè)指標(biāo)貢獻(xiàn)指標(biāo)和損益指標(biāo);測(cè)試用例^的貢獻(xiàn) 指標(biāo)ζ j的定義公式為
IRi^cur CRl[=M-
J \cur_CR\表示、覆蓋的關(guān)注需求占集合cur_CR的比例;用例、的損益指標(biāo)υ j的定義公 式為
Ii , η -Ci )U. =1-L^7-——
3|i -Ci |表示、未覆蓋的無(wú)關(guān)需求占無(wú)關(guān)需求集的比例;為綜合考慮用例、對(duì)關(guān)注集的覆 蓋和對(duì)無(wú)關(guān)集的避免,引入權(quán)重因子α (0彡α彡1),定義、的效用指標(biāo)ω」為其貢獻(xiàn)指 標(biāo)和損益指標(biāo)的加權(quán)和,公式如下Coj = α · ζ j+(l-a ) · υ JO因子α越大,表示越關(guān)注貢獻(xiàn)指標(biāo),即對(duì)關(guān)注需求的覆蓋越重視;α越小,表示越 關(guān)注損益指標(biāo),即對(duì)無(wú)關(guān)需求的避免越重視。優(yōu)選策略選擇集合cur_T中具有最大效用指 標(biāo)值的測(cè)試用例。實(shí)例表明同全覆蓋用例集約簡(jiǎn)相比較,HATS算法可以進(jìn)一步較大程度降 低約簡(jiǎn)后用例集規(guī)模,從而節(jié)約測(cè)試成本。上述步驟4)的多重覆蓋策略的具體過(guò)程為針對(duì)測(cè)試需求集R定義需求覆蓋表 Θε, κ是一個(gè)二元組集合,定義公式如下Θε = {<ri; θ G R Λ θ i 彡 0 Λ θ i 彡 | Ti |}對(duì)測(cè)試需求集合R中的每一個(gè)測(cè)試需求ri;有且僅有一個(gè)二元組θ ρ屬于 Θκ,其中Qi是需求巧的覆蓋次數(shù)要求,即至少需要Qi個(gè)不同的測(cè)試用例覆蓋需求ri,Ti 表示需求!^的執(zhí)行用例集,需求覆蓋表Θκ通過(guò)軟件系統(tǒng)的操作剖面或者卡諾模型來(lái)導(dǎo)出。上述步驟5)的MHATS算法具體過(guò)程為給定需求覆蓋表θ E, MHATS算法在每一次 迭代中,將尚未滿足覆蓋次數(shù)要求的測(cè)試需求用于組成關(guān)注集CR,已滿足的測(cè)試需求則組 成無(wú)關(guān)集,以此調(diào)用HATS算法。這樣處理可以使集合R中所有測(cè)試需求最終被覆蓋的次數(shù) 盡量符合覆蓋表約定。除用于測(cè)試用例庫(kù)維護(hù)外,MHATS算法也可以用于回歸測(cè)試集 選擇。本發(fā)明方法在測(cè)試用例約簡(jiǎn)過(guò)程中通過(guò)多重覆蓋策略來(lái)保留冗余的測(cè)試用例,從 而在精簡(jiǎn)測(cè)試用例庫(kù)時(shí)維持測(cè)試用例庫(kù)的缺陷檢測(cè)能力;另外在選擇回歸測(cè)試集時(shí)面向部 分覆蓋,同時(shí)避免覆蓋不相干的測(cè)試需求,這樣處理可以使一些復(fù)雜的覆蓋大量測(cè)試需求 的測(cè)試用例不被選入回歸測(cè)試集,從而在進(jìn)一步減少測(cè)試用例數(shù)量的同時(shí),降低測(cè)試執(zhí)行 和分析的成本。
圖1是基于部分多重覆蓋的回歸測(cè)試用例篩選方法的技術(shù)框架,圖2是一個(gè)簡(jiǎn)單示例程序及其測(cè)試用例庫(kù)的測(cè)試歷史數(shù)據(jù),
6
圖3是圖2中示例程序?qū)?yīng)的測(cè)試需求覆蓋矩陣,圖4是HATS算法的流程圖,圖5是HATS算法中優(yōu)選策略的流程圖,圖6是卡諾(Kano)模型中需求類型示意圖,圖7是MHATS算法的流程圖,圖8是HATS算法測(cè)試用例集約簡(jiǎn)效果同全覆蓋約簡(jiǎn)的比較圖,圖9是MHATS算法測(cè)試用例集約簡(jiǎn)的效果圖,圖10是MHATS算法約簡(jiǎn)用例集的缺陷檢測(cè)能力同單覆蓋約簡(jiǎn)的比較圖。
具體實(shí)施例方式圖1所示為基于部分多重覆蓋的回歸測(cè)試用例篩選方法的技術(shù)框架??蚣艿妮?入是被測(cè)軟件系統(tǒng)和回歸測(cè)試用例庫(kù);輸出是針對(duì)當(dāng)前軟件修改所選擇的回歸測(cè)試集,以 及精簡(jiǎn)后的回歸測(cè)試用例庫(kù)。技術(shù)框架分成五個(gè)部分首先根據(jù)被測(cè)軟件組成和回歸測(cè)試 用例庫(kù)的歷史數(shù)據(jù)構(gòu)建測(cè)試覆蓋矩陣。接下來(lái)考慮兩個(gè)應(yīng)用場(chǎng)景其一是根據(jù)當(dāng)前軟件修 改選擇合適的回歸測(cè)試集;其二是約簡(jiǎn)回歸測(cè)試用例庫(kù),刪除冗余的測(cè)試用例??紤]場(chǎng)景 一,第一步根據(jù)當(dāng)前修改組件將測(cè)試用例集劃分為關(guān)注需求集和無(wú)關(guān)需求集;第二步運(yùn)用 HATS算法選擇回歸測(cè)試集;輸出是針對(duì)當(dāng)前修改的回歸測(cè)試集??紤]場(chǎng)景二,第一步根據(jù) 軟件組成和需求特點(diǎn)建立多重覆蓋策略;第二步運(yùn)用MHATS算法約簡(jiǎn)回歸測(cè)試用例庫(kù);輸 出是精簡(jiǎn)后的回歸測(cè)試用例庫(kù)。其中多重覆蓋策略可應(yīng)用于場(chǎng)景一,在測(cè)試成本和時(shí)間允 許的情況下補(bǔ)充回歸測(cè)試用例,提高回歸測(cè)試的質(zhì)量。首先根據(jù)被測(cè)軟件組成和回歸測(cè)試用例庫(kù)的歷史測(cè)試數(shù)據(jù)構(gòu)建測(cè)試覆蓋矩陣。被 測(cè)軟件可以認(rèn)為是一個(gè)測(cè)試需求集合R= Iivr2,...!^,其中ri代表第i個(gè)測(cè)試需求。測(cè) 試需求是被測(cè)程序的測(cè)試覆蓋單元,一般從軟件結(jié)構(gòu)角度可以定義為語(yǔ)句塊、程序分支、或 者變量定義_引用對(duì);從功能角度可以定義為輸入的等價(jià)類劃分、輸出的等價(jià)類劃分、或者 功能項(xiàng)等。從功能角度到結(jié)構(gòu)角度可以定義映射關(guān)系,如輸入空間劃分出的一個(gè)等價(jià)類可 以映射到一個(gè)語(yǔ)句塊或程序分支的集合?;貧w測(cè)試用例庫(kù)是一個(gè)測(cè)試用例集合T = It1, t2,. . .,tn},其中、代表第j個(gè)測(cè) 試用例。根據(jù)歷史測(cè)試數(shù)據(jù),測(cè)試用例、執(zhí)行后會(huì)覆蓋測(cè)試需求集合的一個(gè)子集,稱為、 的覆蓋需求集沁(^gi )。根據(jù)各個(gè)測(cè)試用例的覆蓋需求集,給定測(cè)試需求可以確定測(cè) 試需求A的執(zhí)行用例集(力^70,其中包含覆蓋需求巧的所有測(cè)試用例。根據(jù)測(cè)試需求 集R和測(cè)試用例集T之間的覆蓋關(guān)系可以構(gòu)建測(cè)試需求覆蓋矩陣Δ (R,Τ)。Δ (R,Τ)是一 個(gè)|R|x|T|的二進(jìn)制矩陣,其中IRl和|τ|分別代表集合R和τ中的元素?cái)?shù)量 矩陣元素 Sij的定義如公式(ι)所示。
_ Jl測(cè)試用例G e Γ覆蓋測(cè)試需求e R
測(cè)試用例 ;不覆蓋測(cè)試需求f(1)按照測(cè)試需求覆蓋矩陣Δ (R,Τ),測(cè)試用例、的覆蓋需求集民對(duì)應(yīng)Δ (R,Τ)的 一列,而測(cè)試需求A的執(zhí)行用例集Ti對(duì)應(yīng)Δ (R,Τ)的一行。矩陣元素δ u為1當(dāng)且僅當(dāng) tj e Ti 或者 Γ e Rj。
圖2所示為一個(gè)簡(jiǎn)單的示例程序及其測(cè)試用例庫(kù)的測(cè)試覆蓋數(shù)據(jù)。圖3所示為 其對(duì)應(yīng)的測(cè)試需求覆蓋矩陣。圖3中測(cè)試用例t6的覆蓋需求集R6 = Ir1, r2, r3, r4, r6, r7, r13};而測(cè)試需求r6對(duì)應(yīng)的執(zhí)行用例集T6 = It1, t5, t6,t8}。測(cè)試用例、的覆蓋需求集同 用例、的覆蓋集相同,但兩個(gè)用例的執(zhí)行結(jié)果不同。說(shuō)明兩者雖然覆蓋了相同的測(cè)試需求, 但缺陷檢測(cè)能力并不相同。測(cè)試需求r12的執(zhí)行用例集T12為空集,說(shuō)明需求r12沒(méi)有被任何 用例覆蓋。接下來(lái)考慮應(yīng)用場(chǎng)景一,即針對(duì)當(dāng)前軟件修改選擇合適的回歸測(cè)試集。第一步針 對(duì)當(dāng)前修改組件將測(cè)試需求集R劃分為關(guān)注需求集CR和無(wú)關(guān)需求集R-CR。其中集合操作 “_”的含義由公式⑵定義。A-B={x|xeA~xB}(A 和 B 是兩個(gè)集合) (2)關(guān)注集CR同當(dāng)前的軟件修改直接相關(guān),包含本次回歸測(cè)試必須充分覆蓋的測(cè)試 需求。無(wú)關(guān)集中的測(cè)試需求同當(dāng)前軟件修改不相干,在選擇回歸測(cè)試集時(shí)避免覆蓋無(wú)關(guān)集 中的測(cè)試需求可以降低回歸測(cè)試執(zhí)行和分析的成本。這基于以下五個(gè)方面的考慮1.減少必須覆蓋的測(cè)試需求數(shù)量可以進(jìn)一步減少所需的回歸測(cè)試用例數(shù)量,從而 降低測(cè)試成本和時(shí)間;2.避免覆蓋無(wú)關(guān)的測(cè)試需求可以避免涉及無(wú)關(guān)的測(cè)試需求和代碼,從而減少測(cè)試 分析的工作量和成本;3.缺陷修復(fù)向來(lái)不是一次性完成,避開(kāi)未修復(fù)的缺陷組件可以減少“預(yù)防性”代碼 并規(guī)避未修復(fù)缺陷的干擾,增加回歸測(cè)試的可行性;4.軟件程序總是包含復(fù)用和購(gòu)買(mǎi)的組件,這些組件的代碼或者不可見(jiàn),或者其修 改不可控,繞開(kāi)這些組件可以完成更有效的測(cè)試,減少軟件測(cè)試的依賴性;5.有一些組件可能尚在開(kāi)發(fā)和修改中,能夠避開(kāi)這些未完成組件可以實(shí)施更早的 測(cè)試,增加目標(biāo)軟件的可測(cè)試性。第二步是選擇回歸測(cè)試集,既充分覆蓋關(guān)注集CR,又避免覆蓋無(wú)關(guān)集。給定測(cè)試需 求集合R,其代表用例集Tk是一個(gè)測(cè)試用例集合,所包含的測(cè)試用例覆蓋集合R中所有的 測(cè)試需求。顯然代表用例集Tk可用于組成回歸測(cè)試集。為減少回歸測(cè)試成本,需要尋求 最小規(guī)模的代表用例集Τκ,其對(duì)應(yīng)的問(wèn)題就是測(cè)試用例集約簡(jiǎn)問(wèn)題。針對(duì)測(cè)試用例集T = {、,、,...,1},令集合11= {&,&,...,&},為各測(cè)試用例覆蓋需求集所組成的集合。解 決測(cè)試用例集約簡(jiǎn)問(wèn)題等同于尋找集合Π中的最少元素,使其并集等于集合R。后者是著名 的最小覆蓋集問(wèn)題,已被證明是NP完全問(wèn)題??紤]測(cè)試需求集的部分覆蓋使問(wèn)題更進(jìn)一步,給定關(guān)注集CR,要求尋找最優(yōu)的代 表用例集Tra,達(dá)到以下兩個(gè)目標(biāo)目標(biāo)1. Tck中的測(cè)試用例數(shù)量最少,g卩min(| TCE|);目標(biāo)2.無(wú)關(guān)需求的覆蓋數(shù)量最少,即eR-CRA(3tj G YcrAj ==l)}|)。解決部分覆蓋測(cè)試用例集約簡(jiǎn)問(wèn)題同樣是一個(gè)NP完全問(wèn)題。本發(fā)明采用HATS算 法解決該問(wèn)題。HATS算法遵循啟發(fā)式貪婪搜索模式,采用不斷迭代的方法,一次選擇一個(gè) (或多個(gè))局部最優(yōu)(如覆蓋最多數(shù)量關(guān)注需求或者覆蓋最少數(shù)量無(wú)關(guān)需求)的測(cè)試用例, 直到集合CR中所有測(cè)試需求都被覆蓋。HATS算法定義以下標(biāo)記
cur_T 當(dāng)前的備選測(cè)試用例集;cur_CR 當(dāng)前的關(guān)注需求集,其中的測(cè)試需求尚未被覆蓋;cur_Select 本次迭代選擇的測(cè)試用例集合。HATS算法基于以下三個(gè)策略選擇測(cè)試用例策略1.必選策略。如果集合cur_CR中存在測(cè)試需求ri;巧僅被集合cur_T中唯 一的一個(gè)測(cè)試用例、覆蓋,則用例、必然被選入集合cUr_Select。策略2.替代策略。如果集合cur_T中存在兩個(gè)測(cè)試用例、和tk,tj覆蓋的cur_ CR中需求子集包含tk覆蓋的cur_CR中需求子集(即晃^cur_CR^Rk ccur_CR ),且、覆蓋 的無(wú)關(guān)需求子集被tk覆蓋的無(wú)關(guān)需求子集包含,則用例tk可以從集合cur_T中刪除。策略3.優(yōu)選策略。選擇集合cur_T中最合適的測(cè)試用例、,tj覆蓋“盡可能多” 的cur_CR中關(guān)注需求,同時(shí)覆蓋“盡可能少”的無(wú)關(guān)需求。圖4所示是HATS算法的執(zhí)行流程圖。算法的輸入是測(cè)試需求集R、關(guān)注需求集CR、 和測(cè)試用例集T,輸出是代表用例集Tai,即針對(duì)當(dāng)前修改的回歸測(cè)試集。在每次迭代中, 首先應(yīng)用替代策略刪除集合cur_T中冗余的測(cè)試用例;然后應(yīng)用必選策略組成集合cur_ Select ;如果不能應(yīng)用必選策略,則應(yīng)用優(yōu)選策略選擇合適的測(cè)試用例組成Cur_SeleCt ; 接下來(lái)從cur_T中移除cur_Select中用例,同時(shí)將cur_Select并入輸出集合TeK ;最后刪 除cur_CR中被cur_Select中用例覆蓋的關(guān)注需求??紤]優(yōu)選策略,一個(gè)問(wèn)題是給定測(cè)試用例、,如果、覆蓋較多數(shù)量的關(guān)注需求,那 么通常也會(huì)覆蓋較多數(shù)量的無(wú)關(guān)需求。這里需要一個(gè)折中,為此定義兩個(gè)指標(biāo)貢獻(xiàn)指標(biāo)和 損益指標(biāo)。測(cè)試用例、的貢獻(xiàn)指標(biāo)的定義由公式(3)描述,表示、覆蓋的關(guān)注需求占 集合cur_CR的比例。用例、的損益指標(biāo)υ j的定義由公式(4)描述,表示、未覆蓋的無(wú) 關(guān)需求占無(wú)關(guān)需求集的比例。
Ri^cur CR\ _] ^ ⑶
\cur _CR\
IRi^(R-CR)I\R-CR\ ‘(4>顯然兩個(gè)指標(biāo)越高,表示測(cè)試用例、越合適。為綜合考慮用例、對(duì)關(guān)注集的覆蓋 和對(duì)無(wú)關(guān)集的避免,定義、的效用指標(biāo)為其貢獻(xiàn)指標(biāo)和損益指標(biāo)的加權(quán)和,公式(5)描 述了這個(gè)定義。其中α α < 1)為權(quán)重因子,α越大,表示越關(guān)注貢獻(xiàn)指標(biāo),即對(duì)關(guān) 注需求的覆蓋越重視;α越小,表示越關(guān)注損益指標(biāo),即對(duì)無(wú)關(guān)需求的避免越重視。ω」=α · ζ j+(l-a ) · Uj (5)優(yōu)選策略選擇集合cur_T中具有最大效用指標(biāo)值的測(cè)試用例,其處理流程如圖5 所示。針對(duì)cur_T中每一個(gè)測(cè)試用例、,首先計(jì)算其效用指標(biāo),然后選擇第一個(gè)具有最大效 用指標(biāo)值的測(cè)試用例作為輸出??紤]應(yīng)用場(chǎng)景2,即約簡(jiǎn)和維護(hù)回歸測(cè)試用例庫(kù)。第一步是根據(jù)軟件組成和需求特 點(diǎn)建立多重覆蓋策略。多重覆蓋策略意味著每一個(gè)測(cè)試需求被覆蓋不止一次,這要求保留 冗余的測(cè)試用例??紤]圖2和圖3所示的例子,其中測(cè)試用例、和t6的覆蓋需求集等同。 按用例集約簡(jiǎn)要求,用例、和t6只需保留一個(gè)。但在本例中、和t6的執(zhí)行結(jié)果并不相同,
9說(shuō)明兩個(gè)用例可以檢測(cè)不同的缺陷,刪除其中一個(gè)會(huì)降低測(cè)試用例庫(kù)的缺陷檢測(cè)能力。多重覆蓋策略可以基于操作剖面或需求風(fēng)險(xiǎn)來(lái)定義。兩者都針對(duì)功能性需求。操 作剖面定義了軟件系統(tǒng)的使用方式,其中軟件被認(rèn)為是操作的集合,一個(gè)操作一般對(duì)應(yīng)軟 件的一個(gè)功能項(xiàng),各操作相互獨(dú)立。操作剖面定義每個(gè)操作出現(xiàn)的幾率,所有幾率值累加為 1。顯然出現(xiàn)幾率高的操作應(yīng)該具有更多的覆蓋次數(shù)。例如操作a的出現(xiàn)幾率是0.2,操作 b的出現(xiàn)幾率是0. 1,那么操作a被覆蓋的次數(shù)應(yīng)該是操作b被覆蓋次數(shù)的2倍。需求風(fēng)險(xiǎn)可基于需求項(xiàng)的可疑程度或關(guān)鍵程度來(lái)確定。一種定義需求風(fēng)險(xiǎn)的設(shè)施 是卡諾模型(Kano Model)。圖6所示是卡諾模型定義的三種需求類型。其中基本型需求是 必須的,實(shí)現(xiàn)程度不夠會(huì)使客戶滿意度大幅下降,但實(shí)現(xiàn)的非常充分也并不能使客戶滿意; 期望型需求是客戶期望得到的,客戶滿意度基本同其實(shí)現(xiàn)程度成正比;興奮性需求不是必 備的,但充分的實(shí)現(xiàn)會(huì)極大提高客戶的滿意度。顯然這三類需求需要不同的覆蓋次數(shù)。一 種設(shè)定是以期望型需求的覆蓋次數(shù)為基準(zhǔn),當(dāng)軟件尚未成型質(zhì)量并不穩(wěn)定時(shí),基本型需求 的覆蓋次數(shù)高于期望型需求,而興奮性需求的覆蓋次數(shù)則低于期望型需求;當(dāng)軟件已經(jīng)成 型質(zhì)量穩(wěn)定后,興奮型需求的覆蓋次數(shù)將高于期望型需求,而基本型需求的覆蓋次數(shù)則低 于期望型需求。運(yùn)用需求跟蹤矩陣可以將功能性需求的覆蓋次數(shù)要求轉(zhuǎn)化為結(jié)構(gòu)性需求(如語(yǔ) 句塊)的覆蓋次數(shù)要求。多重覆蓋策略可以采用需求覆蓋表描述。給定需求集R,其對(duì)應(yīng)的 需求覆蓋表Θκ是一個(gè)二元組集合,定義由公式(6)描述。對(duì)集合R中的每一個(gè)需求A,有 且僅有一個(gè)二元組屬于Θκ,其中Qi是測(cè)試需求巧的覆蓋次數(shù)要求,即至少需要 θ i個(gè)不同的測(cè)試用例覆蓋需求A。θκ = Kri, θ Plri G R Λ θ i 彡 0 Λ θ i 彡 |Tj} (6)第二步是運(yùn)用MHATS算法根據(jù)需求覆蓋表Θκ約簡(jiǎn)回歸測(cè)試用例庫(kù)。給定測(cè)試需 求集合R和對(duì)應(yīng)的需求覆蓋表Θ K,MHATS算法尋找最優(yōu)的多重覆蓋代表用例集Tmk,達(dá)到以 下兩個(gè)目標(biāo)目標(biāo)1. Tmk中的測(cè)試用例數(shù)量最少,即:min( T服|);目標(biāo)2.各測(cè)試需求被Tmk中不同測(cè)試用例的覆蓋次數(shù)滿足θκ中要求,即MHATS算法通過(guò)重復(fù)調(diào)用HATS算法,直到所有測(cè)試需求被覆蓋指定次數(shù)。MHATS 算法增加以下標(biāo)記cur_ E 當(dāng)前的需求覆蓋表,對(duì)測(cè)試需求對(duì)應(yīng)的θ ,表示尚欠缺的覆蓋次數(shù)。圖7所示為MHATS算法的執(zhí)行流程。算法的輸入是測(cè)試需求集R、需求覆蓋表θκ 和測(cè)試用例集Τ,輸出是多重覆蓋代表用例集Tmk,即約簡(jiǎn)后的測(cè)試用例庫(kù)。在每一次迭代 中,算法首先根據(jù)當(dāng)前的需求覆蓋表cur_ K組建還需要覆蓋的測(cè)試需求集cur_CR。然后 以cur_CR為關(guān)注需求集、cur_T為測(cè)試用例集調(diào)用HATS算法。HATS算法嘗試尋找測(cè)試用 例集覆蓋cur_CR中的測(cè)試需求,同時(shí)避免覆蓋cur_CR以外的測(cè)試需求。這種處理可以使 集合R所有需求最終被覆蓋的次數(shù)盡量符合覆蓋表約定。HATS算法的輸出被賦予 cur_Select集合,后者被并入Tmk,同時(shí)從cur_T中移除;然后用于調(diào)整cur_ K。因?yàn)樵?覆蓋表Θκ中,測(cè)試用例ri要求覆蓋的次數(shù)θ i少于能夠覆蓋需求ri的測(cè)試用例數(shù)量(即θ i彡|Τ」),所以在有限次迭代和調(diào)用HATS算法后,MHATS算法能夠成功結(jié)束,所得到的代 表用例集Tmk滿足覆蓋表要求。除用于測(cè)試用例庫(kù)維護(hù)外,MHATS算法也可以用于回歸測(cè)試集選擇。此時(shí)如果測(cè) 試需求ri不屬于關(guān)注集CR,則對(duì)應(yīng)的QiSO ;如果需求屬于集合CR,則根據(jù)選定的多重 覆蓋策略,θ i設(shè)置為大于等于1的合適值。在測(cè)試成本和時(shí)間許可的前提下,這樣處理可 以提高回歸測(cè)試的質(zhì)量。為說(shuō)明本發(fā)明在技術(shù)上的先進(jìn)性。我們采用開(kāi)源軟件NanoXML和JTopas檢驗(yàn)測(cè) 試用例集篩選效果,包括約簡(jiǎn)規(guī)模和約簡(jiǎn)后用例集的缺陷檢測(cè)能力,其中測(cè)試需求定義為 語(yǔ)句塊。設(shè)計(jì)30個(gè)實(shí)驗(yàn),每個(gè)實(shí)驗(yàn)中選擇不同的CR集合,占R集合的比例從3% 20%不 等,符合實(shí)際軟件項(xiàng)目的情況。首先比較部分覆蓋測(cè)試用例集約簡(jiǎn)(HATS算法)和全覆蓋用 例集約簡(jiǎn)所得到的約簡(jiǎn)后用例集規(guī)模,如圖8所示。這里全覆蓋用例集約簡(jiǎn)算法采用經(jīng)典 的HGS算法,HGSt代表全覆蓋約簡(jiǎn);HATSa i和HATSa 5分別表示因子α的值為0. 1和0. 5。 為便于比較,圖中縱坐標(biāo)采用約簡(jiǎn)集占初始用例集規(guī)模的百分比值。從圖中箱型圖可以看 出,HATS算法可以進(jìn)一步較大程度降低約簡(jiǎn)后用例集規(guī)模,從而節(jié)約測(cè)試成本。當(dāng)權(quán)重因 子α設(shè)置為較大的值(0.5)時(shí),規(guī)模約簡(jiǎn)的效果更好。其次考察多重覆蓋約簡(jiǎn)(MHATS算法)對(duì)測(cè)試用例集的規(guī)模約簡(jiǎn)效果??疾?0個(gè) 實(shí)驗(yàn),在每個(gè)實(shí)驗(yàn)中,由覆蓋CR集合的所有測(cè)試用例構(gòu)成初始用例集,觀察MHATS算法約簡(jiǎn) 后用例集規(guī)模占初始集規(guī)模的百分比值;在每一次迭代中,MHATS算法調(diào)用的是HATSai,如 圖9所示。為簡(jiǎn)單起見(jiàn),覆蓋表各測(cè)試需求要求的覆蓋次數(shù)等同。如MHATS2表示所 有測(cè)試需求要求2個(gè)以上的測(cè)試用例覆蓋;如果對(duì)測(cè)試需求ri;其執(zhí)行用例集Ti規(guī)模小于 對(duì)應(yīng)的Qi,則Qi降為|Ti|。按圖中箱型圖可以看出,當(dāng)覆蓋表θ值為3時(shí),約簡(jiǎn)后 用例集規(guī)模一般不超過(guò)初始用例集的20%;即使θ值升為8,除個(gè)別情況外,約簡(jiǎn)集規(guī)模一 般也不超過(guò)初始集的30%。這樣處理可以較大程度減少測(cè)試用例庫(kù)規(guī)模和冗余度,降低測(cè) 試用例庫(kù)維護(hù)的成本。最后考察多重覆蓋約簡(jiǎn)對(duì)測(cè)試用例集缺陷檢測(cè)能力的維持能力。對(duì)每個(gè)實(shí)驗(yàn),只 考慮針對(duì)CR集合的覆蓋和缺陷檢測(cè)。為確保實(shí)驗(yàn)充分性,采用變異殺除率MS (英文對(duì)應(yīng)名 稱Mutation Score)作為缺陷檢測(cè)能力的衡量。變異殺除率MS指先對(duì)被測(cè)軟件程序做充 分變異,如對(duì)一段程序生成盡可能多的變異程序,每個(gè)變異程序包含一個(gè)操作符或操作數(shù) 上的差異;然后運(yùn)行測(cè)試用例集,計(jì)算能夠發(fā)現(xiàn)缺陷的變異程序數(shù)量占全部變異程序數(shù)量 的比值。顯然MS值越高說(shuō)明測(cè)試用例集的缺陷檢測(cè)能力越好。這里比較MHATS算法所得 約簡(jiǎn)集同單覆蓋約簡(jiǎn)(HGS算法)所得約簡(jiǎn)集的缺陷檢測(cè)能力,如圖10所示。為便于比較, 約簡(jiǎn)集的變異殺除率MSt顯示的是占初始用例集殺除率MSt的百分比值。從圖10中可以 看出,多重覆蓋約簡(jiǎn)集的缺陷檢測(cè)能力明顯優(yōu)于單覆蓋約簡(jiǎn)。同初始用例集相比較,除個(gè)別 情況外,多重覆蓋約簡(jiǎn)集的缺陷檢測(cè)能力能夠維持在初始用例集的95%以上,從而在降低 測(cè)試成本的同時(shí)有效保證了回歸測(cè)試的質(zhì)量。
權(quán)利要求
一種基于部分多重覆蓋的回歸測(cè)試用例篩選方法,其特征在于包括以下步驟1)首先根據(jù)軟件系統(tǒng)特征和測(cè)試用例庫(kù)的歷史數(shù)據(jù),構(gòu)建測(cè)試需求覆蓋矩陣;具體過(guò)程為將被測(cè)軟件系統(tǒng)視為測(cè)試需求集合R,測(cè)試用例庫(kù)視為測(cè)試用例集合T,根據(jù)測(cè)試用例庫(kù)中測(cè)試用例的歷史執(zhí)行數(shù)據(jù),構(gòu)筑測(cè)試覆蓋矩陣Δ(R,T);2)針對(duì)修改組件,將測(cè)試需求集R劃分為關(guān)注集CR和無(wú)關(guān)集R CR,其中關(guān)注集CR是與當(dāng)前軟件修改相關(guān)的測(cè)試需求集合,包含本次回歸測(cè)試必須充分覆蓋的測(cè)試需求;而無(wú)關(guān)集R CR是與當(dāng)前修改無(wú)關(guān)的測(cè)試需求集合;3)采用HATS算法選擇回歸測(cè)試集,針對(duì)關(guān)注集CR,選擇最少數(shù)量的測(cè)試用例充分覆蓋關(guān)注集中的所有測(cè)試需求;針對(duì)無(wú)關(guān)集R CR,選擇對(duì)無(wú)關(guān)集中測(cè)試需求覆蓋少的測(cè)試用例;4)對(duì)于測(cè)試用例庫(kù)的維護(hù),采用基于風(fēng)險(xiǎn)或操作剖面定義測(cè)試需求的多重覆蓋策略;5)根據(jù)給定的多重覆蓋策略,采用MHATS算法篩選測(cè)試用例集,MHATS算法重復(fù)調(diào)用HATS算法,直到所有測(cè)試需求被覆蓋指定次數(shù)。
2.根據(jù)權(quán)利要求1所述的基于部分多重覆蓋的回歸測(cè)試用例篩選方法,其特征在于步 驟2)中集合操作“_”的含義定義如下 (Α 禾 ΠΒ 是兩個(gè)集合)。
3.根據(jù)權(quán)利要求1或2所述的基于部分多重覆蓋的回歸測(cè)試用例篩選方法,其特征在 于步驟3)的HATS算法遵循啟發(fā)式貪婪搜索模式,采用不斷迭代的方法,一次選擇一個(gè)或多 個(gè)局部最優(yōu)的測(cè)試用例,直到關(guān)注集CR中所有測(cè)試需求都被覆蓋;HATS算法包括三個(gè)測(cè)試 用例篩選策略策略1.必選策略,如果當(dāng)前關(guān)注集cur_CR中存在測(cè)試需求僅被當(dāng)前用例集cur_ T中唯一的一個(gè)測(cè)試用例、覆蓋,則用例、必然被選入當(dāng)前選擇集cUr_Select ;策略2.替代策略,如果當(dāng)前用例集cur_T中存在兩個(gè)測(cè)試用例、和tk,tj覆蓋的當(dāng)前 關(guān)注集cur_CR中需求子集包含tk覆蓋的cur_CR中需求子集,且、覆蓋的無(wú)關(guān)需求子集被 tk覆蓋的無(wú)關(guān)需求子集包含,則用例tk可以從集合cur_T中刪除;策略3.優(yōu)選策略,選擇當(dāng)前用例集cur_T中最合適的測(cè)試用例、,tj覆蓋“盡可能多” 的當(dāng)前關(guān)注集cur_CR中測(cè)試需求,同時(shí)覆蓋“盡可能少”的無(wú)關(guān)集中測(cè)試需求。
4.根據(jù)權(quán)利要求3所述的基于部分多重覆蓋的回歸測(cè)試用例篩選方法,其特征在于策 略3所述的優(yōu)選策略定義兩個(gè)指標(biāo)貢獻(xiàn)指標(biāo)和損益指標(biāo);測(cè)試用例、的貢獻(xiàn)指標(biāo)ζ j的 定義公式為 其中集合&表示用例、的覆蓋需求集,表示、覆蓋的關(guān)注需求占集合cur_CR的比例; 用例、的損益指標(biāo)υ j的定義公式為 表示、未覆蓋的無(wú)關(guān)需求占無(wú)關(guān)需求集的比例;并引入權(quán)重因子α α < 1),定 義、的效用指標(biāo)ω」為其貢獻(xiàn)指標(biāo)和損益指標(biāo)的加權(quán)和,公式如下ω j = α · ζ j+(l- α ) · υ j0
5.根據(jù)權(quán)利要求1或2所述的基于部分多重覆蓋的回歸測(cè)試用例篩選方法,其特征在 于步驟4)的多重覆蓋策略,具體過(guò)程為針對(duì)測(cè)試需求集R定義需求覆蓋表Θκ,Θκ是一 個(gè)二元組集合,定義公式如下Θε = Kri, θ G R Λ θ i 彡 0 Λ θ i 彡 | Ti |}對(duì)測(cè)試需求集合R中的每一個(gè)測(cè)試需求ri;有且僅有一個(gè)二元組屬于θκ,其 中Qi是需求^的覆蓋次數(shù)要求,即至少需要Qi個(gè)不同的測(cè)試用例覆蓋需求ri,Ti表示需 求^的執(zhí)行用例集,需求覆蓋表Θκ通過(guò)軟件系統(tǒng)的操作剖面或者卡諾模型來(lái)導(dǎo)出。
6.根據(jù)權(quán)利要求5所述的基于部分多重覆蓋的回歸測(cè)試用例篩選方法,其特征在于步 驟5)的MHATS算法,具體過(guò)程為給定需求覆蓋表 K,MHATS算法在每一次迭代中,將尚未 滿足覆蓋次數(shù)要求的測(cè)試需求用于組成關(guān)注集CR,已滿足的測(cè)試需求則組成無(wú)關(guān)集,以此 調(diào)用HATS算法,使各測(cè)試需求被覆蓋的次數(shù)盡量符合覆蓋表Θκ的約定。
全文摘要
本發(fā)明公開(kāi)了一種基于部分多重覆蓋的回歸測(cè)試用例篩選方法,首先根據(jù)軟件系統(tǒng)特征和測(cè)試用例庫(kù)的歷史數(shù)據(jù),構(gòu)建測(cè)試需求覆蓋矩陣;再針對(duì)修改組件,將測(cè)試需求集劃分為關(guān)注集和無(wú)關(guān)集;采用HATS算法選擇回歸測(cè)試集;對(duì)于測(cè)試用例庫(kù)的維護(hù),采用基于風(fēng)險(xiǎn)或操作剖面定義測(cè)試需求的多重覆蓋策略;根據(jù)給定的多重覆蓋策略,采用MHATS算法篩選測(cè)試用例集。本發(fā)明通過(guò)多重覆蓋策略來(lái)保留冗余的測(cè)試用例,從而在精簡(jiǎn)測(cè)試用例庫(kù)時(shí)維持測(cè)試用例庫(kù)的缺陷檢測(cè)能力;另外在選擇回歸測(cè)試集時(shí)面向部分覆蓋,同時(shí)避免覆蓋不相干的測(cè)試需求,在進(jìn)一步減少測(cè)試用例數(shù)量的同時(shí),降低測(cè)試執(zhí)行和分析的成本。
文檔編號(hào)G06F11/36GK101908017SQ201010187488
公開(kāi)日2010年12月8日 申請(qǐng)日期2010年6月1日 優(yōu)先權(quán)日2010年6月1日
發(fā)明者唐寶, 陳道蓄, 顧慶 申請(qǐng)人:南京大學(xué)