代码覆盖率工具BullseyeCoverage研究

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)               

转自: http://blog.csdn.net/forever_feng/article/details/5801820

你可能感兴趣的:(测试,测试工具)