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


一、語句覆蓋

念:語句覆蓋是一個比較弱的測試標准,它的含義是:選擇足夠的測試用例,使得程序中每個語句至少都能被執行一次

 

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為假的情況並未出現

 

六、路徑覆蓋

定義:程序中每條路徑都需要覆蓋

缺陷:路徑覆蓋也是一種比較強的覆蓋,但未必考慮判定條件結果的組合,並不能代替條件覆蓋和條件組合覆蓋

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM