文/周海旭
回歸測試指的是對軟件當(dāng)前版本中“相對上一個(gè)版本未發(fā)生變化的特性”進(jìn)行驗(yàn)證。在軟件的版本更迭過程中,回歸測試是必不可少的質(zhì)量保障手段?;貧w測試用例一般繼承自產(chǎn)品用例庫。對于實(shí)際的軟件項(xiàng)目來說,回歸測試用例的數(shù)量往往很大。由于測試資源的限制,通常不可能執(zhí)行回歸測試用例集中的全部用例,而是要予以適當(dāng)?shù)娜∩?。通常的做法是,首先確定每個(gè)回歸測試用例的優(yōu)先級,然后再根據(jù)可用資源的規(guī)模,挑選一部分優(yōu)先級較高的用例進(jìn)行回歸測試。
針對回歸測試用例優(yōu)先級相關(guān)的課題,學(xué)術(shù)界開展過大量的研究工作:Wong等人[1]提出了根據(jù)用例覆蓋能力進(jìn)行優(yōu)先級排序的方法;Rothermel等人[2-3]從語句和分支覆蓋準(zhǔn)則出發(fā),提出了用于優(yōu)先級排序的貪婪算法Total策略和Additional策略;Walcott等人[4]考慮了測試用例的執(zhí)行時(shí)間成本,提出了時(shí)間感知的優(yōu)先級排序技術(shù);J.G.Lee,C G.Chung等人[5]利用整數(shù)規(guī)劃算法求解回歸測試用例按優(yōu)先級約簡的問題;Harrold等人[6]引入了用例重要性的概念,提出了一種按優(yōu)先級約簡測試用例的啟發(fā)式算法。
然而,這些方法大多是從減少需求覆蓋冗余的角度進(jìn)行用例優(yōu)先級的評估。在實(shí)際的軟件工程項(xiàng)目中,減少用例冗余一般是在上一個(gè)版本的增量用例向用例庫進(jìn)行合并時(shí)需要考慮的,是上一個(gè)版本測試總結(jié)和歸檔階段的工作。換言之,當(dāng)前版本的回歸測試用例總集,從一開始就已經(jīng)是上個(gè)版本測試過程中進(jìn)行過“去冗余”處理的用例集了。當(dāng)前版本的回歸測試設(shè)計(jì),則需要在此基礎(chǔ)上進(jìn)一步確定用例優(yōu)先級。
本文從工程實(shí)踐出發(fā),分析了回歸測試執(zhí)行覆蓋度與用例優(yōu)先級之間的關(guān)系,從一個(gè)新的角度建立了回歸測試用例優(yōu)先級的定量評估模型。
實(shí)際項(xiàng)目中,回歸測試的需求覆蓋率一般以“計(jì)劃執(zhí)行用例數(shù)占回歸測試用例總數(shù)的比例”來評估。這個(gè)比例是回歸測試的一個(gè)重要設(shè)計(jì)指標(biāo),我們稱其為回歸測試執(zhí)行覆蓋度。
回歸測試設(shè)計(jì)的基礎(chǔ)是已有的回歸測試用例總集,記為S,其中包含用例總數(shù)為N。S由一系列子集構(gòu)成,記為Si中包含的用例數(shù)為Ni。每個(gè)用例子集Si對應(yīng)一個(gè)需求特性子集,記為
定義1 Si的回歸測試執(zhí)行覆蓋度,指的是從Si中選取的、用于當(dāng)前版本回歸測試的用例數(shù)N'i占Si用例總數(shù)的比例。用Ci表示Si的執(zhí)行覆蓋度,則:
用C表示回歸測試用例總集S的執(zhí)行覆蓋度,則:
回歸測試的目的是驗(yàn)證當(dāng)前版本的變更是否會(huì)對已有特性產(chǎn)生不良影響。可投入到一次回歸測試中的資源是有限的,必須進(jìn)行合理調(diào)配。顯然,回歸測試執(zhí)行的用例越多,需要投入的資源也越高。這就需要給每一個(gè)Si賦予適當(dāng)?shù)膱?zhí)行覆蓋度,以提高回歸測試的效率。產(chǎn)品各項(xiàng)特性的重要程度并不相同,受到當(dāng)前版本變更影響的可能性也不同。應(yīng)該優(yōu)先對更有價(jià)值的、與變更關(guān)聯(lián)程度更高的特性進(jìn)行相對充分的回歸測試。另一方面,用例執(zhí)行成本也是一個(gè)必須考慮的因素,應(yīng)優(yōu)先對執(zhí)行成本較低的用例子集進(jìn)行相對充分的回歸測試。
綜上,評估一個(gè)用例子集Si的執(zhí)行覆蓋度Ci時(shí),可歸納出如下的啟發(fā)式原則:
(1)Si對應(yīng)的需求子集Ui越重要,則Ci應(yīng)該越高;
(2)當(dāng)前版本的變更與Ui的關(guān)聯(lián)程度越高,則Ci應(yīng)該越高;
(3)執(zhí)行Si所需的成本(包含運(yùn)行用例和維護(hù)用例的成本)越高,則Ci應(yīng)該越低。
用Vi表示Ui的價(jià)值水平,即Ui在功能或非功能上的重要程度;用Ai表示待測版本的變更與Ui的關(guān)聯(lián)程度,即變更對Ui的影響程度;用Ei表示運(yùn)行Si(手工或自動(dòng)化方式)所需人天;用Mi表示維護(hù)Si(維護(hù)手工用例或自動(dòng)化腳本)所需人天。根據(jù)上述啟發(fā)式原則,可以得到回歸測試用例子集執(zhí)行覆蓋度與“價(jià)值-風(fēng)險(xiǎn)-成本”的關(guān)系如下:
其中μ是待定的調(diào)節(jié)因子,單位為人天。
對于回歸測試用例總集,一般用總資源占總成本的比例來預(yù)估總的執(zhí)行覆蓋度。用R表示可投入到此次回歸測試中的人天資源總數(shù),則回歸測試用例總集執(zhí)行覆蓋度與“資源-成本”的關(guān)系如下:
結(jié)合(2)(3)(4)式可得:
將(5)式帶入(3)式可得:
一個(gè)回歸測試用例子集的執(zhí)行覆蓋率越高,說明該用例子集的回歸測試越充分。因此在資源受限的前提下,如果給一個(gè)用例子集設(shè)定了相對較高的執(zhí)行覆蓋率,也就意味著對于當(dāng)前版本回歸測試來說,該用例子集的優(yōu)先程度更高。
回歸測試用例子集Si是從回歸測試用例總集S分解得到的。不失一般性,可遞歸進(jìn)行這一分解,使得:
將(7)式帶入(6)式可得:
此時(shí),Si代表回歸測試用例總集中的任一用例,Vi代表該用例對應(yīng)需求特性Ui的價(jià)值水平,Ai代表Ui受版本變更影響的程度,Ei代表運(yùn)行該用例的成本,Mi代表維護(hù)該用例的成本。Ci則代表該用例在回歸測試中的優(yōu)先程度。(8)式即回歸測試用例優(yōu)先級的定量評估模型。
可以看到,該模型表達(dá)了可用資源、特性價(jià)值水平、運(yùn)行成本、維護(hù)成本、變更關(guān)聯(lián)風(fēng)險(xiǎn)對回歸測試的影響。在項(xiàng)目中具體應(yīng)用時(shí),只需要在用例管理系統(tǒng)中為每一個(gè)回歸測試用例增加價(jià)值水平Vi、變更關(guān)聯(lián)程度Ai、運(yùn)行成本Ei、維護(hù)成本Mi的定義,為回歸測試用例總集增加可投入資源總數(shù)R的定義,即可依據(jù)此模型計(jì)算出每一個(gè)回歸測試用例的優(yōu)先級評估值。
本文提出的模型初步揭示了回歸測試用例優(yōu)先級與資源、價(jià)值、風(fēng)險(xiǎn)、成本的關(guān)系。而對價(jià)值和風(fēng)險(xiǎn)這兩項(xiàng)影響因素的定量評估,實(shí)際項(xiàng)目里還大多依靠工程師的主觀經(jīng)驗(yàn)。后續(xù)工作中,將考慮對價(jià)值因素和風(fēng)險(xiǎn)因素建立度量模型,進(jìn)一步簡化用例優(yōu)先級的評估。
參考文獻(xiàn)
[1]Wong W,Horgan J,London S,Agrawal H.A study of effective regression testing in practice[C]// The Eighth International Symposiumon Software Reliability Engineering,1997:264-274.
[2]Rothermel G,Untch R H,Chu C Y,et al.Prioritizing test cases for regression testing[J].IEEE Transantions on Software Engineering,2001,27(10):929-948.
[3]Rothermel G,Untch R H,Chu C,et al.Test case prioritization:An empirical study[C].IEEE International Conference on Software Maintenance,1999:179-188.
[4]Walcott K R,Soffa M L,Kapfhammer G M,et al.Time-Aware test suite prioritization[C].Proceedings of the 2006 International Symposium on Software Testing and Analysis.ACM Press,2006.1-12.
[5]Lee J G,Chung C G.An optimal representative set selection method:Information and Software Technology,2000,42(1):17-25.
[6]Harrold M J,Gupta R,Soffa M L.A methodology for controllingthe size of a test suite,ACM Transactions on Software Engineeringand Methodology,1993,2(3):270-285.
[7]陳翔,陳繼紅,鞠小林,顧慶.回歸測試中的測試用例優(yōu)先排序技術(shù)述評[J].軟件學(xué)報(bào),計(jì)算機(jī)學(xué)報(bào),2013,24(08):1695-1712.