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