1. 術語定義
1.1. 代碼覆蓋率
代碼覆蓋率 =代碼的覆蓋程度,一種度量方式。
1.2. 語句覆蓋(StatementCoverage)
又稱行覆蓋(LineCoverage),段覆蓋(SegmentCoverage),基本塊覆蓋(BasicBlockCoverage),這是最常用也是最常見的一種覆蓋方式,就是度量被測代碼中每個可執行語句是否被執行到了。
這裏說的是“可執行語句”,因此就不會包括像C++的頭文件聲明,代碼註釋,空行,等等。非常好理解,只統計能夠執行的代碼被執行了多少行。
需要注意的是,單獨一行的花括號{} 也常常被統計進去。
語句覆蓋常常被人指責爲“最弱的覆蓋”,它只管覆蓋代碼中的執行語句,卻不考慮各種分支的組合等等。
1.3. 判定覆蓋(DecisionCoverage)
又稱分支覆蓋(BranchCoverage),所有邊界覆蓋(All-EdgesCoverage),基本路徑覆蓋(BasicPathCoverage),判定路徑覆蓋(Decision-Decision-Path)。它度量程序中每一個判定的分支是否都被測試到了。
1.4. 條件覆蓋(ConditionCoverage)
它度量判定中的每個子表達式結果true和false是否被測試到了。
1.5. 路徑覆蓋(PathCoverage)
又稱斷言覆蓋(PredicateCoverage)。它度量了是否函數的每一個分支都被執行了。 這句話也非常好理解,就是所有可能的分支都執行一遍,有多個分支嵌套時,需要對多個分支進行排列組合,可想而知,測試路徑隨着分支的數量指數級別增加。
這是最強的覆蓋,一般代碼覆蓋率工具都不支持,BullseyeCoverage也不支持。
2. BullseyeCoverage簡介
Bullseye Coverage 是Bullseye 公司提供的一款C/C++代碼覆蓋率測試工具。
相對於Rational 的Pure Coverage,Bullseye Coverage 支持的C/C++的編譯器更多。除了支持各種Unix 下的編譯器之外,在Windows 下支持VC、Borland 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編譯器中以插件的方式出現。
在vc6的tools菜單中高亮顯示部分,可以設置是否啓用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) 還可以把統計結果導出成html或xml。
13)