版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
白盒測試及其實測案例設(shè)計第4章白盒測試及其實例設(shè)計4.1邏輯覆蓋測試
4.2路徑分析測試
4.3其他白盒測試方法
4.4實例設(shè)計
小結(jié)
白盒測試及其實測案例設(shè)計本章概述白盒測試是軟件測試實踐中最為有效和實用的方法之一。白盒測試是基于程序的測試,檢測產(chǎn)品的內(nèi)部結(jié)構(gòu)是否合理以及內(nèi)部操作是否按規(guī)定執(zhí)行,覆蓋測試與路徑測試是其兩大基本策略。本章重點圍繞邏輯覆蓋和路徑分析展開介紹常見的白盒測試方法,并通過實例說明如何實際運用白盒測試技術(shù)。白盒測試及其實測案例設(shè)計4.1邏輯覆蓋測試
白盒測試技術(shù)的常見方法之一就是覆蓋測試,它是利用程序的邏輯結(jié)構(gòu)設(shè)計相應(yīng)的測試用例。測試人員要深入了解被測程序的邏輯結(jié)構(gòu)特點,完全掌握源代碼的流程,才能設(shè)計出恰當(dāng)?shù)挠美?。根?jù)不同的測試要求,覆蓋測試可以分為語句覆蓋、判斷覆蓋、條件覆蓋、判斷/條件覆蓋、條件組合覆蓋和路徑覆蓋。下面是一段簡單的C語言程序,作為公共程序段來說明五種覆蓋測試的各自特點。程序4-1:1 If(x>100&&y>500)then2 score=score+13 If(x>=1000||z>5000)then4 score=score+5白盒測試及其實測案例設(shè)計圖4-1程序流程圖白盒測試及其實測案例設(shè)計語句覆蓋語句覆蓋(StatementCoverage)是指設(shè)計若干個測試用例,程序運行時每個可執(zhí)行語句至少被執(zhí)行一次。在保證完成要求的情況下,測試用例的數(shù)目越少越好。以下是針對公共程序段設(shè)計的兩個測試用例:TestCase1:x=2000,y=600,z=6000TestCase2:x=900,y=600,z=6000判斷覆蓋判斷覆蓋(BranchCoverage)是指設(shè)計若干個測試用例,執(zhí)行被測試程序時,程序中每個判斷條件的真值分支和假值分支至少被執(zhí)行一遍。在保證完成要求的情況下,測試用例的數(shù)目越少越好。判斷覆蓋又稱為分支覆蓋。以下是針對公共程序段設(shè)計的兩個測試用例:TestCase1:x=2000,y=600,z=6000TestCase3:x=50,y=600,z=2000白盒測試及其實測案例設(shè)計條件覆蓋條件覆蓋(ConditionCoverage)是指設(shè)計若干個測試用例,執(zhí)行被測試程序時,程序中每個判斷條件中的每個判斷式的真值和假值至少被執(zhí)行一遍。測試用例組5:TestCase6:50,600,6000TestCase7:2000,200,1000白盒測試及其實測案例設(shè)計判斷/條件覆蓋判斷/條件覆蓋是指設(shè)計若干個測試用例,執(zhí)行被測試程序時,程序中每個判斷條件的真假值分支至少被執(zhí)行一遍,并且每個判斷條件的內(nèi)部判斷式的真假值分支也要被執(zhí)行一遍。測試用例組6:TestCase1:x=2000,y=600,z=2000TestCase6:x=2000,y=200,z=6000TestCase7:x=2000,y=600,z=2000TestCase8:x=50,y=200,z=2000白盒測試及其實測案例設(shè)計條件組合覆蓋條件組合覆蓋是指設(shè)計若干個測試用例,執(zhí)行被測試程序時,程序中每個判斷條件的的內(nèi)部判斷式的各種真假組合可能都至少被執(zhí)行一遍??梢姡瑵M足條件組合覆蓋的測試用例組一定滿足判斷覆蓋、條件覆蓋和判斷/條件覆蓋。測試用例組7:TestCase1:x=2000,y=600,z=2000TestCase6:x=2000,y=200,z=6000TestCase7:x=2000,y=600,z=2000TestCase8:x=50,y=200,z=2000白盒測試及其實測案例設(shè)計路徑覆蓋路徑覆蓋(PathCoverage)要求設(shè)計若干測試用例,執(zhí)行被測試程序時,能夠覆蓋程序中所有的可能路徑。測試用例組8:TestCase1:x=2000,y=600,z=6000TestCase3:x=50,y=600,z=2000TestCase4:x=2000,y=600,z=2000TestCase7:x=2000,y=200,z=1000白盒測試及其實測案例設(shè)計應(yīng)該注意的是,上面6種覆蓋測試方法所引用的公共程序只有短短4行,是一段非常簡單的示例代碼。然而在實際測試程序中,一個簡短的程序,其路徑數(shù)目是一個龐大的數(shù)字。要對其實現(xiàn)路徑覆蓋測試是很難的。所以,路徑覆蓋測試是相對的,盡可能把路徑數(shù)壓縮到一個可承受范圍。當(dāng)然,即便對某個簡短的程序段做到了路徑覆蓋測試,也不能保證源代碼不存在其他軟件問題了。其他的軟件測試手段也必要的,它們之間是相輔相成的。沒有一個測試方法能夠找盡所有軟件缺陷,只能說是盡可能多地查找軟件缺陷。白盒測試及其實測案例設(shè)計4.2路徑分析測試4.2.1控制流圖白盒測試是針對軟件產(chǎn)品內(nèi)部邏輯結(jié)構(gòu)進(jìn)行測試的,測試人員必須對測試中的軟件有深入的理解,包括其內(nèi)部結(jié)構(gòu)、各單元部分及之間的內(nèi)在聯(lián)系,還有程序運行原理等等。因而這是一項龐大并且復(fù)雜的工作。為了更加突出程序的內(nèi)部結(jié)構(gòu),便于測試人員理解源代碼,可以對程序流程圖進(jìn)行簡化,生成控制流圖(ControlFlowGraph)。簡化后的控制流圖是由節(jié)點和控制邊組成的??刂屏鲌D有以下幾個特點:具有唯一入口節(jié)點,即源節(jié)點,表示程序段的開始語句;具有唯一出口節(jié)點,即匯節(jié)點,表示程序段的結(jié)束語句;節(jié)點由帶有標(biāo)號的圓圈表示,表示一個或多個無分支的源程序語句;控制邊由帶箭頭的直線或弧表示,代表控制流的方向。白盒測試及其實測案例設(shè)計圖4-2常見的控制流圖白盒測試及其實測案例設(shè)計程序環(huán)路復(fù)雜性
程序的環(huán)路復(fù)雜性是一種描述程序邏輯復(fù)雜度的標(biāo)準(zhǔn),該標(biāo)準(zhǔn)運用基本路徑方法,給出了程序基本路徑集中的獨立路徑條數(shù),這是確保程序中每個可執(zhí)行語句至少執(zhí)行一次所必需的測試用例數(shù)目的上界。給定一個控制流圖G,設(shè)其環(huán)形復(fù)雜度為V(G),在這里介紹三種常見的計算方法來求解V(G)。
(1)V(G)=E-N+2,其中E是控制流圖G中邊的數(shù)量,N是控制流圖中節(jié)點的數(shù)目。
(2)V(G)=P+1,其中P是控制流圖G中判斷節(jié)點的數(shù)目。
(3)V(G)=A,其中A是控制流圖G中區(qū)域的數(shù)目。由邊和結(jié)點圍成的區(qū)域叫做區(qū)域,當(dāng)在控制流圖中計算區(qū)域的數(shù)目時,控制流圖外的區(qū)域也應(yīng)記為一個區(qū)域。
白盒測試及其實測案例設(shè)計4.2.2獨立路徑測試
從前面學(xué)過的覆蓋測試一節(jié)中可知,對于一個較為復(fù)雜的程序要做到完全的路徑覆蓋測試是不可能實現(xiàn)的。既然路徑覆蓋測試無法達(dá)到,那么可以對某個程序的所有獨立路徑進(jìn)行測試,也就是說檢驗了程序的每一條語句,從而達(dá)到語句覆蓋,這種測試方法就是獨立路徑測試方法。從控制流圖來看,一條獨立路徑是至少包含有一條在其它獨立路徑中從未有過的邊的路徑。路徑可以用控制流圖中的節(jié)點序列來表示。例如,在如圖4-3所示的控制流圖中,一組獨立的路徑是
path1:1-11
path2:1-2-3-4-5-10-1-11
path3:1-2-3-6-8-9-10-1-11
path4:1-2-3-6-7-9-10-1-11
路徑path1,path2,path3,path4組成了控制流圖的一個基本路徑集。白盒測試及其實測案例設(shè)計圖4-3控制流圖示例白盒測試及其實測案例設(shè)計獨立路徑測試的步驟包括3個方面:導(dǎo)出程序控制流圖求出程序環(huán)形復(fù)雜度設(shè)計測試用例(TestCase)白盒測試及其實測案例設(shè)計程序4-2:1 main()2 {3 intnum1=0,num2=0,score=100;4 inti;5 charstr;6 scanf(“%d,%c\n”,&i,&str);7 while(i<5)8 {9 if(str=’T’)10 num1++;11 elseif(str=’F’)12 {13 score=score-10;14 num2++;15 }16 i++;17 }18 printf(“num1=%d,num2=%d,score=%d\n”,num1,num2,score);19 }白盒測試及其實測案例設(shè)計1.導(dǎo)出程序控制流圖 根據(jù)源代碼可以導(dǎo)出程序的控制流圖,如圖4-4所示。每個圓圈代表控制流圖的節(jié)點,可以表示一個或多個語句。圓圈中的數(shù)字對應(yīng)程序中某一行的編號。箭頭代表邊的方向,即控制流方向。圖4-4程序4-2的控制流圖白盒測試及其實測案例設(shè)計2.求出程序環(huán)形復(fù)雜度根據(jù)程序環(huán)形復(fù)雜度的計算公式,求出程序路徑集合中的獨立路徑數(shù)目。公式1:V(G)=10-8+2,其中10是控制流圖G中邊的數(shù)量,8是控制流圖中節(jié)點的數(shù)目。公式2:V(G)=3+1,其中3是控制流圖G中判斷節(jié)點的數(shù)目。公式3:V(G)=4,其中4是控制流圖G中區(qū)域的數(shù)目。因此,控制流圖G的環(huán)形復(fù)雜度是4。就是說至少需要4條獨立路徑組成基本路徑集合,并由此得到能夠覆蓋所有程序語句的測試用例。白盒測試及其實測案例設(shè)計3.設(shè)計測試用例根據(jù)上面環(huán)形復(fù)雜度的計算結(jié)果,源程序的基本路徑集合中有4條獨立路徑:路徑1:7->18路徑2:7->9->10->16->7->18路徑3:7->9->11->15->16->7->18路徑4:7->9->11->13->14->15->16->7->18根據(jù)上述4條獨立路徑,設(shè)計了測試用例組9,如表4-9所示。測試用例組9中的4個測試用例作為程序輸入數(shù)據(jù),能夠遍歷這4條獨立路徑。對于源程序中的循環(huán)體,測試用例組9中的輸入數(shù)據(jù)使其執(zhí)行零次或一次。白盒測試及其實測案例設(shè)計表4-9測試用例組9
測試用例輸入期望輸出執(zhí)行路徑istrnum1num2scoreTestCase15‘T’00100路徑1TestCase24‘T’10100路徑2TestCase34‘A’00100路徑3TestCase44‘F’0190路徑4白盒測試及其實測案例設(shè)計程序4-3:1 if(aorb)2 then3 procedurex4 else5 procedurey;6 …
…對應(yīng)的控制流圖如圖4-5所示,程序行1的a,b都是獨立的判斷節(jié)點,還有程序行4也是判斷節(jié)點,所以共計3個判斷節(jié)點。圖4-5的環(huán)形復(fù)雜度為V(G)=3+1,其中3是圖4-5中判斷節(jié)點的數(shù)目。白盒測試及其實測案例設(shè)計圖4-5程序4-3的控制流圖白盒測試及其實測案例設(shè)計4.2.3Z路徑覆蓋測試
Z路徑覆蓋是路徑覆蓋面的一種變體。對于語句較少的簡單程序,路徑覆蓋是具有可行性的。但是對于源代碼很多的復(fù)雜程序,或者對于含有較多條件語句和較多循環(huán)體的程序來說,需要測試的路徑數(shù)目會成倍增長,達(dá)到一個巨大數(shù)字,以至于無法實現(xiàn)路徑覆蓋。為了解決這一問題,采用簡化循環(huán)方法的路徑覆蓋就是Z路徑覆蓋。所謂簡化循環(huán)就是減少循環(huán)的次數(shù)。不考慮循環(huán)體的形式和復(fù)雜度如何,也不考慮循環(huán)體實際上需要執(zhí)行多少次,只考慮通過循環(huán)體零次和一次這兩種情況。這里的零次循環(huán)是指跳過循環(huán)體,從循環(huán)體的入口直接到循環(huán)體的出口。通過一次循環(huán)體是指檢查循環(huán)初始值。如圖4-6(a)和圖4-6(b)所示表示了兩種最典型的循環(huán)控制結(jié)構(gòu)。圖4-6(a)是先比較循環(huán)條件后執(zhí)行循環(huán)體,循環(huán)體B可能執(zhí)行也可能不被執(zhí)行。限定循環(huán)體B執(zhí)行零次和一次,這樣就和圖4-6(c)的條件結(jié)構(gòu)一樣了。圖4-6(b)是先執(zhí)行循環(huán)體后比較循環(huán)條件。假設(shè)循環(huán)體B被執(zhí)行一次,在經(jīng)過條件判斷跳出循環(huán),那么其效果就和圖4-6(c)的條件結(jié)構(gòu)只執(zhí)行右分支的效果一樣了。一旦將循環(huán)結(jié)構(gòu)簡化為選擇結(jié)構(gòu)后,路徑的數(shù)量將大大減少,這樣就可以實現(xiàn)路徑覆蓋測試了。對于實現(xiàn)簡化循環(huán)的程序,可以將程序用路徑樹來表示。當(dāng)?shù)玫侥骋怀绦虻穆窂綐浜?,從其根?jié)點開始,一次遍歷,再回到根節(jié)點時,將所經(jīng)歷的葉節(jié)點名排列起來,就得到一個路徑。如果已經(jīng)遍歷了所有葉子節(jié)點,那就得到了所有的路徑。當(dāng)?shù)玫剿械穆窂胶螅擅總€路徑的測試用例,就可以實現(xiàn)Z路徑覆蓋測試。白盒測試及其實測案例設(shè)計圖4-6循環(huán)結(jié)構(gòu)和條件結(jié)構(gòu)白盒測試及其實測案例設(shè)計4.3其他白盒測試方法
4.3.1循環(huán)測試循環(huán)測試是一種著重循環(huán)結(jié)構(gòu)有效性測試的白盒測試方法。循環(huán)結(jié)構(gòu)測試用例的設(shè)計有以下4種模式,如圖4-7所示。圖4-7循環(huán)測試的模式白盒測試及其實測案例設(shè)計4.3.2變異測試
變異測試是一種故障驅(qū)動測試,即針對某一類特定程序故障進(jìn)行的測試,變異測試也是一種比較成熟的排錯性測試方法。它可以通過檢驗測試數(shù)據(jù)集的排錯能力來判斷軟件測試的充分性。假設(shè)對程序P進(jìn)行一些微小改動而得到程序MP,程序MP就是程序P的一個變異體。假設(shè)程序P在測試集T上是正確的,設(shè)計某一變異體集合:M={MP|MP是P的變異體},若變異體集合M中的每一個元素在T上都存在錯誤,則認(rèn)為源程序P的正確度較高,否則若M中的某些元素在T上運行正確,則可能存在以下一些情況:M中的這些變異體在功能上與源程序P是等價的;現(xiàn)有的測試數(shù)據(jù)不足以找出源程序P與其變異體之間的差別;源程序P可能產(chǎn)生故障,而其某些變異體卻是正確的。可見,測試集T和變異體集合M中的每一個變異體MP的選擇都是很重要的,它們會直接影響變異測試的測試效果??傊瑢Τ绦蜻M(jìn)行變換的方法多種多樣,具體操作要靠測試人員的實際經(jīng)驗。通過變異分析構(gòu)造測試數(shù)據(jù)集的過程是一個循環(huán)過程,當(dāng)對源程序及其變異體進(jìn)行測試后,若發(fā)現(xiàn)某些變異體并不理想,就要適當(dāng)增加測試數(shù)據(jù),直到所有變異體達(dá)到理想狀態(tài),即變異體集合中的每一個變異體在T上都存在錯誤。白盒測試及其實測案例設(shè)計4.3.3程序插裝
程序插裝是借助于在被測程序中設(shè)置斷點或打印語句來進(jìn)行測試的方法,在執(zhí)行測試的過程中可以了解一些程序的動態(tài)信息。這樣在運行程序時,既能檢驗測試的結(jié)果數(shù)據(jù),又能借助插入語句給出的信息掌握程序的動態(tài)運行特性,從而把程序執(zhí)行過程中所發(fā)生的重要事件記錄下來。程序插裝設(shè)計時主要需要考慮三方面因素:(1)需要探測哪些信息;(2)在程序的什么位置設(shè)立插裝點;(3)計劃設(shè)置多少個插裝點。插裝技術(shù)在軟件測試中主要有以下幾個應(yīng)用:覆蓋分析:程序插裝可以估計程序控制流圖中被覆蓋的程度,確定測試執(zhí)行的充分性,從而設(shè)計更好的測試用例,提高測試覆蓋率。監(jiān)控在程序的特定位置設(shè)立插裝點,插入用于記錄動態(tài)特性的語句,用來監(jiān)控程序運行時的某些特性,從而排除軟件故障。查找數(shù)據(jù)流異常程序插裝可以記錄在程序執(zhí)行中某些變量值的變化情況和變化范圍。掌握了數(shù)據(jù)變量的取值狀況,就能準(zhǔn)確地判斷是否發(fā)生數(shù)據(jù)流異常。雖然數(shù)據(jù)流異常可以用靜態(tài)分析器來發(fā)現(xiàn),但是使用插裝技術(shù)可以更經(jīng)濟更簡便,畢竟所有信息的獲取是隨著測試過程附帶得到的。白盒測試及其實測案例設(shè)計4.4實例設(shè)計
實例1運用邏輯覆蓋的方法測試程序程序4-4:1 If(x>1&&y=1)then2 z=z*23 If(x=3||z>1)then4 y++;運用邏輯覆蓋的方法設(shè)計測試用例組,如表4-10所示。白盒測試及其實測案例設(shè)計實例2運用路徑分析的方法測試程序程序4-5:1 main()2 {3 intflag,t1,t2,a=0,b=0;4scanf(“%d,%d,%d\n”,&flag,&t1,&t2);5 while(flag>0)6 {7 a=a+1;8 if(t1=1)9 then10{11 b=b+1;12 flag=0;13 }14 else15 {16 if(t2=1)17 thenb=b-1;18 elsea=a-2;19 flag--;20 }21 }22 printf(“a=%d,b=d%\n”,a,b);23 }白盒測試及其實測案例設(shè)計程序的流程圖如圖4-8所示:圖4-8程序4-5的流程圖白盒測試及其實測案例設(shè)計2.程序的控制流圖如圖4-9所示,其中R1、R2、R3和R4代表控制流圖的4個區(qū)域。R4代表的是控制流圖外的區(qū)域,也算作控制流圖的一個區(qū)域。圖4-9程序4-5的控制流圖白盒測試及其實測案例設(shè)計3.運用路徑分析的方法設(shè)計測試用例組。(1)根據(jù)程序環(huán)形復(fù)雜度的計算公式,求出程序路徑集合中的獨立路徑數(shù)目。公式1:V(G)=11-9+2,其中10是控制流圖G中邊的數(shù)量,8是控制流圖中節(jié)點的數(shù)目。公式2:V(G)=3+1,其中3是控制流圖G中判斷節(jié)點的數(shù)目。公式3:V(G)=4,其中4是控制流圖G中區(qū)域的數(shù)目。因此,控制流圖G的環(huán)形復(fù)雜度是4。(2)根據(jù)上面環(huán)形復(fù)雜度的計算結(jié)果,源程序的基本路徑集合中有4條獨立路徑:路徑1:5->22路徑2:5->7,8->11,12->21->5->22路徑3:5->7,8->16->17->19->21->5->22路徑4:5->7,8->16->18->19->21->5->22(3)設(shè)計測試用例組11如表4-11所示。根據(jù)上述4條獨立路徑設(shè)計出了這組測試用例,其中的4組數(shù)據(jù)能夠遍歷各個獨立路徑,也就滿足了路徑分析測試的要求。需要注意的是,對于源程序中的循環(huán)體,測試用例組11中的輸入數(shù)據(jù)使其執(zhí)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030全球初級沖擊式破碎機行業(yè)調(diào)研及趨勢分析報告
- 座次禮儀健康管理系施怡寧講解
- 2025個人借款樓房抵押合同范本
- 2025標(biāo)準(zhǔn)材料采購合同范本
- 打灰工班組承包合同
- 生活污水處理合同書范本年
- 墻面廣告租賃合同
- 提高人際溝通與協(xié)調(diào)的技巧
- 建筑工程施工總承包合同
- 活動板房工程合同范本
- 《民航服務(wù)溝通技巧》教案第16課民航服務(wù)人員平行溝通的技巧
- 深圳市物業(yè)專項維修資金管理系統(tǒng)操作手冊(電子票據(jù))
- 2023年鐵嶺衛(wèi)生職業(yè)學(xué)院高職單招(數(shù)學(xué))試題庫含答案解析
- 呆死帳的發(fā)生與預(yù)防課件
- 10000中國普通人名大全
- 起重機械安裝吊裝危險源辨識、風(fēng)險評價表
- 華北理工兒童口腔醫(yī)學(xué)教案06兒童咬合誘導(dǎo)
- 中國建筑項目管理表格
- 高一3班第一次月考總結(jié)班會課件
- 公共政策分析導(dǎo)論教學(xué)課件匯總完整版電子教案
- 我國油菜生產(chǎn)機械化技術(shù)(-119)
評論
0/150
提交評論