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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

靜態測試

8.1.1

代碼檢查法8.1.2靜態結構分析法

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

動態測試邏輯覆蓋法基本路徑覆蓋法

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

邏輯覆蓋測試的5種標準

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

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

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

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

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

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

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

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

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

例1的程序有四個條件:A>1、B=0、A=2、X>1為了達到“條件覆蓋”標準,需要執行足夠的測試用例使得在a點有:A>1、A≤1、B=0、B≠0等各種結果出現,以及在b點有:A=2、A≠2、X>1、X≤1等各種結果出現。現在只需設計以下兩個測試用例就可滿足這一標準:①A=2,B=0,X=4

(沿路徑ace執行);

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

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

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

是滿足這一標準的。8.2.2基本路徑測試法

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

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

Z路徑測試將程序中的循環次數加以限制,通常為循環1次或0次,這樣就將循環結構變為分支結構,這種方法稱為Z路徑測試Z路徑測試能有效降低被測程序的路徑數面向對象的白盒測試 對面向對象軟件的類測試相當于傳統軟件的單元測試。和傳統軟件的單元測試不同,他往往關注模塊的算法細節和模塊接口間流動的數據,面向對象軟件的類測試是由封裝在類中的操作和類的狀態行為所驅動的。

面向對象軟件測試的特點:因為屬性和操作是被封裝的,對類之外操作的測試通常是徒勞的。封裝使對對象的狀態快照難于獲得。繼承也給測試帶來了難度,即使是徹底復用的,對每個新的使用語境也需要重新測試。多重繼承更增加了需要測試的語境的數量,使測試進一步復雜化。如果從超類導出的測試用例被用于相同的問題域,有可

溫馨提示

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

評論

0/150

提交評論