軟件測試技術之: 白盒測試和黑盒測試(2)

發表于:2016-06-02來源:C博客作者:好兒郎-志在四方點擊數: 標簽:
2.1.2 判定(分支)覆蓋 判定覆蓋或分支覆蓋是較強一些的邏輯覆蓋準則。該準則要求必須編寫足夠的測試用例,使得每一個判斷都至少有一個為真和為假的輸


  2.1.2 判定(分支)覆蓋

  判定覆蓋或分支覆蓋是較強一些的邏輯覆蓋準則。該準則要求必須編寫足夠的測試用例,使得每一個判斷都至少有一個為“真”和為“假”的輸出結果。換句話說,也就是每條分支路徑都必須至少遍歷一次。分支或判定語句的例子包括switch,do-while 和 if-else 語句。

  判定覆蓋通??梢詽M足語句覆蓋。由于每條語句都是在要么從分支語句開始,要么從程序入口點開始的某條子路徑上,如果每條分支路徑都被執行到了,那么每條語句也應該被執行到了。但是,仍然有些例外情況:

  • 程序中不存在判斷。

  • 程序或子程序/方法有著多重入口點。只有從程序的特定入口點進入時,某條特定的語句才能執行到。

  我們的探討僅針對有兩個選擇的判斷或分支,當程序中包含有多重選擇的判斷時,判定/分支覆蓋準則的定義就必須有所改變。典型的例子有包含select(case)語句的 Java 程序,包含算術 (三重選擇) IF 語句、計算或算術 GOTO 語句的 FORTRAN 程序,以及包含可選 GOTO 語句或 GO-TO-DEFENDING-ON 語句的 COBOL 程序。對于這些程序,判定/分支覆蓋準則將所有判斷的每個可能結果都至少執行一次,以及將程序或子程序的每個入口點都至少執行一次。

  在圖2?1 中,兩個涵蓋了路徑 ace 和 abd,或涵蓋了路徑 acd 和 abe 的測試用例就可以滿足判定覆蓋的要求。如果我們選擇了后一種情況,兩個測試用例的輸入是 A=3,B=0,X=3 和 A=2,B=1,X=1。

  判定覆蓋是一種比語句覆蓋更強的準則,但仍然相當不足。舉例來說,我們僅有 50%的可能性遍歷到那條 X 未發生變化的路徑(也即, 僅當我們選擇前一種情況) 。

  如果第二個判斷存在錯誤(例如把 X>1 寫成了 X<1,那么前面例子中的兩個測試用例都無法找出這個錯誤。

  2.1.3 條件覆蓋

  比判定覆蓋更強一些的準則是條件覆蓋。在條件覆蓋情況下,要編寫足夠的測試用例以確保將一個判斷中的每個條件的所有可能的結果至少執行一次。因為,就如同判定覆蓋的情況一樣,這并不總是能讓每條語句都執行到,因此作為對這條準則的補充就是對程序或子程序。舉例來說,分支語句

  DO K=0 to 50 WHILE (J+K

  包含兩種情況:K 是否小于或等干 50?以及 J+K 是否小于 QUEST? 因此,需要針對K <= 50、 K >50 (達到循環的最后一次迭代)以及J+K=QUEST的情況設計測試用例。

  圖 2?1 有四個條件:A>1、B=0、A=2 以及 X>1。因此需要足夠的測試用例,使得在點 a 處出現 A=2、A<2、X>1 及 X<=1 的情況。有足夠數量的測試用例滿足此準則,用例及其遍歷的路徑如下所示:

  1.A=2,B=0,X=4 ace

  2.A=1,B=1,X=1 adb

  請注意,盡管在本例中生成的測試用例數量是一樣的,但條件覆蓋通常還是要比判定覆蓋更強一些。因為,條件覆蓋可能(但并不總是這樣)會使判斷中的各個條件都取到兩個結果(“真”和“假” ) ,而判定覆蓋卻做不到這一點。舉例來說,在相同的分支語句

  DO K=0 to 50 WHILE(J+K

  中,存在一個兩重分支(執行循環體,或者跳過循環體) 。如果使用的是判定覆蓋測試,將循環從 K= 0 執行到 K = 51 即可滿足該準則,但從未考慮到 WHILE子句為假的情況。如果使用的是條件覆蓋準則,就需要設計一個測試用例為J+K

  雖然條件覆蓋準則乍看上去似乎滿足判定覆蓋準則,但并不總是如此。如果正在測試判斷條件 IF (A&B),條件覆蓋準則將要求編寫兩個測試用例:A為真,B為假;A 為假,B 為真。但是這并不能使 IF 語句中的 THEN 被執行到。對圖2?1 所示例子所進行的條件覆蓋測試涵蓋了全部判斷結果,但這僅僅是偶然情況。舉例來說,兩個可選的測試用例:

  1. A=2,B=0,X=3

  2. A=1,B=1,X=1

  涵蓋了全部的條件結果,卻僅涵蓋了四個判斷結果中的兩個(這兩個測試用例都涵蓋到了路徑 abe,因而不會執行第一個判斷結果為真的路徑,以及第二個判斷結果為假的路徑) 。

  2.1.4 判定/條件覆蓋

  顯然,解決上面左右為難局面的辦法就是所謂的判定/條件覆蓋準則。這種準則要求設計出充足的測試用例。將一個判斷中的每個條件的所有可能的結果至少執行一次,將每個判斷的每個條件的所有可能的結果至少執行一次,將每個判斷的所有可能的結果至少執行一次,將每個入口點都至少調用一次。

原文轉自:http://blog.csdn.net/rl529014/article/details/51556707#t1

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97