为什么需要代码覆盖率分析?
在发布代码的时候,我们常常会对其进行一系列的测试来协调软件的性能和功能,使他们和预计的相同。但是检验通常都是相当的困难,即使程序相当的简单。开发者常常会借助一些
测试工具(
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)
{
if (number % 2) == 0)
printf("even \n");
for (;number < 9; number++){
printf("number is %d\n", number);
}
}
function(11);
满足状况一
function(8);
满足状况二
function(6);
满足状况三
分享到:
相关推荐
不支持html,是代码覆盖率分析的文档,用户可以自取,其中有脚本
基于FPGA的通用仿真设计及其覆盖率分析.pdf
ModelSim基于GUI仿真代码覆盖率分析的简要方法说明,给出了一个简单的例子进行介绍,仅适合入门学习使用。
SimpleCov - Ruby代码覆盖率分析工具
基于emma的测试覆盖率分析工具。swing界面,操作起来比较方便。可以对war包进行插桩,运行时根据需要可以取出覆盖信息并查看。需安装jdk运行。具体使用看chm。
java单元测试篇:使用clover为java代码的junit测试做覆盖率分析.pdf
C++ Test实验(覆盖率测试).pdf
本文档利用截图详细介绍了ISE与modelsim联合仿真利用modelsim查看覆盖率的整个操作过程
我们将会使用ant来编译一个junit单元测试实例项目,然后修改build.xml文件,加上clover的覆盖率分析任务target;而且我们还要通过三部分来学习clover超级无敌的地方:current报告、历史报告以及高级特征
本文内容包括:覆盖率分析介绍使用RAD进行代码覆盖率分析简介RAD7.0中如何做代码覆盖率分析RAD7.5中如何做代码覆盖率分析RSA中如何进行代码覆盖率分析总结参考资料本文详细介绍了在RationalApplicationDeveloper...
对于复杂的设计来说,Verilog代码覆盖率检查是检查验证工作是否完全的重要方法,代码覆盖率(code coverge)可以指示Verilog代码描述的功能有多少在仿真过程中被验证过了,代码覆盖率分析包括以下分析内容。...
遥感器覆盖分析。STK 具备的MATLAB 接口,提供双向的通信路径,可以使得MATLAB 用户能够像使用自身工具包一样使用STK 进行分析、处理和计算。 首先新建仿真场景;第二步选取仿真的中心天体,用户可以选择地球或者月 ...
测试覆盖率报告
Gcovr 提供一个工具用来管理 GNU gcov 工具病生成概要代码覆盖率结果。其灵感来自于 Python 的 coverage.py 包。 标签:Gcovr
XDebug也是因为需要是用来生成覆盖率分析文件才安装的,刚接触不久,平时用的也不是很频繁,但是这个的确是一个好工具,如果想要依赖它来分析程序的性能还是需要自己亲手去试试。具体它有多好,请听我一一道来。 ...
对僵尸网络Zeus、SdBot、AgoBot的执行轨迹进行了代码块覆盖率分析,结果表明,该方法能够快速准确地发掘出僵尸网络的控制命令集合,时间和空间开销小,且该命令集合所对应的执行轨迹可以覆盖僵尸程序95%以上的代码...
此函数生成可用于 Moore FSM 覆盖率分析的 Timeseries 文件。 该文件在工作目录中生成,可以打开到工作区供 MATLAB 使用,或使用“从文件导入数据”源模块直接读入 Simulink。 生成的时间序列基于修改后的真值表,...
由于目前的代码覆盖率分析工具都是基于,而运行的程序均是 由提供运行环境支撑,针对握奇数据系统有限公司自己实现的根 据公司实际需求,公司决定开发一种基于的覆盖率测试工具,本次设计承 担的是这次项目开发中软...
bncov-可脚本化的二进制忍者插件,用于覆盖率分析和可视化 bncov提供了一个可编写脚本的界面,用于将覆盖率信息与Binary Ninja的静态分析和可视化结合在一起。 除了可视化之外,bncov中的抽象还允许对覆盖率进行编程...