白盒測試 語句覆蓋、斷定覆蓋、條件覆蓋、斷定條件覆蓋、條件組合覆蓋、路徑覆蓋

轉自 http://blog.csdn.net/nashviller/article/details/7383814單元測試

白盒測試做爲測試人員經常使用的一種測試方法,愈來愈受到測試工程師的重視。白盒測試並非簡單的按照代碼設計用例,而是須要根據不一樣的測試需求,結合不一樣的測試對象,使用適合的方法進行測試。由於對於不一樣複雜度的代碼邏輯,能夠衍生出許多種執行路徑,只有適當的測試方法,才能幫助咱們從代碼的迷霧森林中找到正確的方向。本文介紹六種白盒子測試方法:語句覆蓋、斷定覆蓋、條件覆蓋、斷定條件覆蓋、條件組合覆蓋、路徑覆蓋。測試

  白盒測試的概述優化

  因爲邏輯錯誤和不正確假設與一條程序路徑被運行的可能性成反比。因爲咱們常常相信某邏輯路徑不可能被執行, 而事實上,它可能在正常的狀況下被執行。因爲代碼中的筆誤是隨機且沒法杜絕的,所以咱們要進行白盒測試。spa

  白盒測試又稱結構測試,透明盒測試、邏輯驅動測試或基於代碼的測試。白盒測試是一種測試用例設計方法,盒子指的是被測試的軟件,白盒指的是盒子是可視的,你清楚盒子內部的東西以及裏面是如何運做的。.net

  白盒的測試用例須要作到:設計

  ·保證一個模塊中的全部獨立路徑至少 被使用一次
  ·對全部邏輯值均需測試 true 和 false
  ·在上下邊界及可操做範圍內運行全部循環
  ·檢查內部 數據結構以確保其有效性

  白盒測試的目的:經過檢查軟件內部的邏輯結構,對軟件中的邏輯路徑進行覆蓋測試;在程序不一樣地方設立檢查點,檢查程序的狀態,以肯定實際運行狀態與預期狀態是否一致。對象

  白盒測試的特色:依據軟件設計說明書進行測試、對程序內部細節的嚴密檢驗、針對特定條件設計測試用例、對軟件的邏輯路徑進行覆蓋測試。blog

  白盒測試的實施步驟:圖片

  1.測試計劃階段:根據需求說明書,制定測試進度。
  2.測試設計階段:依據程序設計說明書,按照必定規範化的方法進行軟件結構劃分和設計測試用例。
  3.測試執行階段:輸入測試用例,獲得測試結果。
  4.測試總結階段:對比測試的結果和代碼的預期結果, 分析錯誤緣由,找到並解決錯誤。

  白盒測試的方法:整體上分爲靜態方法和動態方法兩大類。ci

  靜態分析是一種不經過執行程序而進行測試的技術。靜態分析的關鍵功能是檢查軟件的表示和描述是否一致,沒有衝突或者沒有歧義。

  動態分析的主要特色是當軟件系統在模擬的或真實的環境中執行以前、之中和以後 , 對軟件系統行爲的分析。動態分析包含了程序在受控的環境下使用特定的指望結果進行正式的運行。它顯示了一個系統在檢查狀態下是正確仍是不正確。在動態分析技術中,最重要的技術是路徑和分支測試。下面要介紹的六種覆蓋測試方法屬於動態分析方法。

  白盒測試的優缺點

  1. 優勢

  ·迫使測試人員去仔細思考軟件的 實現
  ·能夠檢測代碼中的每條分支和路徑
  ·揭示隱藏在代碼中的錯誤
  ·對代碼的測試比較完全
  ·最優化

  2. 缺點

  ·昂貴
  ·沒法檢測代碼中遺漏的路徑和數據敏感性錯誤
  ·不驗證規格的正確性

六種覆蓋方法

  首先爲了下文的舉例描述方便,這裏先給出一張程序流程圖。(本文以1995年軟件設計師考試的一道考試題目爲例,圖中紅色字母表明程序執行路徑)。

  

  一、語句覆蓋

  1)主要特色:語句覆蓋是最起碼的結構覆蓋要求,語句覆蓋要求設計足夠多的測試用例,使得程序中每條語句至少被執行一次。

  2)用例設計:(若是此時將A路徑上的語句1—〉T去掉,那麼用例以下)

  

 
X
Y
路徑
1
50
50
OBDE
2
90
70
OBCE

  3)優勢:能夠很直觀地從源代碼獲得測試用例,無須細分每條斷定表達式。

  4)缺點:因爲這種測試方法僅僅針對程序邏輯中顯式存在的語句,但對於隱藏的條件和可能到達的隱式邏輯分支,是沒法測試的。在本例中去掉了語句1—〉T去掉,那麼就少了一條測試路徑。在if結構中若源代碼沒有給出else後面的執行分支,那麼語句覆蓋測試就不會考慮這種狀況。可是咱們不能排除這種之外的分支不會被執行,而每每這種錯誤會常常出現。再如,在Do-While結構中,語句覆蓋執行其中某一個條件分支。那麼顯然,語句覆蓋對於多分支的邏輯運算是沒法全面反映的,它只在意運行一次,而不考慮其餘狀況。

  二、斷定覆蓋

  1)主要特色:斷定覆蓋又稱爲分支覆蓋,它要求設計足夠多的測試用例,使得程序中每一個斷定至少有一次爲真值,有一次爲假值,即:程序中的每一個分支至少執行一次。每一個判斷的取真、取假至少執行一次。

  2)用例設計:

  

 
X
Y
路徑
1
90
90
OAE
2
50
50
OBDE
3
90
70
OBCE

  3)優勢:斷定覆蓋比語句覆蓋要多幾乎一倍的測試路徑,固然也就具備比語句覆蓋更強的測試能力。一樣斷定覆蓋也具備和語句覆蓋同樣的簡單性,無須細分每一個斷定就能夠獲得測試用例。

  4)缺點:每每大部分的斷定語句是由多個邏輯條件組合而成(如,斷定語句中包含AND、OR、CASE),若僅僅判斷其整個最終結果,而忽略每一個條件的取值狀況,必然會遺漏部分測試路徑。

  三、條件覆蓋

  1)主要特色:條件覆蓋要求設計足夠多的測試用例,使得斷定中的每一個條件得到各類可能的結果,即每一個條件至少有一次爲真值,有一次爲假值。

  2)用例設計:

  

 
X
Y
路徑
1
90
70
OBC
2
40
 
OBD

  3)優勢:顯然條件覆蓋比斷定覆蓋,增長了對符合斷定狀況的測試,增長了測試路徑。

  4)缺點:要達到條件覆蓋,須要足夠多的測試用例,但條件覆蓋並不能保證斷定覆蓋。條件覆蓋只能保證每一個條件至少有一次爲真,而不考慮全部的斷定結果。

 四、斷定/條件覆蓋

  1)主要特色:設計足夠多的測試用例,使得斷定中每一個條件的全部可能結果至少出現一次,每一個斷定自己全部可能結果也至少出現一次。

  2)用例設計:

  

 
X
Y
路徑
1
90
90
OAE
2
50
50
OBDE
3
90
70
OBCE
4
70
90
OBCE

  3)優勢:斷定/條件覆蓋知足斷定覆蓋準則和條件覆蓋準則,彌補了兩者的不足。

  4)缺點:斷定/條件覆蓋準則的缺點是未考慮條件的組合狀況。

  五、組合覆蓋

  1)主要特色:要求設計足夠多的測試用例,使得每一個斷定中條件結果的全部可能組合至少出現一次。

  2)用例設計:

  

 
X
Y
路徑
1
90
90
OAE
2
90
70
OBCE
3
90
30
OBDE
4
70
90
OBCE
5
30
90
OBDE
6
70
70
OBDE
7
50
50
OBDE

  3)優勢:多重條件覆蓋準則知足斷定覆蓋、條件覆蓋和斷定/條件覆蓋準則。更改的斷定/條件覆蓋要求設計足夠多的測試用例,使得斷定中每一個條件的全部可能結果至少出現一次,每一個斷定自己的全部可能結果也至少出現一次。而且每一個條件都顯示能單獨影響斷定結果。

  4)缺點:線性地增長了測試用例的數量。

  六、路徑覆蓋

  1)主要特色:設計足夠的測試用例,覆蓋程序中全部可能的路徑。

  2)用例設計:

  

 
X
Y
路徑
1
90
90
OAE
2
50
50
OBDE
3
90
70
OBCE
4
70
90
OBCE

  3)優勢:這種測試方法能夠對程序進行完全的測試,比前面五種的覆蓋面都廣。

  4)缺點:因爲路徑覆蓋須要對全部可能的路徑進行測試(包括循環、條件組合、分支選擇等),那麼須要設計大量、複雜的測試用例,使得工做量呈指數級增加。而在有些狀況下,一些執行路徑是不可能被執行的,如:
  If (!A)B++;
  If (!A)D--;

  這兩個語句實際只包括了2條執行路徑,即A爲真或假時候對B和D的處理,真或假不可能都存在,而路徑覆蓋測試則認爲是包含了真與假的4條執行路徑。這樣不只下降了測試效率,並且大量的測試結果的累積,也爲排錯帶來麻煩。

  總結

  白盒測試是一種被普遍使用的邏輯測試方法,是由程序內部邏輯驅動的一種單元測試方法。只有對程序內部十分了解才能進行適度有效的白盒測試。可是貫穿在程序內部的邏輯存在着不肯定性和無窮性,尤爲對於大規模複雜軟件。所以咱們不能窮舉全部的邏輯路徑,即便窮舉也未必會帶來好運(窮舉不能查出程序邏輯規則錯誤,不能查出數據相關錯誤,不能查出程序遺漏的路徑)。

  那麼正確使用白盒測試,就要先從代碼分析入手,根據不一樣的代碼邏輯規則、語句執行狀況,選用適合的覆蓋方法。任何一個高效的測試用例,都是針對具體測試場景的。邏輯測試不是片面的測試正確的結果或是測試錯誤的結果,而是儘量全面地覆蓋每個邏輯路徑。

相關文章
相關標籤/搜索