白盒測試又稱結(jié)構(gòu)測試、透明盒測試丙唧、邏輯驅(qū)動測試或基于代碼的測試愈魏。白盒測試是一種測試用例設(shè)計方法,盒子指的是被測試的軟件,白盒指的是盒子是可視的培漏,你清楚盒子內(nèi)部的東西以及里面是如何運作的溪厘。"白盒"法全面了解程序內(nèi)部邏輯結(jié)構(gòu)、對所有邏輯路徑進行測試牌柄。"白盒"法是窮舉路徑測試畸悬。白盒測試并不是簡單的按照代碼設(shè)計用例,而是需要根據(jù)不同的測試需求珊佣,結(jié)合不同的測試對象蹋宦,使用適合的方法進行測試。
白盒測試用例設(shè)計的一個很重要的評估標準就是對代碼的覆蓋度咒锻。白盒測試中常見的覆蓋方法有六種:語句覆蓋冷冗、判定覆蓋、條件覆蓋惑艇、判定/條件覆蓋贾惦、組合覆蓋和路徑覆蓋。下面我們就分別看看這幾種不同的覆蓋吧敦捧。
一须板、語句覆蓋(Statement Coverage)
- 主要特點:語句覆蓋是最起碼的結(jié)構(gòu)覆蓋要求,語句覆蓋需要選擇足夠的測試用例,使我們設(shè)計出來的測試用例要保證程序中的每一個語句至少被執(zhí)行一次。
- 優(yōu)點:可以很直觀地從源代碼得到測試用例缰猴,無須細分每條判定表達式茵汰。
- 缺點:由于這種測試方法僅僅針對程序邏輯中顯式存在的語句,但對于隱藏的條件和可能到達的隱 式邏輯分支捍掺,是無法測試的。
- 舉例
public int foo(int a,int b)
{
return a/b;
}
這是一個求兩數(shù)之商的函數(shù)。如果我們設(shè)計如下的測試用例:
TestCase: a =2, b =1
此時课兄,該函數(shù)的代碼覆蓋率達到了100%,并且設(shè)計的case可以順利通過測試晨继。但是顯然該函數(shù)有一個很明顯的bug:當 b=0
時烟阐,會拋出異常。
二紊扬、判定覆蓋(Decision Coverage)
- 主要特點:判定覆蓋又稱為分支覆蓋蜒茄,它要求選擇足夠的測試用例,使得運行這些測試用例時餐屎,每個判定的所有可能結(jié)果至少出現(xiàn)一次檀葛。
- 優(yōu)點:判定覆蓋比語句覆蓋要多幾乎一倍的測試路徑,當然也就具有比語句覆蓋更強的測試能力腹缩。同樣判定覆蓋也具有和語句覆蓋一樣的簡單性屿聋,無須細分每個判定就可以得到測試用例空扎。
- 缺點:往往大部分的判定語句是由多個邏輯條件組合而成(如,判定語句中包含AND润讥、OR转锈、CASE),若僅僅判斷其整個最終結(jié)果象对,而忽略每個條件的取值情況黑忱,必然會遺漏部分測試路徑。
-
舉例
X Y 路徑
90 90 OAE
50 50 OBDE
90 70 OBCE
三勒魔、條件覆蓋(Condition Coverage)
- 主要特點:要求所設(shè)計的測試用例能使每個判定中的每一個條件都獲得可能的取值甫煞,即每個條件至少有一次真值、有一次假值冠绢。
- 優(yōu)點:顯然條件覆蓋比判定覆蓋抚吠,增加了對符合判定情況的測試,增加了測試路徑弟胀。條件覆蓋使得判定中的每一個條件都取到了不同的結(jié)果楷力,這一點判定覆蓋則無法保證。
- 缺點:要達到條件覆蓋孵户,需要足夠多的測試用例萧朝,但條件覆蓋并不能保證判定覆蓋。條件覆蓋只能保證每個條件至少有一次為真夏哭,而不考慮所有的判定結(jié)果检柬。
- 舉例
X Y 路徑
90 70 OBC
40 OBD