日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

软件白盒子测试

發布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 软件白盒子测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

? ??

?

圖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.5是由編譯系統產生的圖6.4的目標程序。上面的兩個例子未能使目標程序中的每一個簡單判定取到各種可能的結果;它們不能使判定I為“假”也不能使判定K為“真”,其原因在于:含有AND或OR的邏輯表達式中,某些條件將抑制其他條件,例如邏輯表達式A AND B,如果A為“假”,目標程序就不再檢查條件B了,這樣B中的錯誤就發現不了。????

?

上面的討論說明了,盡管“判定/條件覆蓋”看起來能使各種條件取到所有可能的值,但實際上并不一定能檢查到這樣的程度。

?

?

?

針對上述問題又提出了另一種標準——“條件組合覆蓋”。它的含義是:執行足夠的例子,使得每個判定中條件的各種可能組合都至少出現一次。顯然,滿足“條件組合覆蓋”的測試用例是一定滿足“判定覆蓋”、“條件覆蓋”和“判定/條件覆蓋”的。

?

再看圖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的輸入值應是什么。
下面四個例子可以使上述8種條件組合至少出現一次:

?

①A=2,B=0,X=4使1)、5)兩種情況出現;②A=2,B=1,X=1使2)、6)兩種情況出現;?

?

??????????


③A=1,B=0,X=2使3)、7)兩種情況出現;?④A=1,B=1,X=1使4)、8)兩種情況出現。??

?

上面四個例子雖然滿足條件組合覆蓋,但并不能覆蓋程序中的每一條路徑,例如路徑acd就沒有執行,因此,條件組合覆蓋標準仍然是不徹底。

?

?

?轉載自:https://www.cnblogs.com/chengnuo/p/5297942.html

總結

以上是生活随笔為你收集整理的软件白盒子测试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。