软件白盒子测试
| ? ?“語句覆蓋”是一個比較弱的測試標準,它的含義是:選擇足夠的測試用例,使得程序中每個語句每個都能至少被執行一次。 ? ?? ? | |||||||||||||
| 圖6.4是一個被測試的程序,它的源程序是: PROCEDURE?M(VAR A,B,X:REAL);?? BEGIN IF(A>1) AND (B=0)? THENX:=X/A; IF(A=2)OR?(X>1)??THENX:=X+1; END.? 為使程序中每個語句至少執行一次,只需設計一個能通過路徑ace的例子就可以了,例如選擇輸入數據為: ?A=2,B=0,X=3 ?就可達到“語句覆蓋”標準。? | ? | ||||||||||||
| 從本例可看出,語句覆蓋實際上是很弱的,如果第一個條件語句中的AND錯誤地編寫成OR,上面的測試用例是不能發現這個錯誤的;又如第三個條件語句中X>1誤寫成X>0,這個測試用例也不能暴露它,此外,沿著路徑abd執行時,X的值應該保持不變,如果這一方面有錯誤,上述測試數據也不能發現它們。 總之,一般認為“語句覆蓋”是很不充分的一種標準。 ? ? 比“語句覆蓋”稍強的覆蓋標準是“判定覆蓋”(或稱分支覆蓋)標準。含義是:執行足夠的測試用例,使得程序中的每一個分支至少都通過一次。 ? 對圖6.4的程序,如果設計兩個例子,使它們能通過路徑ace和abd,或者通過路徑acd和abe,就可達到“判定覆蓋”標準,為此,可以選擇輸入數據為: ? ①A=3,B=0,X=1(沿路徑acd執行);???????②A=2,B=1,X=3(沿路徑abe執行) ?
? 程序中含有判定的語句包括IF-THEN-ELSE、DO-WHILE、REPEAT-UNTIL等,除了雙值的判定語句外,還有多值的判定語句,如PASCAL中的CASE語句、FORTRAN中帶有三個分支的IF語句等。所以“判定覆蓋”更一般的含義是:使得每一個判定獲得每一種可能的結果。 ? “判定覆蓋”比“語句覆蓋”嚴格,因為如果每個分支都執行過了,則每個語句也就執行過了。但是,“判定覆蓋”還是很不夠的,例如上面兩個測試用例未能檢查沿著路徑abd執行時,X的值是否保持不變。 ? ? ? 一個判定中往往包含了若干個條件,例如圖6.4的程序中,判定(A>1) AND (B=0)包含了兩個條件:A>1以及B=0,所以可引進一個更強的覆蓋標準——“條件覆蓋”。“條件覆蓋”的含義是:執行足夠的測試用例,使得判定中的每個條件獲得各種可能的結果。??? ? 圖6.4的程序有四個條件: ? ????????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執行)。? ?
? “條件覆蓋”通常比“判定覆蓋”強,因為它使一個判定中的每一個條件都取到了兩個不同的結果,而判定覆蓋則不保證這一點。但如對語句IF(A AND B)THEN S設計測試用例使其滿足"條件覆蓋",即使A為真并使B為假,以及使A為假而且B為真,但是它們都未能使語句S得以執行。 ? ? ? 針對上面的問題引出了另一種覆蓋標準——“判定/條件覆蓋”,它的含義是:執行足夠的測試用例,使得判定中每個條件取到各種可能的值,并使每個判定取到各種可能的結果。對圖6.4的程序,上一節中的兩個例子 ????? ①A=2,B=0,X=4?(沿ace路徑)???????????????????????②A=1,B=1,X=1(沿abd路徑)?
是滿足這一標準的。 “判定/條件覆蓋”似乎是比較合理的,但事實并非如此,因為大多數計算機不能用一條指令對多個條件作出判定,而必須將源程序中對多個條件的判定分解成幾個簡單判定,所以較徹底的測試應使每一個簡單判定都真正取到各種可能的結果。?
上面的討論說明了,盡管“判定/條件覆蓋”看起來能使各種條件取到所有可能的值,但實際上并不一定能檢查到這樣的程度。 ? ? ? 針對上述問題又提出了另一種標準——“條件組合覆蓋”。它的含義是:執行足夠的例子,使得每個判定中條件的各種可能組合都至少出現一次。顯然,滿足“條件組合覆蓋”的測試用例是一定滿足“判定覆蓋”、“條件覆蓋”和“判定/條件覆蓋”的。 ? 再看圖6.4的程序,我們需要選擇適當的例子,使得下面8種條件組合都能夠出現: ? ?1)A>1, B=0??????????2)? A>1, B10????????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 ? 必須注意到,5)、6)、7)、8)四種情況是第二個IF語句的條件組合,而X的值在該語句之前是要經過計算的,所以還必須根據程序的邏輯推算出在程序的入口點X的輸入值應是什么。 ? ①A=2,B=0,X=4使1)、5)兩種情況出現;②A=2,B=1,X=1使2)、6)兩種情況出現;? ?
? 上面四個例子雖然滿足條件組合覆蓋,但并不能覆蓋程序中的每一條路徑,例如路徑acd就沒有執行,因此,條件組合覆蓋標準仍然是不徹底。 ? ? ?轉載自:https://www.cnblogs.com/chengnuo/p/5297942.html | |||||||||||||
總結
- 上一篇: 仙游一中刘金星老师先进事迹
- 下一篇: 替换.DATA的COOKIE突破GS