一、語句覆蓋
概念:語句覆蓋是一個比較弱的測試標准,它的含義是:選擇足夠的測試用例,使得程序中每個語句至少都能被執行一次
if ((A > 1)&&( B == 0)) { X = X / A; } if ((A == 2) || ( X > 1)) { X = X + 1; }
測試用例:A=2,B=0,X=3
缺陷:如果代碼中第一個if條件中,“A>1&&B=0”錯寫成“ A>1 || B=0”。該錯誤語句覆蓋是測試不出問題
二、判定覆蓋
概念:程序中的每一個分支至少都通過一次
判定覆蓋只關心判定表達式的值(真/假)
if ((A > 1)&&( B == 0)) { X = X / A; } if ((A == 2) || ( X > 1)) { X = X + 1; }
舉例:
(1)A=3, B=0, X=1
(2)A=2, B=1, X=3
缺陷:如果異常是必須兩個if里都為真的情況下才會出現,那么判定覆蓋就沒有測試到該情況
三、條件覆蓋
定義:判定中的每個條件獲得各種可能的結果
if ((A > 1)&&( B == 0)) { X = X / A; } if ((A == 2) || ( X > 1)) { X = X + 1; }
舉例:
(1)A=2, B=1, X=4
(2)A=1, B=0, X=1
缺陷:雖然4個條件的真假都出現了一次,滿足條件覆蓋100%。但其中X=X/A語句並未測試到
四、判定/條件覆蓋
定義:判定中每個條件取到各種可能的值,並使每個判定取到各種可能的結果
if ((A > 1)&&( B == 0)) { X = X / A; } if ((A == 2) || ( X > 1)) { X = X + 1; }
舉例:
(1)A=2,B=0,X=4,
(2)A=1,B=1,X=1
缺陷:“判定/條件覆蓋”似乎是比較合理的,但事實並非如此,因為大多數計算機不能用一條指令對多個條件作出判定,
而必須將源程序中對多個條件的判定分解成幾個簡單判定,所以較徹底的測試應使每一個簡單判定都真正取到各種可能的結果
五、條件組合覆蓋
定義:每個判定中條件的各種可能組合都至少出現一次
if ((A > 1)&&( B == 0)) { X = X / A; } if ((A == 2) || ( X > 1)) { X = X + 1; }
舉例:
(1)A>1, B=0
(2)A>1, B!=0
(3)A≤1, B=0
(4)A≤1, B≠0
(5)A=2, X>1
(6)A=2,X≤1
(7)A≠2, X>1
(8)A≠2, X≤1
缺陷:雖然8種組合都出現了,但最基本的第一個if為真,第二個if為假的情況並未出現
六、路徑覆蓋
定義:程序中每條路徑都需要覆蓋
缺陷:路徑覆蓋也是一種比較強的覆蓋,但未必考慮判定條件結果的組合,並不能代替條件覆蓋和條件組合覆蓋