代碼覆蓋率工具BullseyeCoverage研究

1.       術語定義

1.1.       代碼覆蓋率

代碼覆蓋率 =代碼的覆蓋程度,一種度量方式。

1.2.       語句覆蓋(StatementCoverage)

又稱行覆蓋(LineCoverage),段覆蓋(SegmentCoverage),基本塊覆蓋(BasicBlockCoverage),這是最常用也是最常見的一種覆蓋方式,就是度量被測代碼中每個可執行語句是否被執行到了。

這裏說的是“可執行語句”,因此就不會包括像C++的頭文件聲明,代碼註釋,空行,等等。非常好理解,只統計能夠執行的代碼被執行了多少行。

需要注意的是,單獨一行的花括號{} 也常常被統計進去。

語句覆蓋常常被人指責爲“最弱的覆蓋”,它只管覆蓋代碼中的執行語句,卻不考慮各種分支的組合等等。

1.3.       判定覆蓋(DecisionCoverage)

又稱分支覆蓋(BranchCoverage),所有邊界覆蓋(All-EdgesCoverage),基本路徑覆蓋(BasicPathCoverage),判定路徑覆蓋(Decision-Decision-Path)它度量程序中每一個判定的分支是否都被測試到了

1.4.       條件覆蓋(ConditionCoverage)

它度量判定中的每個子表達式結果truefalse是否被測試到了。

1.5.       路徑覆蓋(PathCoverage)

又稱斷言覆蓋(PredicateCoverage)它度量了是否函數的每一個分支都被執行了 這句話也非常好理解,就是所有可能的分支都執行一遍,有多個分支嵌套時,需要對多個分支進行排列組合,可想而知,測試路徑隨着分支的數量指數級別增加。

       這是最強的覆蓋,一般代碼覆蓋率工具都不支持,BullseyeCoverage也不支持。

 

2.       BullseyeCoverage簡介

Bullseye Coverage Bullseye 公司提供的一款C/C++代碼覆蓋率測試工具。

相對於Rational Pure CoverageBullseye     Coverage 支持的C/C++的編譯器更多。除了支持各種Unix 下的編譯器之外,在Windows 下支持VCBorland C++Gnu C++Inter C++

提供的代碼覆蓋率是分支覆蓋率而不是一般代碼覆蓋率,我個人認爲分支覆蓋率比代碼覆蓋率更好。

我這裏有破解版本和key,如果有人需要,歡迎向我索取。

 

3.       BullseyeCoverage的安裝

因爲有安裝程序,所以安裝整體來說比較簡單。

不過,有幾個地方還是要注意,相關的截圖如下。

1)  輸入key,在license key輸入框。

2)  設置cov文件路徑,可以設置到一個你比較容易記住的路徑下。

這一步容易被忽略,導致最後都不知道cov文件在哪裏。

cov文件的作用後面會講到。

3)  編譯器選擇,缺省會選擇vc,但是建議把其他的幾個主流的c++編譯器也選上,這樣可以識別更多類型的代碼。

 

4.       BullseyeCoverage的使用

4.1.       在代碼編譯時如何使用?

BullseyeCoverage安裝好後,會在vc編譯器中以插件的方式出現。

vc6tools菜單中高亮顯示部分,可以設置是否啓用BullseyeCoverage

如果啓用,則會在編譯的時候,把相應的代碼符號記錄到cov文件中。

可見設置cov文件路徑的重要性,否則不好找。

 

vc2005中。

 

 

特別提醒的是,BullseyeCoverage對業務代碼邏輯無影響,只是在cov文件中記錄了有關代碼的函數、分支和條件判斷等符號。

4.2.       在測試時如何使用?

1)  在測試機器上也必須安裝BullseyeCoverage,安裝方法跟上面介紹的一樣。

測試的機器上是否安裝vc編譯器沒有關係。

但是仍然要選擇編譯器類型,這樣便於識別所選編譯器產生的符號。

2)  把編譯產生的程序複製到測試機器。

3)  用編譯產生的cov文件覆蓋測試機器上的cov文件。

4)  啓動測試程序,開始測試不同的測試用例(主要是功能測試)。

5)  每測試完成一個功能case,都可以打開相應的cov文件,開始統計代碼覆蓋的情況。

當然,做了多少測試後開始統計,完全由測試人員自行決定。

打開一個cov文件如下。

 

6)  cov文件打開後的樣子。

7)  其中打勾的表明該函數進入過,T表示ture,表示該條件分支被執行過,F表示false,表示該條件分支沒有被執行過。

8)  統計情況請看下圖中的底部的狀態欄。

其中有函數覆蓋和未覆蓋的百分比,條件或判斷分支覆蓋和未覆蓋的百分比。

9)  這個工具還有一個強大的地方是,在上圖的左側是代碼目錄結構,可以分級統計代碼覆蓋率的情況。

10)              值得注意的地方是:如果僅僅統計代碼覆蓋率的多少,不用提供源碼。

但是如果要查看某個函數或條件分支的執行情況,則必須把測試產生的cov拿到有代碼的機器上進行分析。

11)              最好要注意的是:每次代碼改動編譯後,會產生新的cov文件,因此測試的版本和發佈的版本必須一致。

12)              還可以把統計結果導出成htmlxml

13)               

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章