文/周海旭
回歸測試指的是對軟件當(dāng)前版本中“相對上一個版本未發(fā)生變化的特性”進行驗證。在軟件的版本更迭過程中,回歸測試是必不可少的質(zhì)量保障手段。回歸測試用例一般繼承自產(chǎn)品用例庫。對于實際的軟件項目來說,回歸測試用例的數(shù)量往往很大。由于測試資源的限制,通常不可能執(zhí)行回歸測試用例集中的全部用例,而是要予以適當(dāng)?shù)娜∩?。通常的做法是,首先確定每個回歸測試用例的優(yōu)先級,然后再根據(jù)可用資源的規(guī)模,挑選一部分優(yōu)先級較高的用例進行回歸測試。
針對回歸測試用例優(yōu)先級相關(guān)的課題,學(xué)術(shù)界開展過大量的研究工作:Wong等人[1]提出了根據(jù)用例覆蓋能力進行優(yōu)先級排序的方法;Rothermel等人[2-3]從語句和分支覆蓋準(zhǔn)則出發(fā),提出了用于優(yōu)先級排序的貪婪算法Total策略和Additional策略;Walcott等人[4]考慮了測試用例的執(zhí)行時間成本,提出了時間感知的優(yōu)先級排序技術(shù);J.G.Lee,C G.Chung等人[5]利用整數(shù)規(guī)劃算法求解回歸測試用例按優(yōu)先級約簡的問題;Harrold等人[6]引入了用例重要性的概念,提出了一種按優(yōu)先級約簡測試用例的啟發(fā)式算法。
然而,這些方法大多是從減少需求覆蓋冗余的角度進行用例優(yōu)先級的評估。在實際的軟件工程項目中,減少用例冗余一般是在上一個版本的增量用例向用例庫進行合并時需要考慮的,是上一個版本測試總結(jié)和歸檔階段的工作。換言之,當(dāng)前版本的回歸測試用例總集,從一開始就已經(jīng)是上個版本測試過程中進行過“去冗余”處理的用例集了。當(dāng)前版本的回歸測試設(shè)計,則需要在此基礎(chǔ)上進一步確定用例優(yōu)先級。
本文從工程實踐出發(fā),分析了回歸測試執(zhí)行覆蓋度與用例優(yōu)先級之間的關(guān)系,從一個新的角度建立了回歸測試用例優(yōu)先級的定量評估模型。
實際項目中,回歸測試的需求覆蓋率一般以“計劃執(zhí)行用例數(shù)占回歸測試用例總數(shù)的比例”來評估。這個比例是回歸測試的一個重要設(shè)計指標(biāo),我們稱其為回歸測試執(zhí)行覆蓋度。
回歸測試設(shè)計的基礎(chǔ)是已有的回歸測試用例總集,記為S,其中包含用例總數(shù)為N。S由一系列子集構(gòu)成,記為Si中包含的用例數(shù)為Ni。每個用例子集Si對應(yīng)一個需求特性子集,記為
定義1 Si的回歸測試執(zhí)行覆蓋度,指的是從Si中選取的、用于當(dāng)前版本回歸測試的用例數(shù)N'i占Si用例總數(shù)的比例。用Ci表示Si的執(zhí)行覆蓋度,則:
用C表示回歸測試用例總集S的執(zhí)行覆蓋度,則:
回歸測試的目的是驗證當(dāng)前版本的變更是否會對已有特性產(chǎn)生不良影響。可投入到一次回歸測試中的資源是有限的,必須進行合理調(diào)配。顯然,回歸測試執(zhí)行的用例越多,需要投入的資源也越高。這就需要給每一個Si賦予適當(dāng)?shù)膱?zhí)行覆蓋度,以提高回歸測試的效率。產(chǎn)品各項特性的重要程度并不相同,受到當(dāng)前版本變更影響的可能性也不同。應(yīng)該優(yōu)先對更有價值的、與變更關(guān)聯(lián)程度更高的特性進行相對充分的回歸測試。另一方面,用例執(zhí)行成本也是一個必須考慮的因素,應(yīng)優(yōu)先對執(zhí)行成本較低的用例子集進行相對充分的回歸測試。
綜上,評估一個用例子集Si的執(zhí)行覆蓋度Ci時,可歸納出如下的啟發(fā)式原則:
(1)Si對應(yīng)的需求子集Ui越重要,則Ci應(yīng)該越高;
(2)當(dāng)前版本的變更與Ui的關(guān)聯(lián)程度越高,則Ci應(yīng)該越高;
(3)執(zhí)行Si所需的成本(包含運行用例和維護用例的成本)越高,則Ci應(yīng)該越低。
用Vi表示Ui的價值水平,即Ui在功能或非功能上的重要程度;用Ai表示待測版本的變更與Ui的關(guān)聯(lián)程度,即變更對Ui的影響程度;用Ei表示運行Si(手工或自動化方式)所需人天;用Mi表示維護Si(維護手工用例或自動化腳本)所需人天。根據(jù)上述啟發(fā)式原則,可以得到回歸測試用例子集執(zhí)行覆蓋度與“價值-風(fēng)險-成本”的關(guān)系如下:
其中μ是待定的調(diào)節(jié)因子,單位為人天。
對于回歸測試用例總集,一般用總資源占總成本的比例來預(yù)估總的執(zhí)行覆蓋度。用R表示可投入到此次回歸測試中的人天資源總數(shù),則回歸測試用例總集執(zhí)行覆蓋度與“資源-成本”的關(guān)系如下:
結(jié)合(2)(3)(4)式可得:
將(5)式帶入(3)式可得:
一個回歸測試用例子集的執(zhí)行覆蓋率越高,說明該用例子集的回歸測試越充分。因此在資源受限的前提下,如果給一個用例子集設(shè)定了相對較高的執(zhí)行覆蓋率,也就意味著對于當(dāng)前版本回歸測試來說,該用例子集的優(yōu)先程度更高。
回歸測試用例子集Si是從回歸測試用例總集S分解得到的。不失一般性,可遞歸進行這一分解,使得:
將(7)式帶入(6)式可得:
此時,Si代表回歸測試用例總集中的任一用例,Vi代表該用例對應(yīng)需求特性Ui的價值水平,Ai代表Ui受版本變更影響的程度,Ei代表運行該用例的成本,Mi代表維護該用例的成本。Ci則代表該用例在回歸測試中的優(yōu)先程度。(8)式即回歸測試用例優(yōu)先級的定量評估模型。
可以看到,該模型表達了可用資源、特性價值水平、運行成本、維護成本、變更關(guān)聯(lián)風(fēng)險對回歸測試的影響。在項目中具體應(yīng)用時,只需要在用例管理系統(tǒng)中為每一個回歸測試用例增加價值水平Vi、變更關(guān)聯(lián)程度Ai、運行成本Ei、維護成本Mi的定義,為回歸測試用例總集增加可投入資源總數(shù)R的定義,即可依據(jù)此模型計算出每一個回歸測試用例的優(yōu)先級評估值。
本文提出的模型初步揭示了回歸測試用例優(yōu)先級與資源、價值、風(fēng)險、成本的關(guān)系。而對價值和風(fēng)險這兩項影響因素的定量評估,實際項目里還大多依靠工程師的主觀經(jīng)驗。后續(xù)工作中,將考慮對價值因素和風(fēng)險因素建立度量模型,進一步簡化用例優(yōu)先級的評估。
參考文獻
[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é)報,計算機學(xué)報,2013,24(08):1695-1712.