蘇晶 張冬梅
【摘 要】基本路徑測試是應用最廣泛且測試覆蓋率較強的一種動態(tài)白盒測試方法,但該方法在處理連鎖選擇結構時存在局限性。在分析了基本路徑測試法和正交試驗法的特點后,本文通過示例闡述了兩者結合的測試方案,該方案可提高測試的效率和有效性。
【關鍵詞】基本路徑測試;正交試驗法;連鎖選擇
中圖分類號: TP311.53 文獻標識碼: A 文章編號: 2095-2457(2018)27-0156-002
DOI:10.19694/j.cnki.issn2095-2457.2018.27.069
【Abstract】Basic path testing is one of the most widely used dynamic white-box testing methods with high test coverage,but it has limitations in dealing with chain selection structures.After analyzing the characteristics of the basic path testing and the orthogonal test, this paper elaborates the test scheme of the combination of the two methods through examples,which can improve the efficiency and effectivenessof the test.
【Key words】Basic path testing;Orthogonal experiment;Chain selection
0 前言
基本路徑測試是McCabe提出的一種動態(tài)白盒測試方法,該方法設計出的測試用例可保證在被測程序的每一條可執(zhí)行語句上至少執(zhí)行一次,而且每個條件在執(zhí)行時都能夠取到真假兩種值。因此該方法具有較強的覆蓋率和較好的測試效果,且應用最為廣泛。但該方法在處理連鎖選擇結構時,會出現(xiàn)獨立路徑難以確定、測試路徑覆蓋不均衡等問題,因此需要借助正交試驗法進行路徑的科學采樣,以提高測試的效率和有效性。
1 基本路徑測試面臨問題
1.1 基本路徑測試簡介
基本路徑測試[1,2]是在程序控制流程圖的基礎上,通過分析控制構造的環(huán)路復雜性,導出基本可執(zhí)行路徑集合,從而設計測試用例的方法。該方法包括以下4個基本步驟。
(1)繪制程序控制流程圖
控制流程圖是描述程序控制流的一種圖示方式,是對程序流程圖的簡化,可以更加突出的表示程序控制流的結構??刂屏鞒虉D中包括結點和控制流線兩種圖形符號
(2)計算程序環(huán)路復雜性
環(huán)路復雜性是定量度量程序邏輯復雜度的一種尺度,在數(shù)量上表現(xiàn)為獨立路徑的條數(shù),是確保程序控制流程圖中每條控制流線至少覆蓋一次所必須的測試用例數(shù)目的上界。
(3)確定獨立路徑集合
獨立路徑是指至少引入被測程序的一個新的可執(zhí)行語句集或者一條新的條件路徑。由獨立路徑組成的基本路徑集合并不唯一,但每條路徑是唯一的。
(4)設計測試用例
根據(jù)程序判定結點給出的條件,選擇適當?shù)臄?shù)據(jù)以保證某一條路徑可以被測試到,設計測試用例的輸入數(shù)據(jù)和預期輸出,確保基本路徑集中的每一條路徑的執(zhí)行。
1.2 基本路徑測試的局限性
當程序中判定多于一個時,形成的復雜選擇結構可以分為兩類:嵌套選擇結構和連鎖選擇結構。
對于嵌套選擇結構,若有n個判定語句,則其路徑總數(shù)為n+1,其數(shù)目與基本路徑測試法中獨立路徑數(shù)目相同,則滿足基本路徑覆蓋的測試用例,即可實現(xiàn)對路徑的100%覆蓋。
對于連鎖選擇結構,若有n個判定語句,則其路徑總數(shù)為2n,為了達成路徑覆蓋,需至少設計2n個測試用例,這種做法,雖然可保證測試的完備性,但隨著n的數(shù)目的不斷增加,測試路徑呈現(xiàn)指數(shù)級的增長趨勢,在有限時間和成本的條件下,無法保證測試的效率。
為了減輕測試負擔,可采用基本路徑測試法選取測試用例,其獨立路徑數(shù)目為n+1,與嵌套選擇結構的路徑數(shù)量級一致,可有效提高測試效率。但與此同時,也帶來了新的問題。若從2n條總路徑中隨機挑選n條路徑,并使其滿足基本路徑覆蓋準則,一方面路徑集合難以確定;另一方面,即使獲取了路徑集合,卻未必兼顧多個連鎖分支間的關聯(lián)關系,不能保證測試路徑的均勻分布。
綜上所述,在連鎖選擇結構的基本路徑測試中,需要借助于路徑的科學采樣方法,使得獨立路徑難以確定、測試路徑覆蓋不均衡等問題能夠得到妥善解決。
1.3 正交試驗法的引入
正交試驗法是從大量的試驗點中挑選出適量的、有代表性的點,應用伽羅瓦理論導出的正交表,合理安排實驗的一種科學的試驗設計方法。利用這種方法,可使所有的因子和水平在試驗中均勻的分配與搭配,均勻規(guī)律的變化[3]。軟件功能測試作為試驗的一種,完全可以利用正交試驗法進行測試數(shù)據(jù)的選擇,以提高測試的效率。
正交表應用在軟件測試中的表示形式為:
L測試用例數(shù)(輸入條件取值數(shù)輸入條件數(shù))
利用正交試驗法設計測試用例,較使用其他方法具有如下優(yōu)點[4]:
(1)節(jié)省測試工作工時。由于把現(xiàn)成的規(guī)范化的正交表直接應用到測試用例選取中,不需要多步驟的推導,也不需要豐富的經驗和創(chuàng)造力,可以有效減輕測試者的負擔。
(2)可控制生成測試用例的數(shù)量。利用加權篩選,考慮測試輸入條件與條件取值的重要程度及條件間的相互影響,做出一定的篩選,可以把生成測試用例的數(shù)量控制在允許范圍內。
(3)測試用例具有一定的覆蓋度。正交試驗法是一種合理的、有效的抽樣方法,對被測軟件來說,測試用例的涉及范圍在整體上比較均勻,可排除偏向于功能某個局部的可能性,與結構測試相配合,檢出故障率可高達50%以上。
通過上述分析可以看出,正交試驗法是科學有效的采樣方法,可應用于獨立路徑的確定過程中,以達到提高測試效率和有效性的目的。
2 連鎖選擇結構的測試方案
以下是被測試源代碼。
public static int test(int a,int b,int c){
1 int x=1;
2 if(a>=1)
3 x=x/a;
4 if(b==2)
5 x=x+2;
6 if(c<3)
7 x=x-1;
8 return x;
9 }
采用基本路徑測試法和正交試驗法生成測試用例的步驟如下。
(1)根據(jù)被測源代碼導出的程序控制流程圖如圖1所示。
(2)依據(jù)程序控制流圖計算環(huán)路復雜性。
McCabe給出了程序環(huán)路復雜性的三種計算方法。
①將環(huán)路復雜性定義為程序控制流程圖中的區(qū)域數(shù),則V(G)=區(qū)域數(shù)=4。
②設E為程序控制流程圖的邊數(shù),N為圖的結點數(shù),則定義環(huán)路復雜性為V(G)=E-N+2=4。
③設P為程序控制流圖中的判定結點數(shù),判定結點即為圖中出度大于1的結點,則定義環(huán)路復雜性為V(G)=P+1=4。
(3)根據(jù)程序環(huán)路復雜性確定獨立路徑數(shù)目。
該程序為連鎖選擇結構,總路徑數(shù)為23=8,而依據(jù)步驟(2)計算出的環(huán)路復雜性,表明最多只需確定4條獨立路徑,即可保證程序控制流程圖中每個結點及每條控制流線的覆蓋。
(4)借助正交試驗法進行路徑科學采樣,確定獨立路徑集合[5]。
通過分析可以看出,輸入條件的個數(shù)即為判定結點個數(shù)3;由于判定結點均為邏輯值,則輸入條件取值數(shù)為2。由此選擇出合適的二水平正交表L4(23),如表1所示。
將正交表中的值0映射為判定結點取假分支,值1映射為判定結點取真分支,則從8條路徑中采樣出的4條路徑分別為:
P1:1-2-4-6-8-9
P2:1-2-3-4-6-7-8-9
P3:1-2-4-5-6-7-8-9
P4:1-2-3-4-5-6-8-9
其中P4未包含之前3條路徑未訪問過的結點或弧,因此不需加入獨立路徑集合。
(5)設計測試用例。
根據(jù)獨立路徑集合中的3條獨立路徑,設計滿足基本路徑覆蓋的測試用例:
①覆蓋P1:a=0,b=1,c=3,預期輸出x=1;
②覆蓋P2:a=1,b=0,c=1,預期輸出x=0;
③覆蓋P3:a=0,b=2,c=1,預期輸出x=2。
3 結論
采用基本路徑測試法分析路徑,正交試驗法對路徑進行科學采樣,兩種測試方法雙劍合璧,可以有效解決連鎖選擇結構的測試問題。一方面,大大減少了測試用例的數(shù)量,力爭用盡可能少的測試發(fā)現(xiàn)盡可能多的缺陷,保證了測試的效率;另一方面,測試用例不僅滿足基本路徑的覆蓋準則,而且能夠實現(xiàn)每個判定結點取值的均勻分配及判定結點取值間兩兩組合的均勻搭配,保證了測試的有效性。
【參考文獻】
[1]佟偉光.軟件測試(第二版)[M].北京:人民郵電出版社, 2015.
[2]佘鳳.淺談白盒測試之基本路徑測試方法研究[J].軟件工程師,2014,(12):17-18.
[3]王蕾.基于正交試驗法的測試用例設計[J].電腦知識與技術,2010,6(21):5782-5783.
[4]鄭人杰.軟件測試[M].北京:人民郵電出版社,2011.
[5]向華.關于白盒測試基本方法的分析[J].江漢大學學報(自然科學版),2003,(1):38-41.