白盒測試(語句覆蓋、條件覆蓋、判斷覆蓋、路徑覆蓋)


在白盒測試中,有四種常見測試方法:

  • 語句覆蓋
  • 條件覆蓋
  • 判斷覆蓋
  • 路徑覆蓋

下面我們用一道例題來解釋他們之間的區別:

START
INPUT (A,B,C)
IF A>5
	THEN X= 10
	ELSE X=1
END IF
IF B> 10
	THEN Y=20
	ELSE Y=2
END IF
IF C> 15
	THEN Z= 30
	ELSE Z=3
END IF
PRINT (X,Y,Z)
STOP

該題的程序流程圖:

1、語句覆蓋

語句覆蓋的含義
選擇足夠多的測試數據,使被測程序中每個語句至少執行一次
語句覆蓋只關心判定表達式的值,而沒有分別測試判定表達式中每個條件取不同值時的情況(即一個判斷語句的兩個分支若沒有其他語句。則只需要執行一個分支語句)。

如上圖的程序流程圖,若想每個語句至少執行一次(賦值語句也是語句),則最少需要兩組測試數據。

全部為true:A=20,B=20,C=20

全部為false:A=1,B=1,C=1

2、判斷覆蓋(分支覆蓋、判定覆蓋)

判定覆蓋的含義:
不僅每個語句必須至少執行一次,而且每個判定的每種可能的結果都應該至少執行一次
在⑴的基礎上,每個判定的每個分支至少執行一次

如上圖的程序流程圖。在(1)的基礎上每個分支至少執行一次,則可以用和(1)一樣的兩組數據。(該題具有特殊性)

全部為true:A=20,B=20,C=20

全部為false:A=1,B=1,C=1

3、條件覆蓋

條件覆蓋的含義:
不僅每個語句至少執行一次,而且使判定表達式中的每個條件都取到各種可能的結果在⑴的基礎上,使每個判定表達式的每個條件都取到各種可能的結果。

通俗來講就是每個判斷條件都可以取到所有的可能。

如上圖的程序流程圖。在(1)的基礎上使每個判定表達式的每個條件都取到各種可能的結果,則可以用和(1)一樣的兩組數據。(該題具有特殊性)

全部為true:A=20,B=20,C=20

全部為false:A=1,B=1,C=1

4、路徑覆蓋

路徑覆蓋的含義:

選取足夠多測試數據,使程序的每條可能路徑都至少執行一次(如果程序圖中有環,則要求每個環至少經過一次)。

則上圖的程序流程圖一共有8條可以走的路徑,當我們測試時,可以選擇這樣的8組數據:

  • 3 個判定表達式之值全為假

輸入:A=1,B=1,C=1

預期的輸出:X=1,Y=2,Z=3

  • 3 個判定表達式依次為假、假、真

輸入:A=1,B=1,C=60

預期的輸出:X=1,Y=2,Z=30

  • 3 個判定表達式依次為假、真、假

輸入:A=1,B=40,C=1

預期的輸出:X=1,Y=20,Z=3

  • 3 個判定表達式依次為假、真、真

輸入:A=1,B=40,C=60

預期的輸出:X=1,Y=20,Z=30

  • 3 個判定表達式依次為真、假、假

輸入:A=20,B=1,C=1

預期的輸出:X=10,Y=2,Z=3

  • 3 個判定表達式依次為真、假、真

輸入:A=20,B=1,C=60

預期的輸出:X=10,Y=2,Z=30

  • 3 個判定表達式依次為真、真、假

輸入:A=20,B=40,C=1

預期的輸出:X=10,Y=20,Z=3

  • 3 個判定表達式全為真

輸入:A=20,B=40,C=60

預期的輸出:X=10,Y=20,Z=30

5、條件覆蓋和判斷覆蓋的區別

判斷覆蓋:每個分支都至少執行一次

條件覆蓋:每個判斷條件的值都要取到所有的可能

乍一看,兩者好像表達了相同的意思,其實大多數情況下也的確是這樣。但是,也有不同的時候,我們看下面一個判斷條件:

IF (A<10 OR B>10)

當選擇判斷覆蓋式,則整個判斷式要有true和false兩個結果的兩組測試數據。

但是對條件覆蓋來說,可以選擇都為true的測試數據,如A<5,B<5(true)和A>15,B>15(true),我們覆蓋到了判斷條件所有的可能性,但是兩組數據的結果都為true,所以並沒有覆蓋到所有的分支,這就是條件覆蓋與判斷覆蓋的區別。

即:*判定覆蓋只關心判定表達式的值(真/假),而條件覆蓋涉及到判定表達式的每個條件的值(真/假)


免責聲明!

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



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