1. 程式人生 > >軟體測試之-測試覆蓋率

軟體測試之-測試覆蓋率

軟體測試覆蓋率簡介

  1、定義:覆蓋率是用來度量測試完整性的一個手段,同時也是測試技術有效性的一個度量。
  2、計算:覆蓋率=(至少被執行一次的item數)/item的總數
  3、特點
     1)通過覆蓋率資料,可以檢測我們的測試是否充分
     2)分析出測試的弱點在哪方面
     3)指導我們設計能夠增加覆蓋率的測試用例,有效提高測試質量,但是測試用例設計不能一味追求覆蓋率,因為測試成本隨覆蓋率的增加而增加。

軟體測試覆蓋率分類

覆蓋率按照測試方法大體上可以劃分為三大類,即白盒覆蓋(white-Box Coverage)、灰盒覆蓋(Gray-Box coverage)和黑盒覆蓋(Black-Box Coverage)。

白盒覆蓋率(white-Box Coverage)

白盒覆蓋率中使用的最常見的就是邏輯覆蓋率(Logical Coverage ),也叫程式碼覆蓋率(Code Coverage)或者結構化覆蓋率(Structural Coverage),我們常見的邏輯覆蓋包括:語句覆蓋、判定覆蓋、條件覆蓋、判定條件覆蓋、條件組合覆蓋、路徑覆蓋。

1、語句覆蓋(Statement Coverage)

     1)定義:在測試時,執行被測程式後,程式中被執行的可執行語句的比率。
     2)計算公式:語句覆蓋率=(至少被執行一次的語句數量)/(可執行的語句總數)
     3100%語句覆蓋率含義:在測試時,首先設計若干個測試用例,然後執行被測程式,使程式中的每個可執行語句至少執行一次。
     4
)特點:語句覆蓋可以檢驗每個可執行語句,但是即使語句覆蓋率達到了100%,也會有缺陷發現不了,所以覆蓋率只是我們度量的手段。

2、判定覆蓋(Decision Coverage)/分支覆蓋率(Branch Coverage)

     1)定義:在測試時,執行被測程式後,程式中所有判斷語句的取真分支和取假分支被執行到的比率。
     2)計算公式:判定覆蓋率=(判定結果被評價的次數)/(判定結果的總數)
     3100%條件覆蓋率含義:在測試時,首先設計若干個測試用例,然後執行測試程式,使得程式中每個判斷的取真分支和取假分支至少經歷一次,即判斷的真假值均曾被滿足。
     4)特點
       (1
)若判定覆蓋達到100%,則語句覆蓋必為100%。2)即使判定覆蓋率達到了100%,也會有缺陷發現不了。

3、條件覆蓋(Condition Coverage)

     1)定義:在測試時,執行被測程式後,程式中所有判斷語句中每個條件的可能取值(真值和假值)出現過的比率。
     2)計算公式:條件覆蓋率=(條件運算元值至少被評價一次的數量)/(條件運算元值的總數)
     3100%條件覆蓋率含義:在測試時,首先設計若干個測試用例,然後執行被測試程式,要使每個判斷中每個條件的可能取值至少滿足一次。
     4)特點:覆蓋條件的測試用例不一定覆蓋判定。

4、判定-條件覆蓋(Decision Condition Coverage)/分支條件覆蓋(Branch Condition Coverage)

     1)定義:在測試時,執行被測程式後,程式中所有判斷語句中每個條件的可能取值(真值和假值)和每個判斷本身的判定結果(為真為假)出現的比率。
     2)計算公式:判定-條件覆蓋率=(條件運算元值或判定結果至少被評價一次的數量)/(條件運算元值的總數+判定結果的總數)
     3100%判定-條件覆蓋率含義:設計足夠的測試用例,使得判斷中每個條件的所有可能取值至少執行一次,同時每個判斷本身的所有可能結果至少執行一次。換言之,即是要求各個判斷的所有的可能的取值組合至少執行一次。
     4)特點
       (1)判定-條件覆蓋率實際上就是判定覆蓋率和條件覆蓋率的組合。
       (2)採用判定-條件覆蓋,邏輯表示式中的錯誤不一定能夠查得出來。

5、條件組合覆蓋(Condition combination coverage)

     1)定義:在測試時,執行被測程式後,所有語句中原子條件所有的可能的取值結果組合出現過的比率。
     2)計算公式:條件組合覆蓋率=(至少被執行一次的條件組合)/(總的可能的條件組合數)
     3100%條件組合覆蓋率含義:設計足夠的測試用例,使得判斷中條件的各種可能組合至少出現過一次。
     4)特點:若條件組合覆蓋率為100%,則語句覆蓋率、判定覆蓋率、條件覆蓋率和判定-條件覆蓋率必為100%。

6、路徑覆蓋(Path Coverage)

     1)定義:在測試時,執行被測程式後,程式中所有可能的路徑被執行的比率。
     2)計算公式:路徑覆蓋率=(至少被執行一次的路徑數)/(總的路徑數)
     3100%路徑覆蓋率含義:設計足夠的測試用例,要求覆蓋程式中所有可能的路徑。
     4)特點
       (1)路徑覆蓋比判定條件覆蓋更強,但是不能包含判定條件覆蓋。
       (2)若路徑覆蓋率為100%,則語句覆蓋率、判定覆蓋率必為100%。

小結:邏輯覆蓋率可以作為軟體測試的一個度量,但是,即使達到了100%的邏輯覆蓋率,仍然無法保證程式的正確性。

灰盒覆蓋率(Gray-Box Coverage)

函式覆蓋和介面覆蓋可以歸為灰盒測試的範疇。

1、函式覆蓋

     1)定義:它表示在測試中,有哪些函式被測試到了,其被測試到的頻率有多大,這些函式在系統所有函式中佔的比例有多大。
     2)計算公式:函式覆蓋=(至少被執行一次的函式數量)/(系統中函式的總數)
     3)特點:是針對一個系統或者子系統測試的。

2、介面覆蓋(Interface Coverage)/入口點覆蓋(Entry-Point Coverage)

     1)定義:要求通過設計一定的用例使得系統的每個介面被測試到。
     2)計算公式:介面覆蓋=(至少被執行一次的介面數量)/(系統中介面的總數)         

黑盒覆蓋率(Black-Box Coverage)

在實際測試中,與黑盒相關的覆蓋率比較少,主要是功能覆蓋率(Function Coverage),其中最常見的是需求覆蓋。

需求覆蓋

     1)定義:它表示在測試中,有哪些函式被測試到了,其被測試到的頻率有多大,這些函式在系統所有函式中佔的比例有多大通過設計一定的測試用例,要求每個需求點都被測試到。
     2)計算公式:需求覆蓋=(被驗證到的需求數量)/(總的需求總數)