第5章白盒測試_第1頁
第5章白盒測試_第2頁
第5章白盒測試_第3頁
第5章白盒測試_第4頁
第5章白盒測試_第5頁
已閱讀5頁,還剩77頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、2022-2-21信息工程教研室 谷凌雁白盒測試白盒測試 白盒測試概念 測試覆蓋標(biāo)準(zhǔn)邏輯驅(qū)動(dòng)測試基本路徑測試 把測試對(duì)象看做一個(gè)透明的盒子 白盒測試是根據(jù)被測程序的內(nèi)部結(jié)構(gòu)設(shè)計(jì)測試用例并完成測試的一種測試方法 白盒測試或邏輯驅(qū)動(dòng)測試 基于一個(gè)應(yīng)用代碼的內(nèi)部邏輯知識(shí),測試覆蓋全部代碼、分支、路徑和條件 白盒測試(結(jié)構(gòu)測試)概念白盒測試 (結(jié)構(gòu)測試)特點(diǎn) 可以構(gòu)成測試數(shù)據(jù)使特定程序部分得到測試 有一定的充分性度量手段 可獲得較多工具支持 通常只用于單元測試白盒測試的方法靜態(tài)測試方法: 程序結(jié)構(gòu)分析正式審查 同事審查 公開陳述 檢驗(yàn)動(dòng)態(tài)測試方法: 邏輯覆蓋語句覆蓋判定覆蓋條件覆蓋判定-條件覆蓋條件組

2、合 路徑覆蓋通用代碼審查清單 數(shù)據(jù)引用錯(cuò)誤 數(shù)據(jù)聲明錯(cuò)誤 計(jì)算錯(cuò)誤 比較錯(cuò)誤 控制流程錯(cuò)誤 子程序參數(shù)錯(cuò)誤 輸入、輸出錯(cuò)誤 其他錯(cuò)誤代碼覆蓋率 采用白盒法進(jìn)行測試時(shí),考慮的是測試用例對(duì)程序內(nèi)部邏輯的覆蓋程度 最徹底的白盒法是覆蓋程序中的每一條路徑,但這往往無法實(shí)現(xiàn) 采用其它一些標(biāo)準(zhǔn)來量度覆蓋的程度,并希望覆蓋程度盡可能高些測試覆蓋標(biāo)準(zhǔn)測試覆蓋標(biāo)準(zhǔn) 上頁小程序的流程圖,其中包括了一個(gè)執(zhí)行達(dá)20次的循環(huán)。那么它所包含的不同執(zhí)行路徑數(shù)高達(dá)520(1013)條,若要對(duì)它進(jìn)行窮舉測試,覆蓋所有的路徑。假使測試程序?qū)γ恳粭l路徑進(jìn)行測試需要1毫秒,同樣假定一天工作24小時(shí),一年工作365 天, 那么要想把如

3、圖所示的小程序的所有路徑測試完,則需要3170年。邏輯驅(qū)動(dòng)測試 語句覆蓋 判定覆蓋 條件覆蓋 判定條件覆蓋 條件組合覆蓋路徑覆蓋例:實(shí)現(xiàn)一個(gè)簡單的數(shù)學(xué)運(yùn)算 Dim a,b As Integer Dim c As Double If (a0 And b0) Then c=c/a End if If (a1 or c1) Then c=c+1 End if1. c=b+c1.語句覆蓋基本思想是:設(shè)計(jì)若干測試用例,運(yùn)行被測程序,使程序中每個(gè)可執(zhí)行語句至少執(zhí)行一次。11.語句覆蓋續(xù)1只需設(shè)計(jì)一個(gè)測試用例:a=2,b=1,c=6;即達(dá)到了語句覆蓋。1.語句覆蓋續(xù)2 【優(yōu)點(diǎn)】【優(yōu)點(diǎn)】 :可以很直觀地從源代

4、碼得到測試用例,無須細(xì)分每條判定表達(dá)式。 【缺點(diǎn)】【缺點(diǎn)】 :由于這種測試方法僅僅針對(duì)程序邏輯中顯式存在的語句,但對(duì)于隱藏的條件是無法測試的。如在多分支的邏輯運(yùn)算中無法全面的考慮。語句覆蓋是最弱的邏輯覆蓋。2.判定覆蓋基本思想是:設(shè)計(jì)若干測試用例,運(yùn)行被測程序,使得程序中每個(gè)判斷的取真分支和取假分支至少經(jīng)歷一次,即判斷真假值均曾被滿足。12.判定覆蓋續(xù)1a=2,b=1 ,c=6可覆蓋判斷M的Y分支和判斷Q的Y分支; a=-2,b=-1 ,c=-3可覆蓋判斷M的N分支和判斷Q的N分支 。 這兩組測試用例可覆蓋所有判定的真假分支。判斷M判斷Q2.判定覆蓋續(xù)2a=1,b=1 ,c=-3 可覆蓋判斷M

5、的Y分支和判斷Q的N分支 ; a=1,b=-2 ,c=3可覆蓋判斷M的N分支和判斷Q的Y分支 ; 同樣的這兩組測試用例也可覆蓋所有判定的真假分支。判斷M判斷Q2.判定覆蓋續(xù)3 【優(yōu)點(diǎn)】【優(yōu)點(diǎn)】:判定覆蓋具有比語句覆蓋更強(qiáng)的測試能力。同樣判定覆蓋也具有和語句覆蓋一樣的簡單性,無須細(xì)分每個(gè)判定就可以得到測試用例。 【缺點(diǎn)】【缺點(diǎn)】:往往大部分的判定語句是由多個(gè)邏輯條件組合而成,若僅僅判斷其整個(gè)最終結(jié)果,而忽略每個(gè)條件的取值情況,必然會(huì)遺漏部分測試路徑。判定覆蓋仍是弱的邏輯覆蓋。3.條件覆蓋基本思想是:設(shè)計(jì)若干測試用例,執(zhí)行被測程序以后要使每個(gè)判斷中每個(gè)條件的可能取值至少滿足一次。13.條件覆蓋續(xù)1

6、 判斷M表達(dá)式:設(shè)條件 a0 取真 記為 T1 假 F1 條件 b0 取真 記為 T2 假 F2 判斷Q表達(dá)式:設(shè)條件 a1 取真 記為 T3 假 F3 條件 c1 取真 記為 T4 假 F4判斷M判斷Q3.條件覆蓋續(xù)2測試用例覆蓋條件具體取值條件a=2,b=-1,c=-2T1, F2, T3, F4a0,b1,c=1a=-1,b=2,c=3F1, T2, F3, T4a0,a1它覆蓋了判定它覆蓋了判定M M的的N分支和判斷分支和判斷Q Q的的Y分支。分支。我們用條件覆蓋設(shè)計(jì)的思想就是讓測試用例能覆蓋T1、T2、T3、T4、F1、F2、F3、F4判斷M判斷Q3.條件覆蓋續(xù)3 【優(yōu)點(diǎn)】【優(yōu)點(diǎn)】:

7、增加了對(duì)條件判定情況的測試,增加了測試路徑。 【缺點(diǎn)】【缺點(diǎn)】:條件覆蓋不一定包含判定覆蓋。例如,我們剛才設(shè)計(jì)的用例就沒有覆蓋判斷M的Y分支和判斷Q的N分支。條件覆蓋只能保證每個(gè)條件至少有一次為真,而不考慮所有的判定結(jié)果。4.判定條件覆蓋基本思想是:設(shè)計(jì)足夠的測試用例,使得判斷條件中的所有條件可能至少執(zhí)行一次取值,同時(shí),所有判斷的可能結(jié)果至少執(zhí)行一次。1判斷M判斷Q4.判定條件覆蓋續(xù)1 按照判定條件覆蓋的要求,我們?cè)O(shè)計(jì)的測試用例要滿足如下條件:所有條件可能至少執(zhí)行一次取值;所有判斷的可能結(jié)所有判斷的可能結(jié)果至少執(zhí)行一次。果至少執(zhí)行一次。要滿足要滿足T1、T2、 T3 、T4F1、 F2 、F3

8、、F44.判定條件覆蓋續(xù)2測試用例覆蓋條件覆蓋判斷a=2,b=1,c=6T1, T2,T3, T4M的Y分支和Q的Y分支a=-1,b=-2,c=-3F1, F2, F3, F4M的N分支和Q的N分支判斷M判斷Q要滿足要滿足T1、T2、 T3 、T4F1、 F2 、F3、F44.判定條件覆蓋續(xù)3 【優(yōu)點(diǎn)】【優(yōu)點(diǎn)】 :能同時(shí)滿足判定、條件兩種覆蓋標(biāo)準(zhǔn)。 【缺點(diǎn)】【缺點(diǎn)】 :判定/條件覆蓋準(zhǔn)則的缺點(diǎn)是未考慮條件的組合情況。5.條件組合覆蓋基本思想是:設(shè)計(jì)足夠的測試用例,基本思想是:設(shè)計(jì)足夠的測試用例,使使得所有可能的條件取值組合至少執(zhí)行一得所有可能的條件取值組合至少執(zhí)行一次次15.條件組合覆蓋續(xù)1

9、按照條件組合覆蓋的基本思想,對(duì)于前面的例子,我們把每個(gè)判斷中的所有條件進(jìn)行組合,設(shè)計(jì)組合條件如表所示,而我們?cè)O(shè)計(jì)的測試用例就要包括所有的組合條件。編號(hào)覆蓋條件取值判定條件取值具體條件取值1 T1,T2M取Y a0,b02 T1,F2M取N a0,b=03 F1,T2M取N a04 F1,F2M取N a= 0,b1,c16 T3,F4Q取Y a1,c=17 F3,T4Q取Y a18 F3,F4Q取N a=1,c 0 )5 6 If ( iType=0 )7x=y+2;8 else9 If ( iType=1 )10 x=y+10;11 else12 x=y+20;13 14 基本路徑測試方法(續(xù)

10、) 畫出控制流圖: 如右圖所示 計(jì)算環(huán)形復(fù)雜度: 10(條邊)- 8(個(gè)節(jié)點(diǎn))+ 2 = 4 導(dǎo)出獨(dú)立路徑(用語句編號(hào)表示) 路徑1:414 路徑2:46714 路徑3:4691013414 路徑4:4691213414467910121314路徑覆蓋的利弊 實(shí)現(xiàn)了所有路徑的測試,發(fā)現(xiàn)錯(cuò)誤能力強(qiáng) 某些條件錯(cuò)誤可能無法發(fā)現(xiàn) 路徑數(shù)龐大,不可能覆蓋所有路徑 用例數(shù)量的增加例1:有下面的C函數(shù),用基本路徑測試法進(jìn)行測試 void Sort(int iRecordNum,int iType)o o int x=0;o int y=0;o while (iRecordNum- 0)o o if(0= =

11、iType)o x=y+2; break;o elseo if (1= =iType)ox=y+10;o elseo x=y+20;o 1. 基本路徑測試舉例912基本路徑測試舉例第一步:第一步:畫出控制流圖流程圖用來描述程序控制結(jié)構(gòu)??蓪⒘鞒虉D映射到一個(gè)相應(yīng)的流圖(假設(shè)流程圖的菱形決定框中不包含復(fù)合條件)。在流圖中,每一個(gè)圓,稱為流圖的結(jié)點(diǎn),代表一個(gè)或多個(gè)語句。一個(gè)處理方框序列和一個(gè)菱形決測框可被映射為一個(gè)結(jié)點(diǎn),流圖中的箭頭,稱為邊或連接,代表控制流,類似于流程圖中的箭頭。一條邊必須終止于一個(gè)結(jié)點(diǎn),即使該結(jié)點(diǎn)并不代表任何語句(例如:if-else-then結(jié)構(gòu))。由邊和結(jié)點(diǎn)限定的范圍稱為區(qū)域

12、。計(jì)算區(qū)域時(shí)應(yīng)包括圖外部的范圍。基本路徑測試-畫控制流圖出 畫出其程序流程圖和對(duì)應(yīng)的控制流圖如下467810111314467148101113程序流程圖 控制流圖991212基本路徑測試 - 計(jì)算圈復(fù)雜度第二步:第二步:計(jì)算圈復(fù)雜度計(jì)算如下:流圖中有四個(gè)區(qū)域;V(G)=10條邊-8結(jié)點(diǎn)+2=4;V(G)=3個(gè)判定結(jié)點(diǎn)+1=4。4671481011132134基本路徑測試 - 導(dǎo)出測試用例第三步:第三步:導(dǎo)出測試用例根據(jù)上面的計(jì)算方法,可得出四個(gè)獨(dú)立的路徑。(一條獨(dú)立路徑是指,和其他的獨(dú)立路徑相比,至少引入一個(gè)新處理語句或一個(gè)新判斷的程序通路。V(G)值正好等于該程序的獨(dú)立路徑的條數(shù)。) 路徑

13、1:4-14 路徑2:4-6-7-14 路徑3:4-6-8-10-13-4-14 路徑4:4-6-8-11-13-4-14根據(jù)上面的獨(dú)立路徑,去設(shè)計(jì)輸入數(shù)據(jù),使程序分別執(zhí)行到上面四條路徑。4671481011132134基本路徑測試 - 準(zhǔn)備測試用例第四步:第四步:準(zhǔn)備測試用例 為了確?;韭窂郊械拿恳粭l路徑的執(zhí)行,根據(jù)判斷結(jié)點(diǎn)給出的條件,選擇適當(dāng)?shù)臄?shù)據(jù)以保證某一條路徑可以被測試到,滿足上面例子基本路徑集的測試用例是:基本路徑測試 - 準(zhǔn)備測試用例路徑1:4-14輸入數(shù)據(jù):iRecordNum0,或者取iRecordNum 0)o o if(0= =iType)o x=y+2; break;

14、o elseo if(1= =iType)o x=y+10;o elseo x=y+20;o 1. 例2:下例程序流程圖描述了最多輸入50個(gè)值(以1作為輸入結(jié)束標(biāo)志),計(jì)算其中有效的學(xué)生分?jǐn)?shù)的個(gè)數(shù)、總分?jǐn)?shù)和平均值。開始 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 返回FFFTTT12和345和6789101112123456789111012R1R2R3R4R5R6開始 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1

15、average= 1 返回FFFTTT12和345和6789101112步驟步驟1:導(dǎo)出過程的流圖導(dǎo)出過程的流圖步驟步驟2:2:確定環(huán)形復(fù)雜性度量確定環(huán)形復(fù)雜性度量V(G)V(G):1)V(G)= 6 (個(gè)區(qū)域)2)V(G)=EN+2=1612+2=6其中E為流圖中的邊數(shù),N為結(jié)點(diǎn)數(shù);3)V(G)=P+1=5+1=6 其中P為謂詞結(jié)點(diǎn)的個(gè)數(shù)。在流圖中,結(jié)點(diǎn)2、3、5、6、9是謂詞結(jié)點(diǎn)。123456789111012R1R2R3R4R5R6步驟步驟3 3:確定基本路徑集合確定基本路徑集合(即獨(dú)立路徑集合)。于是可確定6條獨(dú)立的路徑:路徑1:1-2-9-10-12路徑2:1-2-9-11-12路徑

16、3:1-2-3-9-10-12路徑4:1-2-3-4-5-8-2路徑5:1-2-3-4-5-6-8-2路徑6:1-2-3-4-5-6-7-8-2123456789111012R1R2R3R4R5R6步驟步驟4 4:為每一條獨(dú)立路徑各為每一條獨(dú)立路徑各設(shè)計(jì)一組測試用例,以便設(shè)計(jì)一組測試用例,以便強(qiáng)迫程序沿著該路徑至少強(qiáng)迫程序沿著該路徑至少執(zhí)行一次。執(zhí)行一次。1)路徑1(1-2-9-10-12)的測試用例: scorek=有效分?jǐn)?shù)值,當(dāng)k i ; scorei=1, 2i50;期望結(jié)果:根據(jù)輸入的有效分?jǐn)?shù)算出正確的分?jǐn)?shù)個(gè)數(shù)n1、總分sum和平均分average。開始 i =1,n1=n2=0,su

17、m=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 返回FFFTTT12和345和67891011122)路徑2(1-2-9-11-12)的測試用例: score 1 = 1 ; 期望的結(jié)果:average = 1 ,其他量保持初值。3)路徑3(1-2-3-9-10-12)的測試用例: 輸入多于50個(gè)有效分?jǐn)?shù),即試圖處理51個(gè)分?jǐn)?shù),要求前51個(gè)為有效分?jǐn)?shù);期望結(jié)果:n1=50、且算出正確的總分和平均分。開始 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1

18、average= 1 返回FFFTTT12和345和67891011124)路徑4(1-2-3-4-5-8-2)的測試用例: scorei=有效分?jǐn)?shù),當(dāng)i50; scorek0, k i ;期望結(jié)果:根據(jù)輸入的有效分?jǐn)?shù)算出正確的分?jǐn)?shù)個(gè)數(shù)n1、總分sum和平均分average。5)路徑5的測試用例: scorei=有效分?jǐn)?shù), 當(dāng)i100, k i ;期望結(jié)果:根據(jù)輸入的有效分?jǐn)?shù)算出正確的分?jǐn)?shù)個(gè)數(shù)n1、總分sum和平均分average。開始 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 返回FFFT

19、TT12和345和67891011126)路徑6(1-2-3-4-5-6-7-8-2)的測試用例: scorei=有效分?jǐn)?shù), 當(dāng)i50;期望結(jié)果:根據(jù)輸入的有效分?jǐn)?shù)算出正確的分?jǐn)?shù)個(gè)數(shù)n1、總分sum和平均分average。開始 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 返回FFFTTT12和345和6789101112 例3.第一步:第一步:導(dǎo)出控制流圖第二步:第二步:計(jì)算環(huán)形復(fù)雜度1)V(G)= 4 (個(gè)區(qū)域)2)V(G)=EN+2=108+2=4 其中E為流圖中的邊數(shù),N為結(jié)點(diǎn)數(shù);3)V

20、(G)=P+1=3+1=4 其中P為謂詞結(jié)點(diǎn)的個(gè)數(shù)。在流圖中,結(jié)點(diǎn)7、9、11是謂詞結(jié)點(diǎn)。第三步:第三步:確定基本路徑集 路徑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第四步:第四步:為每一條路徑設(shè)計(jì)測試用例白盒測試的主要目的: 保證一個(gè)模塊中的所有獨(dú)立路徑至少被執(zhí)行一次; 對(duì)所有的邏輯值均需要測試真、假兩個(gè)分支; 在上下邊界及可操作范圍內(nèi)運(yùn)行所有循環(huán); 檢查內(nèi)部數(shù)據(jù)結(jié)構(gòu)以確保其有效性。本章小結(jié) 控制流圖有以下幾個(gè)特點(diǎn): (1)具有唯一入口結(jié)點(diǎn),表示程序段的開始語句; (2)具有唯一出口

21、結(jié)點(diǎn),表示程序段的結(jié)束語句; (3)結(jié)點(diǎn)由帶標(biāo)號(hào)的圓圈表示,表示一個(gè)或多個(gè)無分支的源程序語句; (4)控制邊由帶箭頭的直線或弧表示,代表控制流的方向。本章小結(jié)白盒測試: 邏輯覆蓋+路徑覆蓋 覆蓋標(biāo)準(zhǔn)從低到高分別是: 語句覆蓋:是一個(gè)比較弱的測試標(biāo)準(zhǔn),它的含義是:選擇足夠的測試用例,使得程序中每個(gè)語句至少都能被執(zhí)行一次。它是最弱的邏輯覆蓋,效果有限,必須與其它方法交互使用。 判定覆蓋(也稱為分支覆蓋):執(zhí)行足夠的測試用例,使得程序中的每一個(gè)分支至少都通過一次。判定覆蓋只比語句覆蓋稍強(qiáng)一些,但實(shí)際效果表明,只是判定覆蓋,還不能保證一定能查出在判斷的條件中存在的錯(cuò)誤。因此,還需要更強(qiáng)的邏輯覆蓋準(zhǔn)則去檢驗(yàn)判斷內(nèi)部條件。條件覆蓋:執(zhí)行足夠的測試用例,使程序中每個(gè)判斷的每個(gè)條件的每個(gè)可能取值至少執(zhí)行一次;條件覆蓋深入到判定中的每個(gè)條

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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)論