白盒測(cè)試又稱結(jié)構(gòu)測(cè)試、透明盒測(cè)試、邏輯驅(qū)動(dòng)測(cè)試或基于代碼的測(cè)試。白盒測(cè)試是一種測(cè)試用例設(shè)計(jì)方法,盒子指的是被測(cè)試的軟件,白盒指的是盒子是可視的,你清楚盒子內(nèi)部的東西以及里面是如何運(yùn)作的。"白盒"法全面了解程序內(nèi)部邏輯結(jié)構(gòu)、對(duì)所有邏輯路徑進(jìn)行測(cè)試。"白盒"法是窮舉路徑測(cè)試。白盒測(cè)試并不是簡(jiǎn)單的按照代碼設(shè)計(jì)用例,而是需要根據(jù)不同的測(cè)試需求,結(jié)合不同的測(cè)試對(duì)象,使用適合的方法進(jìn)行測(cè)試。
白盒測(cè)試用例設(shè)計(jì)的一個(gè)很重要的評(píng)估標(biāo)準(zhǔn)就是對(duì)代碼的覆蓋度。白盒測(cè)試中常見的覆蓋方法有六種:語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、組合覆蓋和路徑覆蓋。下面我們就分別看看這幾種不同的覆蓋吧。
一、語句覆蓋(Statement Coverage)
- 主要特點(diǎn):語句覆蓋是最起碼的結(jié)構(gòu)覆蓋要求,語句覆蓋需要選擇足夠的測(cè)試用例,使我們?cè)O(shè)計(jì)出來的測(cè)試用例要保證程序中的每一個(gè)語句至少被執(zhí)行一次。
- 優(yōu)點(diǎn):可以很直觀地從源代碼得到測(cè)試用例,無須細(xì)分每條判定表達(dá)式。
- 缺點(diǎn):由于這種測(cè)試方法僅僅針對(duì)程序邏輯中顯式存在的語句,但對(duì)于隱藏的條件和可能到達(dá)的隱 式邏輯分支,是無法測(cè)試的。
- 舉例
public int foo(int a,int b)
{
return a/b;
}
這是一個(gè)求兩數(shù)之商的函數(shù)。如果我們?cè)O(shè)計(jì)如下的測(cè)試用例:
TestCase: a =2, b =1
此時(shí),該函數(shù)的代碼覆蓋率達(dá)到了100%,并且設(shè)計(jì)的case可以順利通過測(cè)試。但是顯然該函數(shù)有一個(gè)很明顯的bug:當(dāng) b=0 時(shí),會(huì)拋出異常。
二、判定覆蓋(Decision Coverage)
- 主要特點(diǎn):判定覆蓋又稱為分支覆蓋,它要求選擇足夠的測(cè)試用例,使得運(yùn)行這些測(cè)試用例時(shí),每個(gè)判定的所有可能結(jié)果至少出現(xiàn)一次。
- 優(yōu)點(diǎn):判定覆蓋比語句覆蓋要多幾乎一倍的測(cè)試路徑,當(dāng)然也就具有比語句覆蓋更強(qiáng)的測(cè)試能力。同樣判定覆蓋也具有和語句覆蓋一樣的簡(jiǎn)單性,無須細(xì)分每個(gè)判定就可以得到測(cè)試用例。
- 缺點(diǎn):往往大部分的判定語句是由多個(gè)邏輯條件組合而成(如,判定語句中包含AND、OR、CASE),若僅僅判斷其整個(gè)最終結(jié)果,而忽略每個(gè)條件的取值情況,必然會(huì)遺漏部分測(cè)試路徑。
-
舉例
X Y 路徑
90 90 OAE
50 50 OBDE
90 70 OBCE
三、條件覆蓋(Condition Coverage)
- 主要特點(diǎn):要求所設(shè)計(jì)的測(cè)試用例能使每個(gè)判定中的每一個(gè)條件都獲得可能的取值,即每個(gè)條件至少有一次真值、有一次假值。
- 優(yōu)點(diǎn):顯然條件覆蓋比判定覆蓋,增加了對(duì)符合判定情況的測(cè)試,增加了測(cè)試路徑。條件覆蓋使得判定中的每一個(gè)條件都取到了不同的結(jié)果,這一點(diǎn)判定覆蓋則無法保證。
- 缺點(diǎn):要達(dá)到條件覆蓋,需要足夠多的測(cè)試用例,但條件覆蓋并不能保證判定覆蓋。條件覆蓋只能保證每個(gè)條件至少有一次為真,而不考慮所有的判定結(jié)果。
- 舉例
X Y 路徑
90 70 OBC
40 OBD
