白盒測試用例設(shè)計(jì)_第1頁
白盒測試用例設(shè)計(jì)_第2頁
白盒測試用例設(shè)計(jì)_第3頁
白盒測試用例設(shè)計(jì)_第4頁
白盒測試用例設(shè)計(jì)_第5頁
已閱讀5頁,還剩50頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

2023/2/31白盒測試用例設(shè)計(jì)方法2023/2/32回顧:測試用例測試用例由測試輸入數(shù)據(jù)以及與之對應(yīng)的輸出結(jié)果組成。測試用例設(shè)計(jì)的好壞直接決定了測試的效果和結(jié)果。所以說在軟件測試活動(dòng)中最關(guān)鍵的步驟就是設(shè)計(jì)有效的測試用例。測試用例可以針對黑盒測試設(shè)計(jì)用例,也可以針對白盒測試設(shè)計(jì)用例,我們今天開始講針對白盒測試的用例設(shè)計(jì)方法。

2023/2/33回顧:黑盒測試黑盒測試又稱為功能性測試或數(shù)據(jù)驅(qū)動(dòng)測試。2023/2/34白盒測試方法為什么要進(jìn)行白盒測試?如果所有軟件錯(cuò)誤的根源都可以追溯到某個(gè)唯一原因,那么問題就簡單了。然而,事實(shí)上一個(gè)bug常常是由多個(gè)因素共同導(dǎo)致的,如下圖所示。2023/2/352023/2/36白盒測試方法假設(shè)此時(shí)開發(fā)工作已結(jié)束,程序送交到測試組,沒有人知道代碼中有一個(gè)潛在的被0除的錯(cuò)誤。若測試組采用的測試用例的執(zhí)行路徑?jīng)]有同時(shí)經(jīng)過x=0和y=5/x進(jìn)行測試,顯然測試工作似乎非常完善,測試用例覆蓋了所有執(zhí)行語句,也沒有被0除的錯(cuò)誤發(fā)生。2023/2/37白盒測試方法白盒測試將被測程序看作一個(gè)打開的盒子,測試者能夠看到被測源程序,可以分析被測程序的內(nèi)部結(jié)構(gòu),此時(shí)測試的焦點(diǎn)集中在根據(jù)其內(nèi)部結(jié)構(gòu)設(shè)計(jì)測試用例。白盒測試方法又稱為結(jié)構(gòu)測試或邏輯驅(qū)動(dòng)測試2023/2/382023/2/39白盒測試程序的結(jié)構(gòu)形式是白盒測試的主要依據(jù)。程序結(jié)構(gòu)主要用流程圖N-S圖來表示程序的執(zhí)行路徑數(shù)目龐大,讓程序的所有路徑都執(zhí)行一次,全面的白盒測試將產(chǎn)生百分之百正確的程序,但實(shí)際上是不可能的2023/2/310對一個(gè)具有多重選擇和循環(huán)嵌套的程序,不同的路徑數(shù)目可能是天文數(shù)字。給出一個(gè)小程序的流程圖,它包括了一個(gè)執(zhí)行20次的循環(huán)。包含的不同執(zhí)行路徑數(shù)達(dá)520條,對每一條路徑進(jìn)行測試需要1毫秒,假定一年工作365×24小時(shí),要想把所有路徑測試完,需3170年。2023/2/311白盒測試方法白盒測試主要是檢查程序的內(nèi)部結(jié)構(gòu)、邏輯、循環(huán)和路徑。常用測試用例設(shè)計(jì)方法有:邏輯覆蓋法(邏輯驅(qū)動(dòng)測試)基本路徑測試方法此外還有:循環(huán)測試程序插樁Z路徑覆蓋2023/2/312白盒測試方法A.邏輯覆蓋法B.基本路徑測試法C.循環(huán)測試D.程序插樁技術(shù)2023/2/313A。邏輯覆蓋法

語句覆蓋判定覆蓋條件覆蓋

判定-條件覆蓋條件組合覆蓋路徑覆蓋。主要是測試覆蓋率,以程序內(nèi)在邏輯結(jié)構(gòu)為基礎(chǔ)的測試。包括以下6種類型:2023/2/314假設(shè)某函數(shù)如下:

func(){//… if(A>1&&B==0)X=X/A; if(A==2||X>1)X=X+1; //… }2023/2/315例(A>1)

&&

(B==0)(A==2)

||

(X>1)X=X/AX=X+1真T假Fabdce開始2023/2/316例子L1:

(ace)={(A>1)and(B=0)}and{(A=2)or(X/A>1)}=(A>1)and(B=0)and(A=2)or(A>1)and(B=0)and(X/A>1)=(A=2)and(B=0)

or

(A>1)and(B=0)and(X/A>1)2023/2/317例子L2:(abd)=not{(A>1)and(B=0)}

andnot{(A=2)or(X>1)}={not(A>1)ornot(B=0)}and

{not(A=2)andnot(X>1)}=

not(A>1)andnot(A=2)andnot(X>1)

or

not(B=0)and

not(A=2)andnot(X>1)2023/2/318例子L3:(abe)=not{(A>1)and(B=0)}and

{(A=2)or(X>1)}={not(A>1)ornot(B=0)}and

{(A=2)or(X>1)}=not(A>1)and(A=2)

or

not(A>1)and

(X>1)

or

not(B=0)and(A=2)

or

not(B=0)and(X>1)2023/2/319例子L4:(acd)={(A>1)and(B=0)}

andnot

{(A=2)or(X/A>1)}=(A>1)and(B=0)andnot(A=2)and

not(X/A>1)2023/2/320語句覆蓋原理:如果語句中有錯(cuò)誤,僅靠觀察不執(zhí)行可能發(fā)現(xiàn)不了.語句覆蓋就是設(shè)計(jì)若干個(gè)測試用例,運(yùn)行被測程序,使得每一條可執(zhí)行語句至少執(zhí)行一次。在例圖中,正好所有的可執(zhí)行語句都在路徑L1上,所以選擇路徑L1設(shè)計(jì)測試用例,就可以覆蓋所有的可執(zhí)行語句。2023/2/321語句覆蓋規(guī)定測試用例的設(shè)計(jì)格式如下:【輸入的(A,B,X),輸出的(A,B,X)】為圖例設(shè)計(jì)滿足語句覆蓋的測試用例是:

【(2,0,4),(2,0,3)】覆蓋a-c-e【L1】輸入

ABX預(yù)期結(jié)果ABX2023/2/322例(A>1)

&&

(B==0)(A==2)

||

(X>1)X=X/AX=X+1真真假Fabdce開始2023/2/323語句覆蓋語句覆蓋率已執(zhí)行的可執(zhí)行語句占程序中可執(zhí)行語句總數(shù)的百分比復(fù)雜的程序不可能達(dá)到語句的完全覆蓋語句覆蓋率越高越好2023/2/324語句覆蓋的優(yōu)點(diǎn)檢查所有語句結(jié)構(gòu)簡單的代碼的測試效果較好容易實(shí)現(xiàn)自動(dòng)測試代碼覆蓋率高

如果是程序塊覆蓋,則不涉及程序塊中的源代碼

2023/2/325語句覆蓋不能檢查出的錯(cuò)誤邏輯運(yùn)算(&&、||)錯(cuò)誤判定的第一個(gè)運(yùn)算符“&&”錯(cuò)寫成“||”,或第二個(gè)運(yùn)算符“||”錯(cuò)寫成“&&”,這時(shí)使用上述的測試用例仍然可以達(dá)到100%的語句覆蓋.循環(huán)語句錯(cuò)誤循環(huán)次數(shù)錯(cuò)誤跳出循環(huán)條件錯(cuò)誤2023/2/326語句覆蓋不能檢查出的錯(cuò)誤循環(huán)語句例子for(i=0;i<10;i++){statement;}while(x>3){statement;}for(i=0;i<=10;i++){statement;}while(x>3&&x<7){statement;}2023/2/327語句覆蓋率的問題能達(dá)到很高的語句覆蓋率語句覆蓋率看似很高,卻有嚴(yán)重缺陷:

if(x!=1){statements;……;}else{statement;}}99句}1句測試用例:x=2語句覆蓋率99%50%的分支沒有達(dá)到2023/2/328判定覆蓋DecisionCoverage判定覆蓋就是設(shè)計(jì)若干個(gè)測試用例,運(yùn)行被測程序,使得程序中每個(gè)判斷的取真分支和取假分支至少經(jīng)歷一次。判定覆蓋又稱為分支覆蓋。對于圖例,如果選擇路徑L1和L2,就可得滿足要求的測試用例:2023/2/329例(A>1)

&&

(B==0)(A==2)

||

(X>1)X=X/AX=X+1真T假Fabdce開始2023/2/330判定覆蓋【(2,0,4),(2,0,3)】 覆蓋ace【L1】

【(1,1,1),(1,1,1)】 覆蓋abd【L2】(A==2)and(B==0)

or

(A>1)and(B==0)and(X/A>1)

2023/2/331判定覆蓋not(A>1)andnot(A==2)andnot(X>1)

ornot(B==0)and

not(A==2)and

not(X>1)2023/2/332判定覆蓋如果選擇路徑L3和L4,還可得另一組可用的測試用例:

【(2,1,1),(2,1,2)】覆蓋abe【L3】

【(3,0,3),(3,1,1)】覆蓋acd【L4】not(A>1)and(X>1)

ornot(B==0)and

(A==2)

ornot(B==0)and(X>1)(A>1)and(B==0)andnot(A==2)and

not(X/A>1)2023/2/333條件覆蓋ConditionCoverage在設(shè)計(jì)程序中,一個(gè)判定語句是由多個(gè)條件組合而成的復(fù)合判定,判定(a)&&(b||c)包含了三個(gè)條件:a,b和c。為了更徹底的實(shí)現(xiàn)邏輯覆蓋,可以采用條件覆蓋。2023/2/334條件覆蓋ConditionCoverage條件覆蓋就是設(shè)計(jì)若干個(gè)測試用例,運(yùn)行被測程序,使得程序中每個(gè)判斷的每個(gè)條件的可能取值至少執(zhí)行一次。在圖例中,我們事先可對所有條件的取值加以標(biāo)記。2023/2/335條件覆蓋ConditionCoverage例如:對于第一個(gè)判斷,條件A>1取真為,取假為

條件B=0取真為,取假為對于第二個(gè)判斷:條件A=2取真為,取假為

條件X>1取真為,取假為2023/2/336例(A>1)

&&

(B==0)(A==2)

||

(X>1)X=X/AX=X+1真T假Fabdce開始2023/2/337條件覆蓋ConditionCoverage測試用例

覆蓋分支

條件取值【(2,0,4),(2,0,3)】L1(c,e)

【(1,0,1),(1,0,1)】L2(b,d)

【(2,1,1),(2,1,2)】L3(b,e)2023/2/338條件覆蓋或測試用例

覆蓋分支

條件取值【(1,0,3),(1,0,4)】L3(b,e)【(2,1,1),(2,1,2)】L3(b,e)

2023/2/339判定-條件覆蓋CDC判定/條件覆蓋實(shí)際上是將判定覆蓋和條件覆蓋結(jié)合起來的一種方法,就是設(shè)計(jì)足夠的測試用例,使得判斷中每個(gè)條件的所有可能取值至少執(zhí)行一次,同時(shí)每個(gè)判定的可能結(jié)果也至少出現(xiàn)一次。設(shè)計(jì)測試用例覆蓋4個(gè)條件的8種取值以及4個(gè)判定分支。2023/2/340例(A>1)

&&

(B==0)(A==2)

||

(X>1)X=X/AX=X+1真T假Fabdce開始2023/2/341判定-條件覆蓋CDC

測試用例

覆蓋分支

條件取值【(2,0,4),(2,0,3)】L1(c,e)【(1,1,1),(1,1,1)】L2(b,d)(A=2)and(B=0)

or

(A>1)and(B=0)and(X/A>1)

not(A>1)andnot(A=2)andnot(X>1)

ornot(B=0)and

not(A=2)andnot(X>1)2023/2/342分析:從表面上看,判定/條件覆蓋測試了各個(gè)判定中的所有條件的取值,但實(shí)際上,編譯器在檢查含有多個(gè)條件的邏輯表達(dá)式時(shí),某些情況下的某些條件將會(huì)被其它條件所掩蓋。因此,判定/條件覆蓋也不一定能夠完全檢查出邏輯表達(dá)式中的錯(cuò)誤。判定-條件覆蓋CDC2023/2/343判定-條件覆蓋CDC例如:對于第一個(gè)判定(A>1)&&(B==0)來說,必須A>1和B==0這兩個(gè)條件同時(shí)滿足才能確定該判定為真。如果A>1為假,則編譯器將不再檢查B==0這個(gè)條件,那么即使這個(gè)條件有錯(cuò)也無法被發(fā)現(xiàn)。對于第二個(gè)判定(A==2)||(X>1)來說,若條件A==2滿足,就認(rèn)為該判定為真,這時(shí)將不會(huì)再檢查X>1,那么同樣也無法發(fā)現(xiàn)這個(gè)條件中的錯(cuò)誤。2023/2/344條件組合覆蓋條件組合覆蓋就是設(shè)計(jì)足夠的測試用例,運(yùn)行被測程序,使得每個(gè)判斷的所有可能的條件取值組合至少執(zhí)行一次。2023/2/345條件組合覆蓋

記①A>1,B=0作

②A>1,B≠0作

③A≯1,B=0作④A≯1,B≠0作

⑤A=2,X>1作

⑥A=2,X≯1作

⑦A≠2,X>1作

⑧A≠2,X≯1作2023/2/346例(A>1)

&&

(B==0)(A==2)

||

(X>1)X=X/AX=X+1真T假Fabdce開始2023/2/347條件組合覆蓋

測試用例

覆蓋條件

覆蓋組合【(2,0,4),(2,0,3)】(L1) ①,⑤【(2,1,1),(2,1,2)】(L3) ②,⑥【(1,0,3),(1,0,4)】(L3) ③,⑦【(1,1,1),(1,1,1)】(L2) ④,⑧分析:上面這組測試用例覆蓋了所有8種條件取值的組合,覆蓋了所有判定的真假分支,但是卻丟失了一條路徑L4。2023/2/348路徑覆蓋路徑覆蓋就是設(shè)計(jì)足夠的測試用例,覆蓋程序中所有可能的路徑。測試用例

通過路徑

覆蓋條件【(2,0,4),(2,0,3)】ace(L1)

【(1,1,1),(1,1,1)】abd

(L2)

【(1,1,2),(1,1,3)】abe

(L3

溫馨提示

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

評論

0/150

提交評論