白盒測試之理論篇課件_第1頁
白盒測試之理論篇課件_第2頁
白盒測試之理論篇課件_第3頁
白盒測試之理論篇課件_第4頁
白盒測試之理論篇課件_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

白盒測試之理論篇2012-09-04為什么做白盒測試?這個問題比較復(fù)雜,我們先從一個比喻開始講起。

假設(shè)有一臺的面包機,從上面倒入面粉與水,開動機器后從下面出來的就是烤好了的面包,這個機器的功能比較單一,接口很清晰,輸入是面粉與水,輸出是面包。現(xiàn)在假定這個面包機多年未用,內(nèi)部都生銹了,現(xiàn)在要清洗它,類似于我們開發(fā)的軟件,軟件有Bug,那得通過測試來清理。那如何更快速的清洗這臺面包機呢?有兩種洗法,一是拿水從上往下灌,這是系統(tǒng)測試的方法。另一種是拆開來洗,拆開機器后,拿抺布沾點清潔劑,把各零件的坑坑槽槽擦洗一遍,然后組裝回來,再用水從上往下沖一遍,拆開來洗是白盒方法,組裝回來用水沖是黑盒方式,相當(dāng)于白盒測試之后再追加一次系統(tǒng)測試。無疑,上面第二種方法是正確的,我們的前提是:清洗多年未用的面包機,鐵銹夠多,如果洗不干凈,造出的面包都是致癌物質(zhì)。當(dāng)然,清洗面包機還只能算簡單勞動,清理軟件中的Bug要復(fù)雜得多,一個if語句有兩條分支,一個while循環(huán)判斷也是兩條分支,還有break、continue、return等,想想看,一個1萬行規(guī)模的軟件能有多少個分支!一個分支就是一條坑坑槽槽,而且軟件Bug還具備動態(tài)特性,不是靜止的明擺在哪兒。所以,軟件的白盒測試不可或缺,因為遺留Bug的影響很大,就像面包機沒洗凈留鐵銹會致癌,還因為軟件系統(tǒng)遠(yuǎn)比面包機復(fù)雜,不拆開來怎么能洗干凈!課程內(nèi)容1、白盒測試的概念、特點2、白盒測試的目的3、白盒測試的原則4、白盒測試的依據(jù)5、白盒測試的類別6、白盒測試的流程7、白盒測試的策略8、白盒測試方法1.2白盒測試的特點白盒法特點:以程序的內(nèi)部邏輯為基礎(chǔ)設(shè)計測試用例,所以又稱為邏輯覆蓋法。應(yīng)用白盒法時,手頭必須有程序的規(guī)格說明以及程序清單。

白盒法考慮的是測試用例對程序內(nèi)部邏輯的覆蓋程度。最徹底的白盒法是覆蓋程序中的每一條路徑,但是由于程序中一般含有循環(huán),所以路徑的數(shù)目極大,要執(zhí)行每一條路徑是不可能的,只能希望覆蓋的程度盡可能高些。2白盒測試的目的保證一個模塊中的所有獨立路徑至少被執(zhí)行一次;對所有的邏輯值均需要測試真、假兩個分支;在上下邊界及可操作范圍內(nèi)運行所有循環(huán);檢查內(nèi)部數(shù)據(jù)結(jié)構(gòu)以確保其有效性。提高代碼的質(zhì)量達(dá)到軟件產(chǎn)品中要求的可靠性、安全性;3白盒測試的原則白盒測試的原則有4點:1)保證一個模塊中所有路徑至少被測試一次;2)所有邏輯值都要測試真和假兩種情況;3)檢查程序的內(nèi)部數(shù)據(jù)結(jié)構(gòu)是否有效;4)檢查上、下邊界及可操作范圍內(nèi)運行所有循環(huán)。5白盒測試的類別白盒測試的類別具體分為8大類:1)軟件公用問題的測試;2)語言測試;3)SQL語句測試;4)數(shù)據(jù)類型測試;5)界面測試;6)數(shù)值對象測試;7)業(yè)務(wù)對象測試;8)數(shù)據(jù)管理對象測試。白盒測試的流程分為界面對象和業(yè)務(wù)對象兩種方式。界面對象測試界面對象測試的流程如圖2-1所示。圖2-1界面對象的流程圖6白盒測試的流程(2)業(yè)務(wù)對象流程測試業(yè)務(wù)對象測試的流程如圖2-2所示。6白盒測試的流程圖2-2業(yè)務(wù)對象測試的流程圖8白盒測試方法靜態(tài)測試代碼檢查法靜態(tài)結(jié)構(gòu)分析法動態(tài)測試邏輯測試語句覆蓋判定覆蓋條件覆蓋判定-條件覆蓋條件組合測試路徑測試白盒測試的其它方法條件測試數(shù)據(jù)流測試循環(huán)測試域測試Z路徑測試8.1

靜態(tài)測試

8.1.1

代碼檢查法8.1.2靜態(tài)結(jié)構(gòu)分析法

代碼檢查方式桌面檢查由程序員檢查自已編寫的程序在程序通過編譯之后,對源碼進(jìn)行分析檢查代碼審查由若干程序員和測試員組成審查小組通過閱讀、討論、爭議來對程序文檔進(jìn)行靜態(tài)分析走查由若干程序員和測試員組成審查小組,審查第一步:材料下發(fā)每個人,各自認(rèn)真閱讀、研究審查第二步:集中開會,大家根據(jù)預(yù)先設(shè)計好的測試用例,模擬運行程序,記錄程序蹤跡,供分析討論之用8.1.1代碼檢查法代碼檢查的主要項目變量交叉引用表標(biāo)號交叉引用表子程序、宏、函數(shù)等價性檢查常量檢查標(biāo)準(zhǔn)檢查風(fēng)格檢查比較控制流程序的規(guī)格說明8.1.2靜態(tài)結(jié)構(gòu)分析法使用靜態(tài)結(jié)構(gòu)分析工具分析程序源代碼的內(nèi)部結(jié)構(gòu)系統(tǒng)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)接口內(nèi)部控制邏輯可生成的分析文檔函數(shù)調(diào)用關(guān)系圖模塊控制流程圖內(nèi)部文件調(diào)用關(guān)系圖子程序表宏和函數(shù)參數(shù)表8.2

動態(tài)測試邏輯覆蓋法基本路徑覆蓋法

邏輯覆蓋測試方法通常采用流程圖來設(shè)計測試用例,它考察的重點是圖中的判定框,因為這些判定通常是與選擇結(jié)構(gòu)有關(guān)或是與循環(huán)結(jié)構(gòu)有關(guān),是決定程序結(jié)構(gòu)的關(guān)鍵成分。邏輯覆蓋法路徑測試就是設(shè)計足夠的測試用例,覆蓋程序中每一條可能的程序執(zhí)行路徑至少測試一次,如果程序中含有循環(huán)(在程序圖中表現(xiàn)為環(huán))則每個循環(huán)至少執(zhí)行一次。路徑測試法

邏輯覆蓋測試的5種標(biāo)準(zhǔn)

8.2.1語句覆蓋語句覆蓋”是一個比較弱的測試標(biāo)準(zhǔn),它的含義是:選擇足夠的測試用例,使得程序中每個語句至少都能被執(zhí)行一次。為使程序中每個語句至少執(zhí)行一次,只需設(shè)計一個能通過路徑ace的例子就可以了,例如選擇輸入數(shù)據(jù)為:A=2,B=0,X=3就可達(dá)到“語句覆蓋”標(biāo)準(zhǔn)。

從上例可看出,語句覆蓋實際上是很弱的,如果第一個條件語句中的AND錯誤地編寫成OR,上面的測試用例是不能發(fā)現(xiàn)這個錯誤的;又如第三個條件語句中X>1誤寫成X>0,這個測試用例也不能暴露它,此外,沿著路徑abd執(zhí)行時,X的值應(yīng)該保持不變,如果這一方面有錯誤,上述測試數(shù)據(jù)也不能發(fā)現(xiàn)它們。語句覆蓋8.2.1分支覆蓋A=3,B=0,X=1(沿路徑acd執(zhí)行)

A=2,B=1,X=3(沿路徑abe執(zhí)行)比“語句覆蓋”稍強的覆蓋標(biāo)準(zhǔn)是“分支覆蓋”含義是:執(zhí)行足夠的測試用例,使得程序中的每一個分支至少都通過一次。

對例1的程序,如果設(shè)計兩個例子,使它們能通過路徑ace和abd,或者通過路徑acd和abe,就可達(dá)到“判定覆蓋”標(biāo)準(zhǔn),為此,可以選擇輸入數(shù)據(jù)為:①A=3,B=0,X=1(沿路徑acd執(zhí)行);

②A=2,B=1,X=3(沿路徑abe執(zhí)行)

程序中含有判定的語句包括if-then-else、do-until、case、do-while等,所以“分支覆蓋”更一般的含義是:使得每一個分支獲得每一種可能的結(jié)果。

“分支覆蓋”比“語句覆蓋”嚴(yán)格,因為如果每個分支都執(zhí)行過了,則每個語句也就執(zhí)行過了。但是,“分支覆蓋”還是很不夠的,例如例1兩個測試用例未能檢查沿著路徑abd執(zhí)行時,X的值是否保持不變。8.2.1條件覆蓋A=2,B=0,X=4

(沿路徑ace執(zhí)行)A=1,B=1,X=1

(沿路徑abd執(zhí)行)一個判定中往往包含了若干個條件,如例1的程序中,判定(A>1)AND(B=0)包含了兩個條件:A>1以及B=0,所以可引進(jìn)一個更強的覆蓋標(biāo)準(zhǔn)——“條件覆蓋”?!皸l件覆蓋”的含義是:執(zhí)行足夠的測試用例使得判定中的每個條件獲得各種可能的結(jié)果。

例1的程序有四個條件:A>1、B=0、A=2、X>1為了達(dá)到“條件覆蓋”標(biāo)準(zhǔn),需要執(zhí)行足夠的測試用例使得在a點有:A>1、A≤1、B=0、B≠0等各種結(jié)果出現(xiàn),以及在b點有:A=2、A≠2、X>1、X≤1等各種結(jié)果出現(xiàn)?,F(xiàn)在只需設(shè)計以下兩個測試用例就可滿足這一標(biāo)準(zhǔn):①A=2,B=0,X=4

(沿路徑ace執(zhí)行);

②A=1,B=1,X=1

(沿路徑abd執(zhí)行)。條件覆蓋 如對例2設(shè)計了下面的測試用例,則雖然滿足了條件覆蓋,但只覆蓋了第一個條件的取假分支和第二個條件的取真分支,不滿足分支覆蓋的要求。8.2.1分支/條件覆蓋針對上面的問題引出了另一種覆蓋標(biāo)準(zhǔn)——“分支/條件覆蓋”,它的含義是:執(zhí)行足夠的測試用例,使得分支中每個條件取到各種可能的值,并使每個分支取到各種可能的結(jié)果。對例1的程序,前面的兩個例子 ①A=2,B=0,X=4(沿ace路)

②A=1,B=1,X=1(沿abd路徑)

是滿足這一標(biāo)準(zhǔn)的。8.2.2基本路徑測試法

基本路徑測試法是在程序控制流圖的基礎(chǔ)上,通過分析控制構(gòu)造的環(huán)路復(fù)雜性,導(dǎo)出基本可執(zhí)行路徑集合,從而設(shè)計測試用例的方法。設(shè)計出的測試用例要保證在測試中程序的每個可執(zhí)行語句至少執(zhí)行一次?;韭窂綔y試法的重點內(nèi)容如下:★程序的控制流圖:描述程序控制流的一種圖示方法。★程序環(huán)形復(fù)雜度:McCabe復(fù)雜性度量。從程序的環(huán)路復(fù)雜性可導(dǎo)出程序基本路徑集合中的獨立路徑條數(shù),這是確定程序中每個可執(zhí)行語句至少執(zhí)行一次所必須的測試用例數(shù)目的上界。基本路徑測試方法包括以下4個步驟:①畫出程序的控制流圖。②計算程序的環(huán)形復(fù)雜度,導(dǎo)出程序基本路徑集中的獨立路徑條數(shù),這是確定程序中每個可執(zhí)行語句至少執(zhí)行一次所必須的測試用例數(shù)目的上界。③導(dǎo)出基本路徑集,確定程序的獨立路徑。④根據(jù)③中的獨立路徑,設(shè)計測試用例的輸入數(shù)據(jù)和預(yù)期輸出。8.2.2基本路徑測試法1.程序控制流圖程序控制流圖(可簡稱流圖)是對程序流程圖進(jìn)行簡化后得到的,它突出表示程序控制流的結(jié)構(gòu)。程序控制流圖是描述程序控制流的一種方式??刂屏鲌D圖形符號:圖形符號:圓圈代表一個結(jié)點,表示一個或多個無分支的語句或源程序語句;程序控制流邊和點圈定的部分叫做區(qū)域。當(dāng)對區(qū)域計數(shù)時,圖形外的一個部分也應(yīng)記為一個區(qū)域;判斷語句中的條件為復(fù)合條件時,即條件表達(dá)式由一個或多個邏輯運算符連接的邏輯表達(dá)式(a

andb),則需要改變復(fù)合條件的判斷為一系列只有單個條件的嵌套的判斷?;韭窂綔y試方法是在控制流圖的基礎(chǔ)上,通過分析控制結(jié)構(gòu)的環(huán)形復(fù)雜度,導(dǎo)出執(zhí)行路徑的基本集,再從該基本集設(shè)計測試用例。圖2-4程序控制流程圖8.3白盒測試的其它方法簡介條件測試數(shù)據(jù)流測試循環(huán)測試域測試Z路徑測試8.3.1條件測試條件測試是檢查程序模塊中所包含邏輯條件的測試用例設(shè)計方法主要用于測試程序中條件錯誤和程序的其他錯誤一般的說,如果程序的測試集能夠有效地檢測程序中的條件錯誤,則該測試集可能也會有效地檢測程序中的其他錯誤條件測試策略主要優(yōu)點條件測試的覆蓋率計算相對簡單程序的條件測試覆蓋率為產(chǎn)生另外的程序測試提供了指導(dǎo)8.3.1條件測試條件式分析一個簡單條件是一個布爾變量或一個可能帶有NOT操作符的關(guān)系表達(dá)式,形式為:E1<關(guān)系操作符>E2其中E1和E2是算術(shù)表達(dá)式,而<關(guān)系操作符>是下列之一: “<”、“≤”、“=”、“≠”(“!=”)、“>”、或“≥”復(fù)雜條件由簡單條件、布爾操作符和括弧組成,設(shè)可用于復(fù)雜條件的布爾算子包括OR,AND和NOT,不含關(guān)系表達(dá)式的條件稱為布爾表達(dá)式。所以條件的成分類型包括:布爾操作符布爾變量布爾括弧(括住簡單或復(fù)雜條件)關(guān)系操作符或算術(shù)表達(dá)式條件式錯誤如果條件不正確,則至少有一個條件成分不正確,條件錯誤一般有以下類型布爾操作符錯誤布爾變量錯誤布爾括弧錯誤關(guān)系操作符或算術(shù)表達(dá)式錯誤8.3.2數(shù)據(jù)流測試數(shù)據(jù)流測試是按照程序中的變量定義和使用的位置來選擇程序的測試路徑數(shù)據(jù)流測試方法能有效發(fā)現(xiàn)錯誤,由于變量的定義和使用,使程序中的語句都彼此相關(guān)數(shù)據(jù)流測試方法主要用于為包含嵌套if和循環(huán)語句的程序選擇測試路徑前提設(shè)程序每條語句都賦予了獨立的語句號,而且每個函數(shù)都不改變其參數(shù)和全局變量,對于語句號為S的語句DEF(S)={X|語句S包含X的定義}USE(S)={X|語句S包含X的使用}如果存在從S到S′的路徑,并且該路徑不含X的其他定義,則變量X在語句S處的定義在語句S′仍然有效變量X的定義,使用鏈(或稱DU鏈)形式如[X,S,S′],其中S和S′是語句號,X在DEF(S)和USE(S′)中,而且語句S定義的X在語句S′有效使用鏈的測試策略要求每個DU鏈至少覆蓋一次可以證明DU測試不能保證覆蓋程序的所有分支8.3.4循環(huán)測試循環(huán)測試是一種白盒測試技術(shù),著重于檢查循環(huán)結(jié)構(gòu)的有效性。有如下四種循環(huán):簡單循環(huán)嵌套循環(huán)串接循環(huán)不規(guī)則循環(huán)8.3.4循環(huán)測試簡單循環(huán)整個跳過循環(huán)只有一次通過循環(huán)兩次通過循環(huán)m次通過循環(huán),其中m<nn-1,n,n+1次通過循環(huán)其中n是允許通過循環(huán)的最大次數(shù)嵌套循環(huán)如果將簡單循環(huán)的測試方法用于嵌套循環(huán),可能的測試數(shù)就會隨嵌套層數(shù)成幾何級增加,這會導(dǎo)致不實際的測試數(shù)目減少測試數(shù)的方法對最內(nèi)層循環(huán)使用簡單循環(huán),而使外層循環(huán)的循環(huán)參數(shù)(即循環(huán)計數(shù))最小,并為范圍外或排除的值增加其它測試由內(nèi)向外構(gòu)造下一個循環(huán)的測試,但其它的外層循環(huán)為最小值,并使其它的嵌套循環(huán)為“典型”值繼續(xù)直到測試所有的循環(huán)8.3.4循環(huán)測試串接循環(huán)如果串接循環(huán)的循環(huán)都彼此獨立,可是使用嵌套的策略測試如果兩個循環(huán)串接起來,而第一個循環(huán)是第二個循環(huán)的初始值,則這兩個循環(huán)并不是獨立的。則可使用測試嵌套循環(huán)的方法進(jìn)行測試不規(guī)則循環(huán)不能測試,盡量重新設(shè)計給結(jié)構(gòu)化的程序結(jié)構(gòu)后再進(jìn)行測試8.3.5域測試域是指程序的輸入空間輸入空間又可以劃分成若干個子空間,每個子空間對應(yīng)一種不同的計算,子空間的劃分是由分支語句的條件式?jīng)Q定的有時將一個域稱為一個等介類域測試主要是針對域錯誤進(jìn)行的測試域錯誤如果程序的控制流有錯誤,對于某些特定的正確輸入,可能執(zhí)行的是一條錯誤的路徑,這種錯誤稱為域錯誤域測試就是在分析輸入域的基礎(chǔ)上,選擇適當(dāng)?shù)臏y試點進(jìn)行測試域測試的不足域測試對程序的限制較多當(dāng)程序中有很多的路徑時,所需的測試點太多8.3.5

Z路徑測試將程序中的循環(huán)次數(shù)加以限制,通常為循環(huán)1次或0次,這樣就將循環(huán)結(jié)構(gòu)變?yōu)榉种ЫY(jié)構(gòu),這種方法稱為Z路徑測試Z路徑測試能有效降低被測程序的路徑數(shù)面向?qū)ο蟮陌缀袦y試 對面向?qū)ο筌浖念悳y試相當(dāng)于傳統(tǒng)軟件的單元測試。和傳統(tǒng)軟件的單元測試不同,他往往關(guān)注模塊的算法細(xì)節(jié)和模塊接口間流動的數(shù)據(jù),面向?qū)ο筌浖念悳y試是由封裝在類中的操作和類的狀態(tài)行為所驅(qū)動的。

面向?qū)ο筌浖y試的特點:因為屬性和操作是被封裝的,對類之外操作的測試通常是徒勞的。封裝使對對象的狀態(tài)快照難于獲得。繼承也給測試帶來了難度,即使是徹底復(fù)用的,對每個新的使用語境也需要重新測試。多重繼承更增加了需要測試的語境的數(shù)量,使測試進(jìn)一步復(fù)雜化。如果從超類導(dǎo)出的測試用例被用于相同的問題域,有可

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論