張 侹,吳 強,王 華
1.西安測繪研究所,陜西 西安,710054;2.地理信息工程國家重點實驗室,陜西 西安,710054
?
改進的回歸測試中測試用例優(yōu)先級排序技術
張侹1,2,吳強1,2,王華1,2
1.西安測繪研究所,陜西 西安,710054;2.地理信息工程國家重點實驗室,陜西 西安,710054
測試用例優(yōu)先級排序技術是回歸測試中提高測試效率的一種有效手段。針對回歸測試中測試用例的選擇和執(zhí)行問題,改進了原有方法中僅從軟件需求角度出發(fā)的測試用例排序技術,提出了一種基于軟件質量信息的測試用例優(yōu)先級排序技術,將上一輪測試結果中與軟件質量信息相關的故障密度、問題密度、非法用例問題密度等方面的內容應用于測試用例的優(yōu)先級排序中。實驗結果表明,改進后的測試用例排序技術能夠更快地提高軟件缺陷檢測率,降低測試成本。
測試用例; 回歸測試; 優(yōu)先級排序; 質量信息
回歸測試是軟件演化過程中一項頻繁進行且開銷巨大的任務,有研究表明,回歸測試階段的耗費甚至會占到軟件維護總費用的三分之一以上[1]。隨著軟件規(guī)模的不斷增大,回歸測試的工作量也在不斷增加,其測試周期和成本也在不斷加大。目前,常見的回歸測試類型包括全部回歸、改錯型回歸等。其中,全部回歸是重新測試以前所設計的全部測試用例,這種回歸類型能夠有效覆蓋修改后的被測軟件,對于系統(tǒng)規(guī)模較小的被測軟件較為適用,但是對于測試數(shù)據(jù)較大、改動較小的被測軟件而言,這一回歸策略會造成大量的時間和人力資源浪費;改錯型回歸是針對軟件測試過程中發(fā)現(xiàn)的錯誤進行的回歸測試,該方法能夠有效解決全部回歸中資源浪費的問題,但卻難以保證在被測軟件修改后,軟件中未修改的部分不會受到影響而產生新的問題。綜上所述,由于工程實踐中的回歸測試行為與被測軟件規(guī)模息息相關,且常受到時間和人員等資源的限制,因此,為了提高回歸測試的效率,縮短測試周期,提升測試的有效性和準確性,就必須在回歸測試中對測試用例的選擇采用一定的策略,提高測試的執(zhí)行效率。
目前,科研人員針對回歸測試中測試用例的選擇和使用問題展開了大量的研究工作,如:測試用例的選擇、測試用例集約簡以及測試用例優(yōu)先級排序等。測試用例優(yōu)先級排序技術作為提高回歸測試效率的一種重要手段,是根據(jù)不同條件充分考慮測試用例的重要程度,賦予每個測試用例一個優(yōu)先級,使測試人員可以依據(jù)優(yōu)先級由高到低依次選擇執(zhí)行測試用例,從而能夠在有限的資源下運行更多有效的測試用例,保證了軟件質量。
測試用例優(yōu)先級排序問題是一種著重研究回歸測試中測試用例使用策略的問題。測試用例優(yōu)先級排序技術認為,不同測試用例對于發(fā)現(xiàn)軟件缺陷和測試目標的完成有著不同的貢獻程度,為了能夠更快地達成測試目標,有必要將不同的測試用例進行比較和排序,然后優(yōu)先執(zhí)行相對重要的測試用例[2,3]。
文獻[2]將測試用例優(yōu)先級形式化的描述為:T是給定的測試用例集,PT是T上的全排列,f是PT到實數(shù)集的一個映射,測試用例優(yōu)先級技術的研究目標就是找到一個排列T′,T′∈PT都有(?T″)(T″∈PT∧T″≠T′)→[f(T″)≤f(T′)]。通常情況下,f是對排序目標的定量描述,用以度量排序的有效性,且f的值越大越好。
目前,圍繞回歸測試用例優(yōu)先級排序問題主要在尋找影響測試用例優(yōu)先級的因素等方面展開[3]。其中,文獻[4]、[5]從軟件需求的角度將與軟件需求相關的影響因素應用于測試用例的優(yōu)先級排序;文獻[6]從軟件測試發(fā)現(xiàn)問題級別和類型等角度將與軟件錯誤相關的因素應用于測試用例優(yōu)先級排序。盡管這些方法在提高測試效率方面都取得了一定的成果,但是,上述這些排序方法僅從單方面研究了測試用例的優(yōu)先級排序問題,忽略了軟件本身的質量因素,沒有充分考慮需求與已經執(zhí)行用例結果之間的關系。
本文從軟件需求、軟件規(guī)模、測試用例數(shù)量類型以及所發(fā)現(xiàn)問題的角度出發(fā),充分利用上一輪軟件測試的結果,引入與軟件需求中功能點成熟性、健壯性等質量信息相關的一種影響因素和兩個影響因子,具體為:影響因素故障密度和影響因子問題密度及非法用例問題密度。
3.1故障密度
故障密度是反映軟件成熟性的一個重要度量,是計算每一千行代碼所產生的故障個數(shù)。故障密度值越大,說明該功能模塊在上一輪測試中發(fā)現(xiàn)的問題越多,軟件質量越低,因此,與該功能模塊相關的軟件測試用例執(zhí)行的優(yōu)先級也就越高。通過公式(1)可以量化得到第n個測試用例的故障密度FI,其取值范圍為正數(shù)。
(1)
FIn計算了第n個測試用例所測試的軟件需求中功能點在上一輪測試中每千行代碼所發(fā)生的錯誤率,其中,F(xiàn)Nn表示第n個測試用例在上一輪測試中其所在功能點所發(fā)現(xiàn)的問題總數(shù),RTLn為實現(xiàn)對應功能點的代碼行數(shù)。
3.2問題密度
作為反映軟件成熟性的另一個重要指標,問題密度是檢測的軟件失效個數(shù)和執(zhí)行測試用例個數(shù)的一個比例。與故障密度的概念不同,問題密度中所涉及的軟件測試問題是由軟件通過執(zhí)行測試用例后所體現(xiàn)出一種動態(tài)行為;而故障密度中所涉及的軟件故障則是軟件本身所客觀存在的缺陷,是一個靜態(tài)概念。
問題密度越大,說明上一輪測試中針對該功能模塊設計測試用例所發(fā)現(xiàn)的問題也越多,這一組測試用例執(zhí)行效率越高。通過公式(2)可以量化得到問題密度的影響因子ΦFI,其取值范圍為[0,1]。
(2)
ΦFI計算了第n個測試用例所在軟件需求中功能點在上一輪測試中的問題密度,其中,ENn表示第n個測試用例在上一輪測試中其所在功能點所發(fā)現(xiàn)的問題總數(shù),TNn為針對該功能點所設計的測試用例的總數(shù)。
3.3非法用例問題密度
非法用例問題密度是反映軟件健壯性的一個重要度量,使軟件對未能避免故障模式的個數(shù)(即:未能通過的非法測試用例個數(shù))進行計數(shù),并與考慮到的故障模式的個數(shù)(即:設計的非法測試用例的個數(shù))相比較。非法用例的問題密度越大,說明軟件對非法輸入的容錯能力越差,軟件的健壯性越低。通過公式(3)可以量化得到非法用例問題密度的影響因子ΦITEI,其取值范圍為[0,1]。
(3)
ΦITEI計算了第n個測試用例所在軟件需求中功能點在上一輪測試中的非法用例問題密度,其中,ITENn表示第n個測試用例在上一輪測試中其所在功能點所發(fā)現(xiàn)的非法測試用例對應的問題總數(shù),ITNn為針對該功能點所設計的非法測試用例的總數(shù)。
3.4 測試用例排序算法
文獻[5]從軟件需求的角度給出了回歸測試第n個測試用例的優(yōu)先級取值RPn的計算公式,通過引入與軟件質量信息相關的影響因子,將基于軟件質量信息的優(yōu)先級取值IRPn進行定義。
由于故障密度反映的是軟件本身的質量特性,故將其作為優(yōu)先級取值中的影響因素;而問題密度與非法用例問題密度反映了針對需求所設計測試用例的相關信息,故將其以影響因子的形式作為相關需求的系數(shù)引入計算公式中。具體計算方法如公式(4)所示:
IRPn=RDn+ΦFI*RIn+ΦITEI*RCn+RSn+FIn
(4)
回歸測試前,根據(jù)測試用例優(yōu)先級影響因素和相關影響因子,依據(jù)公式計算單個測試用例的優(yōu)先級,并依據(jù)基于軟件質量信息的回歸測試用例排序算法進行計算。具體算法描述如下:
算法:基于軟件質量信息的測試用例排序算法。
輸入:程序P的測試用例集T;各功能模塊的軟件規(guī)模集L(即代碼行數(shù))、測試用例總數(shù)集TC、非法用例總數(shù)集ITC、問題總數(shù)集E。
輸出:排序后的測試用例集T′。
Begin
T' = φ;
for(n = 1; n < |T|; t++)
{IRPn= RDn+φEI*RIn+φITEI* RCn+ RSn+ FIn}
Sort(IRPn);
T' = IRPn
Output(T');
End
4.1度量標準
為了對不同優(yōu)先級排序方法所得到的測試用例集的測試效率進行評估,就需要通過采用缺陷檢測加權平均百分比APFD(average of the percentage of faults detected)作為度量標準進行比較分析[2]。在通過APFD所繪制的測試用例執(zhí)行情況圖中,橫坐標代表測試用例的執(zhí)行情況,縱坐標代表測試用例執(zhí)行后所發(fā)現(xiàn)的缺陷監(jiān)測情況,通常情況下,APFD的值越大,說明對應的測試用例排序檢測到缺陷的速度越快。
Elbaum等給出了APFD的計算方法[7],如公式(5)所示。
(5)
其中,n表示測試用例集T中所包含的測試用例總數(shù),m表示缺陷集合F中所包含的缺陷數(shù),TFi表示順序集T′中第一個檢測出錯誤i的測試用例的序號。通過公式(5)就可以計算出順序集T′的APFD值,其取值范圍是[0,1]。不同測試用例順序集中,APFD的值越高表示對應測試用例順序集檢測錯誤的效率相對越高。
4.2實驗分析
為了對改進后的回歸測試用例排序技術的有效性進行分析,論文選取了某軟件P進行測試與分析。根據(jù)軟件需求,共設計測試用例164個,回歸測試重復執(zhí)行三次,分別是未排序的測試用例執(zhí)行情況、采用文獻[5]排序后的測試用例執(zhí)行情況、改進方法排序后的測試用例執(zhí)行情況。軟件P三次回歸測試用例集得APFD值分別為0.62,0.75和0.79,三次執(zhí)行的缺陷發(fā)現(xiàn)情況如圖1所示。
圖1 軟件P三次執(zhí)行的缺陷檢測情況圖
通過實驗發(fā)現(xiàn):
(1)對于被測程序P而言,與不進行排序的測試情況相比,采用文獻[5]和本文所提出的任意一種回歸測試用例優(yōu)先級排序策略后,測試用例集的執(zhí)行效率都得到了明顯的改善,能夠提高缺陷的檢測效率。
(2)在基于需求的回歸測試用例排序技術中通過引入前一輪次的測試結果,即軟件成熟性和健壯性的質量信息,基于軟件質量信息的優(yōu)先級排序算法比原有基于需求的優(yōu)先級排序算法發(fā)現(xiàn)缺陷的效率有所改進。
改進后的回歸測試用例優(yōu)先級排序技術,從上一輪軟件測試所獲取軟件質量信息的角度出發(fā),通過在基于需求的優(yōu)先級排序算法中分別引入影響因素和影響因子,對回歸測試用例集中無序混亂的測試用例進行優(yōu)先級排序,得到測試用例的優(yōu)先級執(zhí)行取值,再通過執(zhí)行排序后的測試用例,可以有效提升測試效率,改善測試效果。在后續(xù)的工作中,可以在測試執(zhí)行時動態(tài)調整優(yōu)先級算法等相關領域進行研究。
[1]Rothermel G, Harrold M J. Analyzing Regression Test Selection Techniques [J]. IEEE Transactions on Software Engineering, 1996, 22(8): 529-551.
[2]Rothermel G, Untch R H, Chu C Y, et al. Prioritizing Test Cases for Regression Testing [J]. IEEE Transactions on Software Engineering, 2001, 27(10): 929-948.
[3]屈波, 聶長海, 徐寶文. 回歸測試中測試用例優(yōu)先級技術研究綜述[J]. 計算機科學與探索, 2009, 3(3): 225-233.
[4]楊廣華,包陽,李東紅等. 基于需求的測試用例優(yōu)先級排序[J]. 計算機工程與設計, 2011, 32(8): 2724-2728.
[5]李華瑩, 柴麗雅. 由需求得到回歸測試用例排序技術[J]. 計算機技術與發(fā)展, 2013, 23(11): 70-73.
[6]李華瑩, 胡兢玉. 回歸測試用例優(yōu)先級排序技術研究[J]. 計算機仿真, 2013, 30(10): 298-301.
[7]Elbaum S, Rothermel G, Kanduri S, et al. Selecting a Cost-effective Test Case Prioritization Technique [J]. Software Quality Journal, 2004, 12(3): 185-210.
Improved Technique of Test Case Prioritization in Regression Testing
Zhang Ting1, 2, Wu Qiang1, 2, Wang Hua1, 2
1. Xi’an Research Institute of Surveying and Mapping, Xi’an 710054, China 2. State Key Laboratory of Geo-information Engineering, Xi’an 710054, China
Test case prioritization technique is an effective way to improve the efficiency of regression testing. To solve the problem of test case selection and execution in regression testing, the old prioritization technique based on software requirements is improved, and a new technique based on software quality information is put forward. With the new method, the densities of faults, errors and illegal test cases connected with the software quality information of last round of test results are taken into account in the test case prioritization. The experiment result shows that the improved technique can increase the efficiency of error detection and reduce the testing cost.
test case; regression testing; prioritization; quality information
2015-09-11。
張侹(1984—),男,工程師,主要從事軟件測評研究。
TP751.1
A