為什麼需要**覆蓋率分析?
在發布**的時候,我們常常會對其進行一系列的測試來協調軟體的效能和功能,使他們和預計的相同。但是檢驗通常都是相當的困難,即使程式相當的簡單。開發者常常會借助一些 測試工具( 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...