文/周海旭
回歸測試指的是對軟件當前版本中“相對上一個版本未發生變化的特性”進行驗證。在軟件的版本更迭過程中,回歸測試是必不可少的質量保障手段。回歸測試用例一般繼承自產品用例庫。對于實際的軟件項目來說,回歸測試用例的數量往往很大。由于測試資源的限制,通常不可能執行回歸測試用例集中的全部用例,而是要予以適當的取舍。通常的做法是,首先確定每個回歸測試用例的優先級,然后再根據可用資源的規模,挑選一部分優先級較高的用例進行回歸測試。
針對回歸測試用例優先級相關的課題,學術界開展過大量的研究工作:Wong等人[1]提出了根據用例覆蓋能力進行優先級排序的方法;Rothermel等人[2-3]從語句和分支覆蓋準則出發,提出了用于優先級排序的貪婪算法Total策略和Additional策略;Walcott等人[4]考慮了測試用例的執行時間成本,提出了時間感知的優先級排序技術;J.G.Lee,C G.Chung等人[5]利用整數規劃算法求解回歸測試用例按優先級約簡的問題;Harrold等人[6]引入了用例重要性的概念,提出了一種按優先級約簡測試用例的啟發式算法。
然而,這些方法大多是從減少需求覆蓋冗余的角度進行用例優先級的評估。在實際的軟件工程項目中,減少用例冗余一般是在上一個版本的增量用例向用例庫進行合并時需要考慮的,是上一個版本測試總結和歸檔階段的工作。換言之,當前版本的回歸測試用例總集,從一開始就已經是上個版本測試過程中進行過“去冗余”處理的用例集了。當前版本的回歸測試設計,則需要在此基礎上進一步確定用例優先級。
本文從工程實踐出發,分析了回歸測試執行覆蓋度與用例優先級之間的關系,從一個新的角度建立了回歸測試用例優先級的定量評估模型。
實際項目中,回歸測試的需求覆蓋率一般以“計劃執行用例數占回歸測試用例總數的比例”來評估。這個比例是回歸測試的一個重要設計指標,我們稱其為回歸測試執行覆蓋度。
回歸測試設計的基礎是已有的回歸測試用例總集,記為S,其中包含用例總數為N。S由一系列子集構成,記為Si中包含的用例數為Ni。每個用例子集Si對應一個需求特性子集,記為
定義1 Si的回歸測試執行覆蓋度,指的是從Si中選取的、用于當前版本回歸測試的用例數N'i占Si用例總數的比例。用Ci表示Si的執行覆蓋度,則:

用C表示回歸測試用例總集S的執行覆蓋度,則:

回歸測試的目的是驗證當前版本的變更是否會對已有特性產生不良影響。可投入到一次回歸測試中的資源是有限的,必須進行合理調配。顯然,回歸測試執行的用例越多,需要投入的資源也越高。這就需要給每一個Si賦予適當的執行覆蓋度,以提高回歸測試的效率。產品各項特性的重要程度并不相同,受到當前版本變更影響的可能性也不同。應該優先對更有價值的、與變更關聯程度更高的特性進行相對充分的回歸測試。另一方面,用例執行成本也是一個必須考慮的因素,應優先對執行成本較低的用例子集進行相對充分的回歸測試。
綜上,評估一個用例子集Si的執行覆蓋度Ci時,可歸納出如下的啟發式原則:
(1)Si對應的需求子集Ui越重要,則Ci應該越高;
(2)當前版本的變更與Ui的關聯程度越高,則Ci應該越高;
(3)執行Si所需的成本(包含運行用例和維護用例的成本)越高,則Ci應該越低。
用Vi表示Ui的價值水平,即Ui在功能或非功能上的重要程度;用Ai表示待測版本的變更與Ui的關聯程度,即變更對Ui的影響程度;用Ei表示運行Si(手工或自動化方式)所需人天;用Mi表示維護Si(維護手工用例或自動化腳本)所需人天。根據上述啟發式原則,可以得到回歸測試用例子集執行覆蓋度與“價值-風險-成本”的關系如下:

其中μ是待定的調節因子,單位為人天。
對于回歸測試用例總集,一般用總資源占總成本的比例來預估總的執行覆蓋度。用R表示可投入到此次回歸測試中的人天資源總數,則回歸測試用例總集執行覆蓋度與“資源-成本”的關系如下:

結合(2)(3)(4)式可得:

將(5)式帶入(3)式可得:

一個回歸測試用例子集的執行覆蓋率越高,說明該用例子集的回歸測試越充分。因此在資源受限的前提下,如果給一個用例子集設定了相對較高的執行覆蓋率,也就意味著對于當前版本回歸測試來說,該用例子集的優先程度更高。
回歸測試用例子集Si是從回歸測試用例總集S分解得到的。不失一般性,可遞歸進行這一分解,使得:

將(7)式帶入(6)式可得:

此時,Si代表回歸測試用例總集中的任一用例,Vi代表該用例對應需求特性Ui的價值水平,Ai代表Ui受版本變更影響的程度,Ei代表運行該用例的成本,Mi代表維護該用例的成本。Ci則代表該用例在回歸測試中的優先程度。(8)式即回歸測試用例優先級的定量評估模型。
可以看到,該模型表達了可用資源、特性價值水平、運行成本、維護成本、變更關聯風險對回歸測試的影響。在項目中具體應用時,只需要在用例管理系統中為每一個回歸測試用例增加價值水平Vi、變更關聯程度Ai、運行成本Ei、維護成本Mi的定義,為回歸測試用例總集增加可投入資源總數R的定義,即可依據此模型計算出每一個回歸測試用例的優先級評估值。
本文提出的模型初步揭示了回歸測試用例優先級與資源、價值、風險、成本的關系。而對價值和風險這兩項影響因素的定量評估,實際項目里還大多依靠工程師的主觀經驗。后續工作中,將考慮對價值因素和風險因素建立度量模型,進一步簡化用例優先級的評估。
參考文獻
[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]陳翔,陳繼紅,鞠小林,顧慶.回歸測試中的測試用例優先排序技術述評[J].軟件學報,計算機學報,2013,24(08):1695-1712.