代码覆盖率工具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)
代码覆盖率工具BullseyeCoverage研究相关推荐
- BullseyeCoverage代码覆盖率工具介绍
1 术语定义 1.1. 代码覆盖率 代码覆盖率 =代码的覆盖程度,一种度量方式. 1.2. 语句覆盖(StatementCoverage) 又称行覆盖(LineCoverage),段覆盖(Segmen ...
- 挖掘代码覆盖率工具中的Bug
Hunting for bugs in code coverage tools via randomized differential testing Remarks Conference: ICSE ...
- 代码覆盖率工具 Istanbul 入门教程
测试的时候,我们常常关心,是否所有代码都测试到了. 这个指标就叫做"代码覆盖率"(code coverage).它有四个测量维度. 行覆盖率(line coverage):是否每一 ...
- JAVA代码覆盖率工具JaCoCo-原理简单分析
作为一个测试人员,保证产品的软件质量是其工作首要目标,为了这个目标,测试人员常常会通过很多手段或工具来加以保证,覆盖率就是其中一环比较重要的环节. 我们通常会将测试覆盖率分为两个部分,即"需 ...
- 开源/免费界面自动化测试工具对比研究
摘要: 随着我行自动化测试实施范围的不断扩大,参与界面自动化测试的应用系统越来越多.我行的应用系统现阶段多采用商用工具QTP(UFT)作为执行工具来进行界面自动化测试,采购的QTP license是有 ...
- 同步数据流语言代码生成工具的研究进展
摘要 同步数据流语言(如Lustre,Signal)近年来在航空.高铁.核电等安全关键领域得到了广泛应用,因此与这类语言相关的开发工具本身的安全性问题受到高度关注.同步数据流语言到串行命令式语言的代码 ...
- 【Java】java.util.Objects 工具类方法研究
[Java]java.util.Objects 工具类方法研究 Objects 与 Object 区别 Object 是 Java 中所有类的基类,位于java.lang包. Objects 是 Ob ...
- 计算机辅助翻译与人工翻译论文,计算机辅助翻译:理念和工具[翻译研究新探论文献文集].pdf...
计算机辅助翻译:理念和工具 徐彬 摘要 本论文介绍计算机辅助翻译的理念和国际上主流的计算机辅助翻译系统,并在此 基础上论证计算机辅助翻译系统在技术上的优越之处,以及推广其对翻译实践所 带来的影响.本论 ...
- lua代码格式化工具_lua的代码覆盖率工具
lua的代码覆盖率工具 https://github.com/esrrhs/cluagithub.com 特性 数据采集用C++编写,性能更高,对宿主进程影响更小 简单require即可使用,或通过 ...
最新文章
- 医院六级电子病历建设思路及要点
- Android——Handler总结
- CTFshow php特性 web98
- Shell-实际业务操作03
- 程序中下载采购申请的附件
- CSS3 outline-offset 属性 项目中input会遇到
- 角谷猜想(信息学奥赛一本通-T1086)
- collections模块之namedtuple
- java设计模式6.代理模式
- Python中的传值和引用
- ORACLE设置自动递增的方法
- 工艺过程卡片,工序卡片,工艺卡,刀具卡区别
- reviewboard mysql_Linux ReviewBoard安装与配置
- 群晖docker火狐_群晖 篇一:群晖Docker下搭建ubuntu开发环境
- Plotly 和 Dash 构建 Python 交互式仪表板类 App
- C语言中狐狸找兔子的问题
- Android仿斗鱼滑动登录验证
- 高速下载Arxiv论文的解决方案
- 智慧燃气系统基于GIS技术的搭建
- 那些在国内还能使用的谷歌产品
热门文章
- 动词ing基本用法_(完整版)英语动词ing的用法
- 高通骁龙855性能首测:继续领先安卓阵营,但离苹果仍有差距...
- hdu 2222 AC 自动机 模版(数组实现)
- 深度学习第一篇论文——半监督学习Mean Teacher 的学习
- 华为摄像机搜索软件_构建AI新生态,“软件定义”摄像机打造机器智能新捷径...
- Go语言学习笔记—golang基础语法
- 计算机主板设计方案,解决方案:计算机主板每个组件的详细图示
- 哈工大21秋移动互联网复习
- 利用相控阵馈源技术提高射电望远镜性能
- 透析《长安十二时辰》里的望楼,人类在唐朝就有5G愿望了?