搞懂邏輯覆蓋


邏輯覆蓋

邏輯覆蓋是通過對程序邏輯結構的遍歷實現程序的覆蓋

分為以下幾種

  • 語句覆蓋 Statement coverage

  • 判定覆蓋 Decision coverage

  • 條件覆蓋 Condition coverage

  • 條件/判定覆蓋 Condition/decision coverage

  • 條件組合覆蓋 Condition combination coverage

  • 路徑覆蓋 Path coverage

例子

avatar

Path:

  • L1(a → c → e)

  • L2(a → b → d)

  • L3(a → b → e)

  • L4(a → c → d)

語句覆蓋 Statement coverage

語句覆蓋的要求是使所有可執行語句至少執行一次

以上圖為例,所有的可執行語句都在L1上,只要選取一個用例A=2,B=0,x=3即可滿足語句覆蓋

判定覆蓋 Decision coverage

使每個判定獲得一種可能的結果至少一次。

選取用例

  1. A=2,B=0,x=3 覆蓋了L1

  2. A=1,B=1,x=1 覆蓋了L2

使每個判定的結果都獲得了一次

條件覆蓋 Condition coverage

使每個條件都要完成一次

  • 對於第一個判定

  • 條件A>1 True為T1,False為!T1

  • 條件B=0 True為T2,False為!T2

  • 對於第二個判定

  • 條件A=2 True為T3,False為!T3

  • 條件X>1 True為T4,False為!T4

可以選出以下用例

Test case Path Condition value Coverage branch
(2,0,3) ace(L1) T1 T2 T3 T4 c,e
(1,1,1) abd(L2) !T1 !T2 !T3 !T4 b,d

或者以下這種

Test case Path Condition value Coverage branch
(1,0,3) ace(L1) !T1 T2 !T3 T4 b,e
(2,1,1) abd(L2) T1 !T2 T3 !T4 b,e

條件判定覆蓋 Condition/decision coverage

設計測試用例,使得每個判定的結果都獲得一次,同時每個條件也要完成一次

可以選出以下用例

Test case Path Condition value Coverage branch
(2,0,3) ace(L1) T1 T2 T3 T4 c,e
(1,1,1) abd(L2) !T1 !T2 !T3 !T4 b,d

條件組合覆蓋 Condition combination coverage

設計測試用例,使得每個判定中的所有條件組合都至少實現一次

如果測試用例實現了條件組合覆蓋,那么它一定也實現了條件覆蓋、判定覆蓋和條件判定覆蓋

本例子中每個判定的條件組合如下

  • 第一個判定

① A>1, B=0 as T1T2

② A>1, B≠0 as T1!T2

③ A<=1, B=0 as !T1T2

④ A<=1, B≠0 as !T1!T2

  • 第二個判定

⑤ A=2, X>1 as T3T4

⑥ A=2, X>=1 as T3!T4

⑦ A≠2, X>1 as !T3T4

⑧ A≠2, X>=1 as !T3!T4

可以選出以下測試用例

Test case Path Condition value Coverage condition no.
(2,0,3) ace(L1) T1 T2 T3 T4 ①⑤
(2,1,1) abe(L3) T1 !T2 T3 !T4 ②⑥
(1,0,3) abe(L3) !T1 T2 !T3 T4 ③⑦
(1,1,1) abd(L2) !T1 !T2 !T3 !T4 ④⑧

盡管這四個測試用例覆蓋了所有的條件組合和4條分支,但是只有3條路徑被覆蓋了,路徑“acd”沒有被經過

路徑覆蓋

設計測試用例覆蓋所有可能的路徑

以上的例子可以選出如下測試用例

Test case Path Condition value
(2,0,3) ace(L1) T1 T2 T3 T4
(1,0,1) abd(L2) !T1 !T2 !T3 !T4
(2,1,1) abe(L3) T1 !T2 T3 !T4
(3,0,3) acd(L4) T1 T2 !T3 !T4


免責聲明!

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



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