條件覆蓋
出自 MBA智库百科(https://wiki.mbalib.com/)
目錄[隱藏] |
條件覆蓋是指設計足夠多的測試用例,運行被測程式,使得每一判定語句中每個邏輯條件的可能取值至少滿足一次。
條件覆蓋率=被評價到的條件取值的數量/條件取值的總數*100%
條件覆蓋的含義是:使每個判定表達式中的每個條件都取到各種可能的結果。
例1:
PROCEDURE M(VAR A,B,X:REAL);
BEGIN
IF (A>1) AND (B=0) THEN X:=X/A;
IF (A=2) OR (X>1) THEN X:=X+1;
END.
例1的程式有四個條件:
A>1、 B=0、A=2、X>1
為達到“條件覆蓋”標準,需執行足夠的測試用例使得在a點有:
A>1、A≤1、B=0、B≠0
等各種結果出現,以及在b點有:
A=2、A≠2、X>1、X≤1
等各種結果出現。
現在只需設計以下兩個測試用例就可滿足這一標準:
① A=2,B=0,X=4 (沿路徑ace執行);
② A=1,B=1,X=1 (沿路徑abd執行)。
![]() | ![]() | ![]() |
例2:
void DoWork(int x,int y,int z)
{ int k=0,j=0;
if((x>3)&&(z<10))
{ k=x*y-1; //語句塊1
j=sqrt(k);
}
if((x= =4)||(y>5))
j=x*y+10; //語句塊2
j=j%3; //語句塊3
}
對例2中的所有條件取值加以標記。
對於第一個判斷:
條件x>3 取真值為T1,取假值為-T1
條件z<10 取真值為T2,取假值為-T2
對於第二個判斷:
條件x=4 取真值為T3,取假值為-T3
條件y>5 取真值為T4,取假值為-T4
則可以設計測試用例如下:
測試用例 通過路徑 條件取值 覆蓋分支 x=4、y=6、z=5 abd T1、T2、T3、T4 bd x=2、y=5、z=5 ace -T1、T2、-T3、-T4 ce x=4、y=5、z=15 acd T1、-T2、T3、-T4 cd
上面的測試用例不但覆蓋了所有分支的真假兩個分支,而且覆蓋了判斷中的所有條件的可能值。
“條件覆蓋”並不包含“分支覆蓋”
如對語句
IF(A AND B) THEN S
設計2個測試用例,使其滿足“條件覆蓋”:
1、使A為真並使B為假;
2、使A為假而且B為真;
但是它們都未能使語句S得以執行。
對例2設計了下麵的測試用例,則雖然滿足了條件覆蓋,但只覆蓋了第一個條件的取假分支和第二個條件的取真分支,不滿足分支覆蓋的要求。
測試用例 通過路徑 條件取值 覆蓋分支 x=2、y=6、z=5 acd -T1、T2、-T3、T4 cd x=4、y=5、z=15 acd T1、-T2、T3、-T4 cd
![]() | ![]() | ![]() |