白盒測(cè)試技術(shù)_第1頁(yè)
白盒測(cè)試技術(shù)_第2頁(yè)
白盒測(cè)試技術(shù)_第3頁(yè)
白盒測(cè)試技術(shù)_第4頁(yè)
白盒測(cè)試技術(shù)_第5頁(yè)
已閱讀5頁(yè),還剩58頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

會(huì)計(jì)學(xué)1白盒測(cè)試技術(shù)2.1白盒測(cè)試方法2.2白盒測(cè)試的基本概念2.3覆蓋測(cè)試2.4路徑測(cè)試2.5最少測(cè)試用例數(shù)計(jì)算第1頁(yè)/共64頁(yè)本章教學(xué)目標(biāo)理論環(huán)節(jié)學(xué)習(xí)理解白盒測(cè)試方法的基本概念學(xué)習(xí)理解白盒測(cè)試的覆蓋理論學(xué)習(xí)掌握白盒測(cè)試的路徑表達(dá)學(xué)習(xí)掌握白盒測(cè)試的基本路徑測(cè)試法實(shí)踐環(huán)節(jié)通過(guò)案例運(yùn)用學(xué)習(xí)掌握覆蓋問(wèn)題的解決方法運(yùn)用基本路徑測(cè)試方法進(jìn)行實(shí)際程序測(cè)試第2頁(yè)/共64頁(yè)2.1白盒測(cè)試方法為什么要進(jìn)行白盒測(cè)試?如果所有軟件錯(cuò)誤的根源都可以追溯到某個(gè)唯一原因,那么問(wèn)題就簡(jiǎn)單了。然而,事實(shí)上一個(gè)bug常常是由多個(gè)因素共同導(dǎo)致的,如下圖所示。Return假設(shè)此時(shí)開(kāi)發(fā)工作已結(jié)束,程序送交到測(cè)試組,沒(méi)有人知道代碼中有一個(gè)潛在的被0除的錯(cuò)誤。若測(cè)試組采用的測(cè)試用例的執(zhí)行路徑?jīng)]有同時(shí)經(jīng)過(guò)x=0和y=5/x進(jìn)行測(cè)試,顯然測(cè)試工作似乎非常完善,測(cè)試用例覆蓋了所有執(zhí)行語(yǔ)句,也沒(méi)有被0除的錯(cuò)誤發(fā)生。第3頁(yè)/共64頁(yè)白盒測(cè)試方法(續(xù))白盒測(cè)試也稱結(jié)構(gòu)測(cè)試或邏輯驅(qū)動(dòng)測(cè)試,是針對(duì)被測(cè)單元內(nèi)部是如何進(jìn)行工作的測(cè)試。它根據(jù)程序的控制結(jié)構(gòu)設(shè)計(jì)測(cè)試用例,主要用于軟件或程序驗(yàn)證。白盒測(cè)試法檢查程序內(nèi)部邏輯結(jié)構(gòu),對(duì)所有邏輯路徑進(jìn)行測(cè)試,是一種窮舉路徑的測(cè)試方法。但即使每條路徑都測(cè)試過(guò)了,仍然可能存在錯(cuò)誤。因?yàn)椋焊F舉路徑測(cè)試無(wú)法檢查出程序本身是否違反了設(shè)計(jì)規(guī)范,即程序是否是一個(gè)錯(cuò)誤的程序。窮舉路徑測(cè)試不可能查出程序因?yàn)檫z漏路徑而出錯(cuò)。窮舉路徑測(cè)試發(fā)現(xiàn)不了一些與數(shù)據(jù)相關(guān)的錯(cuò)誤。第4頁(yè)/共64頁(yè)白盒測(cè)試方法(續(xù))采用白盒測(cè)試方法必須遵循以下幾條原則,才能達(dá)到測(cè)試的目的:保證一個(gè)模塊中的所有獨(dú)立路徑至少被測(cè)試一次。所有邏輯值均需測(cè)試真(true)和假(false)兩種情況。檢查程序的內(nèi)部數(shù)據(jù)結(jié)構(gòu),保證其結(jié)構(gòu)的有效性。在上下邊界及可操作范圍內(nèi)運(yùn)行所有循環(huán)。第5頁(yè)/共64頁(yè)白盒測(cè)試主要是檢查程序的內(nèi)部結(jié)構(gòu)、邏輯、循環(huán)和路徑。常用測(cè)試用例設(shè)計(jì)方法有:邏輯覆蓋法(邏輯驅(qū)動(dòng)測(cè)試)基本路徑測(cè)試方法第6頁(yè)/共64頁(yè)2.2白盒測(cè)試的基本概念2.2.1控制流圖2.2.2環(huán)形復(fù)雜度2.2.3圖矩陣Return第7頁(yè)/共64頁(yè)2.2.1

控制流圖控制流圖(可簡(jiǎn)稱流圖)是對(duì)程序流程圖進(jìn)行簡(jiǎn)化后得到的,它可以更加突出的表示程序控制流的結(jié)構(gòu)??刂屏鲌D中包括兩種圖形符號(hào):節(jié)點(diǎn)和控制流線。對(duì)于復(fù)合條件,則可將其分解為多個(gè)單個(gè)條件,并映射成控制流圖。常見(jiàn)結(jié)構(gòu)的控制流圖第8頁(yè)/共64頁(yè)常見(jiàn)結(jié)構(gòu)的控制流圖節(jié)點(diǎn)由帶標(biāo)號(hào)的圓圈表示,可代表一個(gè)或多個(gè)語(yǔ)句、一個(gè)處理框序列和一個(gè)條件判定框(假設(shè)不包含復(fù)合條件)。控制流線由帶箭頭的弧或線表示,可稱為邊。它代表程序中的控制流。其中,包含條件的節(jié)點(diǎn)被稱為判定節(jié)點(diǎn)(也叫謂詞節(jié)點(diǎn))第9頁(yè)/共64頁(yè)2.3覆蓋測(cè)試2.3.1測(cè)試覆蓋率2.3.2邏輯覆蓋法2.3.3面向?qū)ο蟮母采w2.3.4測(cè)試覆蓋準(zhǔn)則Return第10頁(yè)/共64頁(yè)2.3.1測(cè)試覆蓋率測(cè)試覆蓋率:用于確定測(cè)試所執(zhí)行到的覆蓋項(xiàng)的百分比。其中的覆蓋項(xiàng)是指作為測(cè)試基礎(chǔ)的一個(gè)入口或?qū)傩裕热缯Z(yǔ)句、分支、條件等。測(cè)試覆蓋率可以表示出測(cè)試的充分性,在測(cè)試分析報(bào)告中可以作為量化指標(biāo)的依據(jù),測(cè)試覆蓋率越高效果越好。但覆蓋率不是目標(biāo),只是一種手段。第11頁(yè)/共64頁(yè)測(cè)試覆蓋率包括功能點(diǎn)覆蓋率和結(jié)構(gòu)覆蓋率:功能點(diǎn)覆蓋率大致用于表示軟件已經(jīng)實(shí)現(xiàn)的功能與軟件需要實(shí)現(xiàn)的功能之間的比例關(guān)系。結(jié)構(gòu)覆蓋率包括語(yǔ)句覆蓋率、分支覆蓋率、循環(huán)覆蓋率、路徑覆蓋率等等。第12頁(yè)/共64頁(yè)2.3.2邏輯覆蓋法根據(jù)覆蓋目標(biāo)的不同,邏輯覆蓋又可分為語(yǔ)句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、組合覆蓋和路徑覆蓋。語(yǔ)句覆蓋:選擇足夠多的測(cè)試用例,使得程序中的每個(gè)可執(zhí)行語(yǔ)句至少執(zhí)行一次。判定覆蓋:通過(guò)執(zhí)行足夠的測(cè)試用例,使得程序中的每個(gè)判定至少都獲得一次“真”值和“假”值,也就是使程序中的每個(gè)取“真”分支和取“假”分支至少均經(jīng)歷一次,也稱為“分支覆蓋”。條件覆蓋:設(shè)計(jì)足夠多的測(cè)試用例,使得程序中每個(gè)判定包含的每個(gè)條件的可能取值(真/假)都至少滿足一次。第13頁(yè)/共64頁(yè)邏輯覆蓋法(續(xù))判定/條件覆蓋:設(shè)計(jì)足夠多的測(cè)試用例,使得程序中每個(gè)判定包含的每個(gè)條件的所有情況(真/假)至少出現(xiàn)一次,并且每個(gè)判定本身的判定結(jié)果(真/假)也至少出現(xiàn)一次?!獫M足判定/條件覆蓋的測(cè)試用例一定同時(shí)滿足判定覆蓋和條件覆蓋。組合覆蓋:通過(guò)執(zhí)行足夠的測(cè)試用例,使得程序中每個(gè)判定的所有可能的條件取值組合都至少出現(xiàn)一次。

——滿足組合覆蓋的測(cè)試用例一定滿足判定覆蓋、條件覆蓋和判定/條件覆蓋。路徑覆蓋:設(shè)計(jì)足夠多的測(cè)試用例,要求覆蓋程序中所有可能的路徑。第14頁(yè)/共64頁(yè)邏輯覆蓋法(續(xù))組合覆蓋判斷/條件覆蓋判斷覆蓋條件覆蓋語(yǔ)句覆蓋第15頁(yè)/共64頁(yè)CFA>1andB=0A=2orX>1X=X/AX=X/ATceTdb12354ADBEA>1andB=0A=2orX>1X=X/AX=X/ATceTdb12354ADBEA>1andB=0A=2orX>1X=X/AX=X/ATceTdb12354ADBEA>1andB=0A=2orX>1X=X/AX=X/ATceTdb12354ADBE第16頁(yè)/共64頁(yè)語(yǔ)句覆蓋語(yǔ)句覆蓋:選擇足夠多的測(cè)試用例,使得程序中的每個(gè)可執(zhí)行語(yǔ)句至少執(zhí)行一次。A>1andB=0A=2orX>1X=X/AX=X/ATceTdb12354ADBE測(cè)試用例A,B,X(A>1)and(B=0)A=2orX>1執(zhí)行路徑測(cè)試用例1203真(T)真(T)ace(BCEF)檢查不出and寫成or第17頁(yè)/共64頁(yè)判定覆蓋判定覆蓋:通過(guò)執(zhí)行足夠的測(cè)試用例,使得程序中的每個(gè)判定至少都獲得一次“真”值和“假”值,也就是使程序中的每個(gè)取“真”分支和取“假”分支至少均經(jīng)歷一次,也稱為“分支覆蓋”。A>1andB=0A=2orX>1X=X/AX=X/ATceTdb12354ADBE測(cè)試用例A,B,X(A>1)and(B=0)A=2orX>1執(zhí)行路徑測(cè)試用例1203真(T)真(T)ace(BCEF)測(cè)試用例2101假(-T)假(-T)abd(AD)檢查不出X>1誤寫成X<1第18頁(yè)/共64頁(yè)條件覆蓋條件覆蓋:設(shè)計(jì)足夠多的測(cè)試用例,使得程序中每個(gè)判定包含的每個(gè)條件的可能取值(真/假)都至少滿足一次。

對(duì)于第一個(gè)條件T1:A>1為真-T1:A>1為假T2:B=0為真-T2:B=0為假

對(duì)于第二個(gè)條件T3:A=2為真-T3:A=2為假T4:X>1為真-T4:X>1為假A>1andB=0A=2orX>1X=X/AX=X/ATceTdb12354ADBE測(cè)試用例A,B,X執(zhí)行路徑覆蓋條件測(cè)試用例1203ace(BCEF)T1,T2,T3,T4測(cè)試用例5111abd(AD)-T1,-T2,-T3,-T4第19頁(yè)/共64頁(yè)判定/條件覆蓋判定/條件覆蓋:設(shè)計(jì)足夠多的測(cè)試用例,使得程序中每個(gè)判定包含的每個(gè)條件的所有情況(真/假)至少出現(xiàn)一次,并且每個(gè)判定本身的判定結(jié)果(真/假)也至少出現(xiàn)一次?!獫M足判定/條件覆蓋的測(cè)試用例一定同時(shí)滿足判定覆蓋和條件覆蓋。A>1andB=0A=2orX>1X=X/AX=X/ATceTdb12354ADBE測(cè)試用例A,B,X執(zhí)行路徑覆蓋條件(A>1)and(B=0)A=2orX>1測(cè)試用例1203ace(BCEF)T1,T2,T3,T4真(T)真(T1)測(cè)試用例5111abd(AD)-T1,-T2,-T3,-T4假(-T)假(-T1)第20頁(yè)/共64頁(yè)組合覆蓋組合覆蓋:通過(guò)執(zhí)行足夠的測(cè)試用例,使得程序中每個(gè)判定的所有可能的條件取值組合都至少出現(xiàn)一次。

——滿足組合覆蓋的測(cè)試用例一定滿足判定覆蓋、條件覆蓋和判定/條件覆蓋。結(jié)合書P968種組合A>1andB=0A=2orX>1X=X/AX=X/ATceTdb12354ADBE測(cè)試用例A,B,X執(zhí)行路徑覆蓋條件覆蓋組合號(hào)測(cè)試用例1203ace(BCEF)T1,T2,T3,T41,5測(cè)試用例4211abeT1,-T2,T3,-T42,6測(cè)試用例5111abd(AD)-T1,-T2,-T3,-T44,8測(cè)試用例6103abe-T1,T2,-T3,T43,7第21頁(yè)/共64頁(yè)路徑覆蓋路徑覆蓋:設(shè)計(jì)足夠多的測(cè)試用例,要求覆蓋程序中所有可能的路徑。A>1andB=0A=2orX>1X=X/AX=X/ATceTdb12354ADBE測(cè)試用例A,B,X執(zhí)行路徑測(cè)試用例1203ace測(cè)試用例2101abd測(cè)試用例3303acd測(cè)試用例4211abe第22頁(yè)/共64頁(yè)2.4路徑測(cè)試2.4.1路徑表達(dá)式2.4.2基本路徑測(cè)試方法2.4.3循環(huán)測(cè)試方法2.4.4產(chǎn)生測(cè)試用例Return第23頁(yè)/共64頁(yè)2.4.1路徑表達(dá)式通常采用控制流圖的邊(?。┬蛄泻凸?jié)點(diǎn)序列表示某一條具體路徑,更為概括的表示方法為:(1)弧a和弧b相乘,表示為ab。(2)弧a和弧b相加,表示為a+b。路徑數(shù)的計(jì)算:在路徑表達(dá)式中,將所有弧均以數(shù)值1來(lái)代替,再進(jìn)行表達(dá)式的相乘和相加運(yùn)算,最后得到的數(shù)值即為該程序的路徑數(shù)。12345abcdef路徑表達(dá)式abdf+abef+acdf+acef第24頁(yè)/共64頁(yè)2.4.2基本路徑測(cè)試方法路徑測(cè)試就是從一個(gè)程序的入口開(kāi)始,執(zhí)行所經(jīng)歷的各個(gè)語(yǔ)句的完整過(guò)程。從廣義的角度講,任何有關(guān)路徑分析的測(cè)試都可以被稱為路徑測(cè)試。完成路徑測(cè)試的理想情況是做到路徑覆蓋,但對(duì)于復(fù)雜性大的程序要做到所有路徑覆蓋(測(cè)試所有可執(zhí)行路徑)是不可能的。在不能做到所有路徑覆蓋的前提下,如果某一程序的每一個(gè)獨(dú)立路徑都被測(cè)試過(guò),那么可以認(rèn)為程序中的每個(gè)語(yǔ)句都已經(jīng)檢驗(yàn)過(guò)了,即達(dá)到了語(yǔ)句覆蓋。這種測(cè)試方法就是通常所說(shuō)的基本路徑測(cè)試方法。第25頁(yè)/共64頁(yè)環(huán)形復(fù)雜度環(huán)形復(fù)雜度也稱為圈復(fù)雜度,它是一種為程序邏輯復(fù)雜度提供定量尺度的軟件度量。環(huán)形復(fù)雜度的應(yīng)用——可以將環(huán)形復(fù)雜度用于基本路徑方法,它可以提供:程序基本集的獨(dú)立路徑數(shù)量;確保所有語(yǔ)句至少執(zhí)行一次的測(cè)試數(shù)量的上界。獨(dú)立路徑是指程序中至少引入了一個(gè)新的處理語(yǔ)句集合或一個(gè)新條件的程序通路。采用流圖的術(shù)語(yǔ),即獨(dú)立路徑必須至少包含一條在本次定義路徑之前不曾用過(guò)的邊。測(cè)試可以被設(shè)計(jì)為基本路徑集的執(zhí)行過(guò)程,但基本路徑集通常并不唯一。

第26頁(yè)/共64頁(yè)基本路徑測(cè)試(續(xù))基本路徑測(cè)試方法在程序控制流圖的基礎(chǔ)上,通過(guò)分析控制結(jié)構(gòu)的環(huán)形復(fù)雜度,導(dǎo)出基本可執(zhí)行路徑集合,從而設(shè)計(jì)測(cè)試用例。它包括以下4個(gè)步驟:(1)畫出程序的控制流圖。(2)計(jì)算程序的環(huán)形復(fù)雜度,導(dǎo)出程序基本路徑集合中的獨(dú)立路徑條數(shù),這是確定程序中每個(gè)可執(zhí)行語(yǔ)句至少執(zhí)行一次所必須的測(cè)試用例數(shù)目的上界。(3)導(dǎo)出基本路徑集,確定程序的獨(dú)立路徑。(4)根據(jù)各條獨(dú)立路徑,設(shè)計(jì)測(cè)試用例的輸入數(shù)據(jù)和預(yù)期結(jié)果。第27頁(yè)/共64頁(yè)計(jì)算環(huán)形復(fù)雜度的方法環(huán)形復(fù)雜度以圖論為基礎(chǔ),為我們提供了非常有用的軟件度量??捎萌缦氯N方法之一來(lái)計(jì)算環(huán)形復(fù)雜度:控制流圖中區(qū)域的數(shù)量對(duì)應(yīng)于環(huán)形復(fù)雜度。給定控制流圖G的環(huán)形復(fù)雜度—V(G),定義為V(G)=E-N+2

其中,E是控制流圖中邊的數(shù)量,N是控制流圖中的節(jié)點(diǎn)數(shù)量。給定控制流圖G的環(huán)形復(fù)雜度—V(G),也可定義為V(G)=P+1

其中,P是控制流圖G中判定節(jié)點(diǎn)的數(shù)量。467148101113第28頁(yè)/共64頁(yè)基本路徑測(cè)試(續(xù))案例:voidSort(intiRecordNum,intiType)1{2intx=0;3inty=0;4while(iRecordNum-->0)5{6 If(iType==0)7 x=y+2;8else9 If(iType==1)10x=y+10;11else12x=y+20;13}14}467910121314467149101213程序流程圖控制流圖第29頁(yè)/共64頁(yè)基本路徑測(cè)試(續(xù))467910121314467149101213程序流程圖控制流圖第一步:畫出控制流圖第30頁(yè)/共64頁(yè)白盒測(cè)試的基本概念(續(xù))例:圈復(fù)雜度,計(jì)算如下:流圖中有四個(gè)區(qū)域;V(G)=11條邊-9結(jié)點(diǎn)+2=4;V(G)=3個(gè)判定結(jié)點(diǎn)+1=4。區(qū)域:

邊和節(jié)點(diǎn)所限定的范圍被稱為區(qū)域。注意!計(jì)算區(qū)域時(shí)應(yīng)包括圖外部的范圍

467148101113第31頁(yè)/共64頁(yè)基本路徑測(cè)試方法(續(xù))畫出控制流圖:如右圖所示計(jì)算環(huán)形復(fù)雜度:

10(條邊)-8(個(gè)節(jié)點(diǎn))+2=4導(dǎo)出獨(dú)立路徑(用語(yǔ)句編號(hào)表示)路徑1:4→14路徑2:4→6→7→14路徑3:4→6→9→10→13→4→14路徑4:4→6→9→12→13→4→14467910121314第32頁(yè)/共64頁(yè)基本路徑測(cè)試方法(續(xù))輸入數(shù)據(jù)預(yù)期輸出測(cè)試用例1irecordnum=0itype=0x=0y=0測(cè)試用例2irecordnum=1itype=0x=0y=0測(cè)試用例3irecordnum=1itype=1x=10y=0測(cè)試用例4irecordnum=1itype=2x=0y=20設(shè)計(jì)測(cè)試用例:第33頁(yè)/共64頁(yè)課堂練習(xí)思考題目下例程序流程圖描述了最多輸入50個(gè)值(以–1作為輸入結(jié)束標(biāo)志),計(jì)算其中有效的學(xué)生分?jǐn)?shù)的個(gè)數(shù)、總分?jǐn)?shù)和平均值,請(qǐng)畫出其控制流圖并采用基本路徑進(jìn)行測(cè)試。

第34頁(yè)/共64頁(yè)第35頁(yè)/共64頁(yè)第36頁(yè)/共64頁(yè)案例:使用邏輯覆蓋法測(cè)試下列程序voidDoWork(intx,inty,intz){1intk=0,j=0;2if((x>3)&&(z<10))3{4k=x*y-1;5j=sqrt(k);6}//語(yǔ)句塊17if((x==4)||(y>5))8{j=x*y+10;}//語(yǔ)句塊29j=j%3;//語(yǔ)句塊310}792458第37頁(yè)/共64頁(yè)邏輯覆蓋法(續(xù))X>3&&z<10執(zhí)行語(yǔ)句塊1執(zhí)行語(yǔ)句塊2X==4||y>5執(zhí)行語(yǔ)句塊3FFTTabdce第38頁(yè)/共64頁(yè)語(yǔ)句覆蓋要實(shí)現(xiàn)DoWork函數(shù)的語(yǔ)句覆蓋,只需設(shè)計(jì)一個(gè)測(cè)試用例就可以覆蓋程序中的所有可執(zhí)行語(yǔ)句。測(cè)試用例輸入為:{x=4、y=5、z=5}程序執(zhí)行的路徑是:abd第39頁(yè)/共64頁(yè)判定覆蓋要實(shí)現(xiàn)DoWork函數(shù)的判定覆蓋,需要設(shè)計(jì)兩個(gè)測(cè)試用例。測(cè)試用例的輸入為:{x=4、y=5、z=5};{x=2、y=5、z=5}程序執(zhí)行的路徑分別是:abd;ace第40頁(yè)/共64頁(yè)判定覆蓋(續(xù))16352789410說(shuō)明:以上僅考慮了兩出口的判斷,我們還應(yīng)把判定覆蓋準(zhǔn)則擴(kuò)充到多出口判斷(如Case語(yǔ)句)的情況。因此,判定覆蓋更為廣泛的含義應(yīng)該是使得每一個(gè)判定獲得每一種可能的結(jié)果至少一次。第41頁(yè)/共64頁(yè)條件覆蓋在實(shí)際程序代碼中,一個(gè)判定中通常都包含若干條件。條件覆蓋的目的是設(shè)計(jì)若干測(cè)試用例,在執(zhí)行被測(cè)程序后,要使每個(gè)判定中每個(gè)條件的可能值至少滿足一次。對(duì)DoWork函數(shù)的各個(gè)判定的各種條件取值加以標(biāo)記。對(duì)于第一個(gè)判定((x>3)&&(z<10)): 條件x>3取真值記為T1,取假值記為-T1

條件z<10取真值記為T2,取假值記為-T2對(duì)于第二個(gè)判定((x==4)||(y>5)):條件x==4取真值記為T3,取假值記為-T3條件y>5取真值記為T4,取假值記為-T4第42頁(yè)/共64頁(yè)條件覆蓋(續(xù))根據(jù)條件覆蓋的基本思想,要使上述4個(gè)條件可能產(chǎn)生的8種情況至少滿足一次,設(shè)計(jì)測(cè)試用例如下:測(cè)試用例執(zhí)行路徑覆蓋條件覆蓋分支x=4、y=6、z=5abdT1、T2、T3、T4bdx=2、y=5、z=15ace-T1、-T2、-T3、-T4ce分析:上面這組測(cè)試用例不但覆蓋了4個(gè)條件的全部8種情況,而且將兩個(gè)判定的4個(gè)分支b、c、d、e也同時(shí)覆蓋了,即同時(shí)達(dá)到了條件覆蓋和判定覆蓋。第43頁(yè)/共64頁(yè)條件覆蓋(續(xù))說(shuō)明:雖然前面的一組測(cè)試用例同時(shí)達(dá)到了條件覆蓋和判定覆蓋,但是,并不是說(shuō)滿足條件覆蓋就一定能滿足判定覆蓋。如果設(shè)計(jì)了下表中的這組測(cè)試用例,則雖然滿足了條件覆蓋,但只是覆蓋了程序中第一個(gè)判定的取假分支c和第二個(gè)判定的取真分支d,不滿足判定覆蓋的要求。

測(cè)試用例執(zhí)行路徑覆蓋條件覆蓋分支x=2、y=6、z=5acd-T1、T2、-T3、T4cdx=4、y=5、z=15acdT1、-T2、T3、-T4cd第44頁(yè)/共64頁(yè)判定/條件覆蓋判定/條件覆蓋實(shí)際上是將判定覆蓋和條件覆蓋結(jié)合起來(lái)的一種方法,即:設(shè)計(jì)足夠的測(cè)試用例,使得判定中每個(gè)條件的所有可能取值至少滿足一次,同時(shí)每個(gè)判定的可能結(jié)果也至少出現(xiàn)一次。根據(jù)判定/條件覆蓋的基本思想,只需設(shè)計(jì)以下兩個(gè)測(cè)試用例便可以覆蓋4個(gè)條件的8種取值以及4個(gè)判定分支。測(cè)試用例執(zhí)行路徑覆蓋條件覆蓋分支x=4、y=6、z=5abdT1、T2、T3、T4bdx=2、y=5、z=15ace-T1、-T2、-T3、-T4ce第45頁(yè)/共64頁(yè)判定/條件覆蓋(續(xù))分析:從表面上看,判定/條件覆蓋測(cè)試了各個(gè)判定中的所有條件的取值,但實(shí)際上,編譯器在檢查含有多個(gè)條件的邏輯表達(dá)式時(shí),某些情況下的某些條件將會(huì)被其它條件所掩蓋。因此,判定/條件覆蓋也不一定能夠完全檢查出邏輯表達(dá)式中的錯(cuò)誤。例如:對(duì)于第一個(gè)判定(x>3)&&(z<10)來(lái)說(shuō),必須x>3和z<10這兩個(gè)條件同時(shí)滿足才能確定該判定為真。如果x>3為假,則編譯器將不再檢查z<10這個(gè)條件,那么即使這個(gè)條件有錯(cuò)也無(wú)法被發(fā)現(xiàn)。對(duì)于第二個(gè)判定(x==4)||(y>5)來(lái)說(shuō),若條件x==4滿足,就認(rèn)為該判定為真,這時(shí)將不會(huì)再檢查y>5,那么同樣也無(wú)法發(fā)現(xiàn)這個(gè)條件中的錯(cuò)誤。第46頁(yè)/共64頁(yè)組合覆蓋組合覆蓋的目的是要使設(shè)計(jì)的測(cè)試用例能覆蓋每一個(gè)判定的所有可能的條件取值組合。對(duì)DoWork函數(shù)中的各個(gè)判定的條件取值組合加以標(biāo)記:1、x>3,z<10記做T1T2,第一個(gè)判定的取真分支2、x>3,z>=10記做T1-T2,第一個(gè)判定的取假分支3、x<=3,z<10記做-T1T2,第一個(gè)判定的取假分支4、x<=3,z>=10記做-T1-T2,第一個(gè)判定的取假分支5、x==4,y>5記做T3T4,第二個(gè)判定的取真分支6、x==4,y<=5記做T3-T4,第二個(gè)判定的取真分支7、x!=4,y>5記做-T3T4,第二個(gè)判定的取真分支8、x!=4,y<=5記做-T3-T4,第二個(gè)判定的取假分支第47頁(yè)/共64頁(yè)組合覆蓋(續(xù))根據(jù)組合覆蓋的基本思想,設(shè)計(jì)測(cè)試用例如下:測(cè)試用例執(zhí)行路徑覆蓋條件覆蓋組合號(hào)x=4、y=6、z=5abdT1、T2、T3、T41和5x=4、y=5、z=15acdT1、-T2、T3、-T42和6x=2、y=6、z=5acd-T1、T2、-T3、T43和7x=2、y=5、z=15ace-T1、-T2、-T3、-T44和8分析:上面這組測(cè)試用例覆蓋了所有8種條件取值的組合,覆蓋了所有判定的真假分支,但是卻丟失了一條路徑abe。第48頁(yè)/共64頁(yè)路徑覆蓋前面提到的5種邏輯覆蓋都未涉及到路徑的覆蓋。事實(shí)上,只有當(dāng)程序中的每一條路徑都受到了檢驗(yàn),才能使程序受到全面檢驗(yàn)。路徑覆蓋的目的就是要使設(shè)計(jì)的測(cè)試用例能覆蓋被測(cè)程序中所有可能的路徑。根據(jù)路徑覆蓋的基本思想,在滿足組合覆蓋的測(cè)試用例中修改其中一個(gè)測(cè)試用例,則可以實(shí)現(xiàn)路徑覆蓋:測(cè)試用例執(zhí)行路徑覆蓋條件x=4、y=6、z=5abdT1、T2、T3、T4x=4、y=5、z=15acdT1、-T2、T3、-T4x=2、y=5、z=15ace-T1、-T2、-T3、-T4x=5、y=5、z=5abeT1、T2、-T3、-T4第49頁(yè)/共64頁(yè)路徑覆蓋(續(xù))分析:雖然前面一組測(cè)試用例滿足了路徑覆蓋,但并沒(méi)有覆蓋程序中所有的條件組合(丟失了組合3和7),即滿足路徑覆蓋的測(cè)試用例并不一定滿足組合覆蓋。說(shuō)明:對(duì)于比較簡(jiǎn)單的小程序,實(shí)現(xiàn)路徑覆蓋是可能做到的。但如果程序中出現(xiàn)較多判斷和較多循環(huán),可能的路徑數(shù)目將會(huì)急劇增長(zhǎng),要在測(cè)試中覆蓋所有的路徑是無(wú)法實(shí)現(xiàn)的。為了解決這個(gè)難題,只有把覆蓋路徑數(shù)量壓縮到一定的限度內(nèi),如程序中的循環(huán)體只執(zhí)行一次。在實(shí)際測(cè)試中,即使對(duì)于路徑數(shù)很有限的程序已經(jīng)做到路徑覆蓋,仍然不能保證被測(cè)試程序的正確性,還需要采用其他測(cè)試方法進(jìn)行補(bǔ)充。第50頁(yè)/共64頁(yè)課堂實(shí)踐1、使用基本路徑測(cè)試方法,為以下程序段設(shè)計(jì)測(cè)試用例。voidDo(intX,intA,intB){1if((A>1)&&(B=0))2X=X/A;3if((A=2)||(X>1))4X=X+1;5}2、在三角形問(wèn)題中,要求輸入三個(gè)邊長(zhǎng):a,b,c。當(dāng)三邊不可能構(gòu)成三角形時(shí)提示錯(cuò)誤,可構(gòu)成三角形時(shí)計(jì)算三角形的周長(zhǎng)。若是等腰三角形打印“等腰三角形”,若是等邊三角形,則打印“等邊三角形”。畫出相應(yīng)的程序流程圖,并采用基本路徑測(cè)試方法為該程序設(shè)計(jì)測(cè)試用例。第51頁(yè)/共64頁(yè)2.4.3循環(huán)測(cè)試方法從本質(zhì)上說(shuō),循環(huán)測(cè)試的目的就是檢查循環(huán)結(jié)構(gòu)的有效性。通常,循環(huán)可以劃分為簡(jiǎn)單循環(huán)、嵌套循環(huán)、串接循環(huán)和非結(jié)構(gòu)循環(huán)4類。(1)測(cè)試簡(jiǎn)單循環(huán)。設(shè)其循環(huán)的最大次數(shù)為n,可采用以下測(cè)試集:跳過(guò)整個(gè)循環(huán);只循環(huán)一次;只循環(huán)兩次;循環(huán)m次,其中m<n;分別循環(huán)n-1、n和n+1次。第52頁(yè)/共64頁(yè)循環(huán)測(cè)試方法(續(xù))(2)測(cè)試嵌套循環(huán)。如果將簡(jiǎn)單循環(huán)的測(cè)試方法用于嵌套循環(huán),可能的測(cè)試次數(shù)會(huì)隨嵌套層數(shù)成幾何級(jí)數(shù)增加。此時(shí)可采用以下辦法減少測(cè)試次數(shù):測(cè)試從最內(nèi)層循環(huán)開(kāi)始,所有外層循環(huán)次數(shù)設(shè)置為最小值;對(duì)最內(nèi)層循環(huán)按照簡(jiǎn)單循環(huán)的測(cè)試方法進(jìn)行;由內(nèi)向外進(jìn)行下一個(gè)循環(huán)的測(cè)試,本層循環(huán)的所有外層循環(huán)仍取最小值,而由本層循環(huán)嵌套的循環(huán)取某些“典型”值;重復(fù)上一步的過(guò)程,直到測(cè)試完所有循環(huán)。(3)測(cè)試串接循環(huán)。若串接的各個(gè)循環(huán)相互獨(dú)立,則可分別采用簡(jiǎn)單循環(huán)的測(cè)試方法;否則采用嵌套循環(huán)的測(cè)試方法。(4)對(duì)于非結(jié)構(gòu)循環(huán)這種情況,無(wú)法進(jìn)行測(cè)試,需要按結(jié)構(gòu)化程序設(shè)計(jì)的思想將程序結(jié)構(gòu)化后,再進(jìn)行測(cè)試。第53頁(yè)/共64頁(yè)Z路徑覆蓋下的循環(huán)測(cè)試方法Z路徑覆蓋是路徑覆蓋的一種變體,它是將程序中的循環(huán)結(jié)構(gòu)簡(jiǎn)化為選擇結(jié)構(gòu)的一種路徑覆蓋。循環(huán)簡(jiǎn)化的目的是限制循環(huán)的次數(shù),無(wú)論循環(huán)的形式和循環(huán)體實(shí)際執(zhí)行的次數(shù),簡(jiǎn)化后的循環(huán)測(cè)試只考慮執(zhí)行循環(huán)體一次和零次(不執(zhí)行)兩種情況,即考慮執(zhí)行時(shí)進(jìn)入循環(huán)體一次和跳過(guò)循環(huán)體這兩種情況。

在循環(huán)簡(jiǎn)化的思路下,循環(huán)與判定分支的效果是一樣的,即:循環(huán)要么執(zhí)行、要么跳過(guò)。第54頁(yè)/共64頁(yè)2.4.4產(chǎn)生測(cè)試用例在實(shí)踐中,除了前面給出的各種方法外,通常還可以采用以下三種方法來(lái)補(bǔ)充設(shè)計(jì)測(cè)試用例:(1)通過(guò)非路經(jīng)分析得到測(cè)試用例

——這種方法得到的測(cè)試用例是在應(yīng)用系統(tǒng)本身的實(shí)踐中提供的,基本上是測(cè)試人員憑工作經(jīng)驗(yàn)的得到,甚至是猜測(cè)得到的。(2)尋找尚未測(cè)試過(guò)的路徑并生成相應(yīng)的測(cè)試用例

——這種方法需要窮舉被測(cè)程序的所有路徑,并與前面已測(cè)試路徑進(jìn)行對(duì)比。(3)通過(guò)指定特定路徑并生成相應(yīng)的測(cè)試用例第55頁(yè)/共64頁(yè)2.5最少測(cè)試用例數(shù)計(jì)算為實(shí)現(xiàn)測(cè)試的邏輯覆蓋,必須設(shè)計(jì)足夠多的測(cè)試用例,并使用這些測(cè)試用例執(zhí)行被測(cè)程序,實(shí)施測(cè)試。我們關(guān)心的是:對(duì)于某個(gè)具體的程序來(lái)說(shuō),至少需要設(shè)計(jì)多少個(gè)測(cè)試用例。這里提供一種估算最少測(cè)試用例數(shù)的方法。我們知道,結(jié)構(gòu)化程序是由3種基本控制結(jié)構(gòu)組成:順序型(構(gòu)成串行操作)、選擇型(構(gòu)成分支操作)和重復(fù)型(構(gòu)成循環(huán)操作)。為了把問(wèn)題化簡(jiǎn),避免出現(xiàn)測(cè)試用例極多的組合爆炸,把構(gòu)成循環(huán)操作的重復(fù)型結(jié)構(gòu)用選擇結(jié)構(gòu)代替。這樣,任一循環(huán)便改造成進(jìn)入循環(huán)體或不進(jìn)入循環(huán)體的分支操作了。第56頁(yè)/共64頁(yè)最少測(cè)試用例數(shù)計(jì)算(續(xù))用N-S圖表

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論