覆蓋率分析

2021-08-31 01:54:37 字數 1336 閱讀 6967

為什麼需要**覆蓋率分析?

在發布**的時候,我們常常會對其進行一系列的測試來協調軟體的效能和功能,使他們和預計的相同。但是檢驗通常都是相當的困難,即使程式相當的簡單。開發者常常會借助一些 測試工具( test suite) 來模擬或者重建執行指令碼。如果測試程式組是徹底的,那麼程式的各個功能都將被測試到並且都可以證明是可以工作的。

但是怎樣才算徹底呢?簡單點說就是測試程式的每一條路徑,驗證每乙個結果,執行每一條語句,證明沒一句語句是沒用的。 gcov 就是乙個用來檢驗你的每一句語句是否都執行了的工具。

什麼是**覆蓋率分析?

**覆蓋率分析就是找到定位沒用的或者不執行的**的過程。沒用的**不會存在什麼問題,但是他們會影響程式的可讀性;不執行的**則可能是未來 bug 的所在。所以找到他們,把他們從你的程式中移處是大有裨益的。

覆蓋率分析主要有下面的幾個過程:

通過測試程式組找到不執行的程式段;

新增額外測試程式組,以便增加**覆蓋率;

決定**覆蓋率的定量測度,它也是程式質量的間接測度。

**覆蓋率分析的缺陷

**覆蓋率分析不能找出程式的邏輯錯誤。考慮一下下面的**

10:  rc = call_to_xx ();

11:  if (rc == error_fatal)

12:    exit(2);    /* exit with error code 2 */

13:  else

14:    /* continue on */

當測試程式段執行到 11 行時, 11 行始終都不能為真。 call_to_xx 返回了另外的乙個錯誤比如 error_handle ,除非我們加入這種錯誤的處理方式的**。

**覆蓋測試工具不會告訴你什麼是必須的,他們只能顯示已經存在的**的覆蓋率。

**覆蓋率的型別

gcov 可以用來測量各種形式的**覆蓋率。最常見最有用的兩種是分支覆蓋( branch coverage) 和迴圈覆蓋( loop coverage )

分支覆蓋證明各個方向的每一條分支都被執行到了。迴圈覆蓋試圖證明迴圈內部的每一條路徑都被測試到了。迴圈覆蓋似乎非常的複雜,但基本上只要滿足下面的三個狀況,就可以作了。

1 。迴圈條件不滿足,迴圈沒有內部沒有執行;

2 。迴圈條件就滿足了一次,迴圈內部就執行了一次;

3 。迴圈條件至少滿足了兩次,迴圈至少執行了兩次。

舉個例子

void  function(int number)

} function(11);   滿足狀況一

function(8);    滿足狀況二

function(6);    滿足狀況三

覆蓋率選項,覆蓋率分析

covergroup選項提供不同的覆蓋率選項,來計算覆蓋率。乙個covergroup可能會被多個地方例化使用,預設情況下sv會將所有的例項的覆蓋率合併到一起計算。如果需要單獨列出每個covergroup例項的覆蓋率,需要以下設定覆蓋率選項。covergroup cov coverpoint tr.l...

功能覆蓋率

功能覆蓋率 function coverage 是屬於黑盒測試範疇內的,在實際測試中,涉及到的覆蓋率一般都是結構化覆蓋率,與黑盒相關的覆蓋率比較少。功能覆蓋中最常見的是需求覆蓋,其含義是通過設計一定的測試用例,要求每個需求點都被測試到。其公式是 需求覆蓋 被驗證到的需求數量 總的需求數量 在黑盒測試...

測試覆蓋率

摘要 在測試方法中粗略的介紹了幾種測試方法。其中,白盒測試的動態分析方法中提到邏輯覆蓋率測試有 語句覆蓋 分支覆蓋 判定覆蓋 條件覆蓋 條件 判定覆蓋和路徑覆蓋。這裡將詳細闡述邏輯覆蓋率測試。準備知識 可執行語句 可執行的一項操作 真 假分支 ture false 運算元 opreand 操作符 o...