白盒測試方法以及歸納

2021-08-01 09:59:51 字數 2949 閱讀 9938

白盒測試基本概念

白盒測試(white-box testing)又稱透明盒測試(glass box testing)、結構測試(structural testing)等,軟體測試的主要方法之一,也稱結構測試、邏輯驅動測試或基於程式本身的測試。測試應用程式的內部結構或運作,而不是測試應用程式的功能(即黑盒測試)。在白盒測試時,以程式語言的角度來設計測試案例。測試者輸入資料驗證資料流在程式中的流動路徑,並確定適當的輸出,類似測試電路中的節點。測試者了解待測試程式的內部結構、演算法等資訊,這是從程式設計者的角度對程式進行的測試。

白盒測試可以應用於單元測試(unit testing)、整合測試(integration testing)和系統的軟體測試流程,可測試在整合過程中每一單元之間的路徑,或者主系統跟子系統中的測試。儘管這種測試的方法可以發現許多的錯誤或問題,它可能無法檢測未使用部分的規範。

白盒測試中的六種覆蓋方法

白盒測試用例設計的乙個很重要的評估標準就是對**的覆蓋度。白盒測試中常見的覆蓋方法有六種:語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、組合覆蓋和路徑覆蓋。下面我們就分別看看這幾種不同的覆蓋吧。

一、語句覆蓋(statement coverage)

主要特點:語句覆蓋是最起碼的結構覆蓋要求,語句覆蓋需要選擇足夠的測試用例,使我們設計出來的測試用例要保證程式中的每乙個語句至少被執行一次。

優點:可以很直觀地從源**得到測試用例,無須細分每條判定表示式。

缺點:由於這種測試方法僅僅針對程式邏輯中顯式存在的語句,但對於隱藏的條件和可能到達的隱 式邏輯分支,是無法測試的。

舉例:

public int foo(int a,int b)

這是乙個求兩數之商的函式。如果我們設計如下的測試用例:

testcase: a =2, b =1

此時,該函式的**覆蓋率達到了100%,並且設計的case可以順利通過測試。但是顯然該函式有乙個很明顯的bug:當 b=0 時,會丟擲異常。

二、判定覆蓋(decision coverage)

主要特點:判定覆蓋又稱為分支覆蓋,它要求選擇足夠的測試用例,使得執行這些測試用例時,每個判定的所有可能結果至少出現一次。

優點:判定覆蓋比語句覆蓋要多幾乎一倍的測試路徑,當然也就具有比語句覆蓋更強的測試能力。同樣判定覆蓋也具有和語句覆蓋一樣的簡單性,無須細分每個判定就可以得到測試用例。

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

舉例:

- x y 路徑

90 90 oae

50 50 obde

90 70 obce

三、條件覆蓋(condition coverage)

主要特點:要求所設計的測試用例能使每個判定中的每乙個條件都獲得可能的取值,即每個條件至少有一次真值、有一次假值。

優點:顯然條件覆蓋比判定覆蓋,增加了對符合判定情況的測試,增加了測試路徑。條件覆蓋使得判定中的每乙個條件都取到了不同的結果,這一點判定覆蓋則無法保證。

缺點:要達到條件覆蓋,需要足夠多的測試用例,但條件覆蓋並不能保證判定覆蓋。條件覆蓋只能保證每個條件至少有一次為真,而不考慮所有的判定結果。

舉例:

- x y 路徑

90 70 obc

40 obd

四、判定條件覆蓋(decision/condition coverage)

判定條件覆蓋,說白了就是我們設計的測試用例可以使得判斷中每個條件所有的可能取值至少執行一次(條件覆蓋),同時每個判斷本身所有的結果也要至少執行一次(判定覆蓋)。不難發現判定條件覆蓋同時滿足判定覆蓋和條件覆蓋,彌補了兩者各自的不足,但是判定條件覆蓋並未考慮條件的組合情況。

五、組合覆蓋(branch condition combination coverage)

組合覆蓋也叫做條件組合覆蓋。意思是說我們設計的測試用例應該使得每個判定中的各個條件的各種可能組合都至少出現一次。顯然,滿足條件組合覆蓋的測試用例一定是滿足判定覆蓋、條件覆蓋和判定條件覆蓋的。

針對前文提到的流程圖,做條件組合覆蓋時我們可以設計如下用例:

testcase1: a=1, b=1 (路徑:ab)

testcase1: a=-1, b=-1 (路徑:acd)

testcase1: a=-1, b=0 (路徑:ace)

testcase1: a=1, b=-1 (路徑:ace)

條件組合覆蓋能夠同時滿足判定、條件和判定條件覆蓋,覆蓋度較高,但是組合覆蓋的測試用例數量相對來說也是比較多的。

六、路徑覆蓋

路徑覆蓋,意思是說我們設計的測試用例可以覆蓋程式中所有可能的執行路徑。這種覆蓋方法可以對程式進行徹底的測試用例覆蓋,比前面講的五種方法覆蓋度都要高。那麼這種方法是不是就一定最好呢?當然不能講得這麼絕對,它的缺點也是顯而易見的:由於需要對所有可能的路徑全部進行覆蓋,那麼我們需要設計數量非常巨大的而且較為複雜的測試用例,用例數量將呈現指數級的增長。所以理論上來講路徑覆蓋是最徹底的測試用例覆蓋,但實際上很多時候路徑覆蓋的可操作性不強。

總結以上簡單描述了幾種不用的邏輯覆蓋方法的原則和優劣。在實際的操作中,要正確使用白盒測試的**覆蓋方法,就要從**分析和**調研入手,根據調研的結果,可以選擇上述方法中的某一種,或者好幾種方法的結合,設計出高效的測試用例,盡可能全面地覆蓋到**中的每乙個邏輯路徑。

python 白盒測試 白盒測試方法

白盒測試是單元測試階段常用到的測試方法,其特點有 1 可以構成測試資料,使特定程式部分得到測試 2 有一定的充分性度量手段 3 可獲得較多工具支援 4 通常只用於單元測試。下邊通過一段 來看一下白盒測試中的邏輯覆蓋 那麼為了清晰,我們畫出乙個該程式的流程圖 1 語句覆蓋 語句覆蓋是最弱的邏輯覆蓋準則...

白盒測試方法

白盒測試方法 定義 白盒測試又稱結構測試 透明盒測試 邏輯驅動測試或基於 的測試。白盒測試是一種測試用例設計方法,盒子指的是被測試的軟體,白盒指的是盒子是可視的,你清楚盒子內部的東西以及裡面是如何運作的。白盒 法全面了解程式內部邏輯結構 對所有邏輯路徑進行測試。白盒 法是窮舉路徑測試。在使用這一方案...

白盒測試方法

白盒測試是單元測試階段常用到的測試方法,其特點有 1 可以構成測試資料,使特定程式部分得到測試 2 有一定的充分性度量手段 3 可獲得較多工具支援 4 通常只用於單元測試。下邊通過一段 來看一下白盒測試中的邏輯覆蓋 那麼為了清晰,我們畫出乙個該程式的流程圖 1 語句覆蓋 語句覆蓋是最弱的邏輯覆蓋準則...