http://www.taobaotesting.com/blogs/qa?bid=8592
Coverage validator
1. 简介
2. 原理简介
3. 使用
4. 优缺点
1. Coverage validator简介
Coverage validator(Software Verification Limited公司的产品)是一个代码覆盖测试工具。可供软件开发者和软件质量测试人员使用。Coverage validator可以帮助你确定工程的代码覆盖率,识别出单元测试中未测试的功能,以交互,实时的方式显示出代码覆盖情况来提高软件测试质量,你也可以合并所有单元测试的覆盖测试数据。可以在创建单元测试报告的同时生成测试报告。
常见的各种覆盖测试工具像CoverageMeter,gcov主要原理是替换了原有的编译器,在代码中进行插桩。因此, 这些覆盖测试工具的特点是需要重编被测试代码。这也是大部分覆盖率工具常用的方法。而Coverage Validator,不需要重编被测代码,只需要提供被测二进制程序的pdb文件,就能统计其代码覆盖率,所以对于每个应用的每个DLL/EXE模块,只是简单的需要PDB或者MAP文件即可。它能同时统计行覆盖,分支覆盖,函数覆盖等。 Coverage validator的insrumention是很快的,只需要几秒,而不是几分钟。跟non-instrumented应用速度是差不多的,不像其他的工具要慢上2到10倍。
Coverage Validator有个很大的好处是可以设置过滤条件,可以设置只统计部分模块的覆盖率数据。可以设置只统计某个DLL,某个类的覆盖率数据,而且返回结果也可以以文件或者函数返回。返回结果也非常直观,可以导出HTML报告或者XML报告。
目前,它只支持Windows平台。它能支持的调试信息格式参见下面描述:
Coverage Validator can understand debug in information in the following formats:
· Microsoft Program Database (PDB)
· Borland Turbo Debugger System (TDS)
· CodeView NB10
· COFF
2. Coverage validator使用方法
2.1 下载安装
在其官网上下载30的适用版本:
https://www.softwareverify.com/cpp/coverage/index.html
2.2 使用
Converage validator的使用是非常简单的,以下以一个五子棋程序的测试过程来展现coverage validator的功能特点:
整体图:
先看一下它的运行主页,可以发现coverage validator的功能是相当强大的,提供整体测试覆盖情况,每个文件的覆盖测试,分支覆盖测试,函数覆盖测试,单元覆盖测试,行覆盖测试和诊断分析等。
步骤一:选择要测试的程序或模块
通过菜单"File"-"Start Application" ,选择要进行覆盖测试的工程。如下图所示选择exe文件或者某个DLL模块即可,同时可以设置相应的环境变量,参数,输入输出文件等。
一直next,直到看到如下界面,点击开始测试即可。
步骤三:开始测试过程
点击开始应用后,即会跳出客户端界面,开始测试。
步骤四:结果显示
在测试的同时,coverage validator会即时的显示测试的结果信息,你可以变测试摆弄查看相应的测试覆盖率信息,下图是总的测试情况,分别显示已经待测试的文件,函数,分支,代码行,及单元测试组的覆盖率情况。如下,显示的总文件个数,被访问的文件个数,未被访问的文件个数与完全覆盖文件的个数。
同时还显示一些comment来给出一些提示,下边是我之前跑的一个程序,会给出一些信息,提示有些内联函数和模块库中的文件没有被覆盖。这个覆盖率是随着功能测试的过程动态变化的,可以变测试边显示覆盖测试结果。
也可以查看单个源文件的测试情况,如下图:
左边显示了各个源文件覆盖情况,其中浅蓝色的文件表示100%覆盖,红色的表示0覆盖,黄色的表示部分覆盖。对于每个文件分别显示了文件的总行数,被访问的行数,hook的行数,和测试覆盖率情况。右边显示了选择出了的单个文件的具体覆盖信息。黄色表示被覆盖的行,并在行的前边表示了该行代码的执行次数,红色为未访问的行,没有颜色的表示是没有HOOK的行。在文件的上方有具体的信息。同样可以点击左下方的refresh按钮来动态即时的显示代码覆盖情况。
利用覆盖测试工具,增加测试用例的方法,从上图的左边可以看出更改用户名模块的代码覆盖情况为0,查看此文件的覆盖测试结果,如下图所示,红色的行表示都没有覆盖,这个时候需要添加用户名更改的测试。
下图是增加了测试用例后的用户名更改模块的覆盖情况:
同样也可以按照函数的名字,类名字,目录等查看function coverage,如下图左下角的refresh用于更新,Type可以选择相应的显示方式。
下图为选择的类图显示方式。
如果检查的是CppUnit工程的代码覆盖率,需将Testrunnerd.dll文件复制到可执行文件所在目录。
1. 可以设置过滤条件,只统计加载的某个模块的覆盖率数据。比如,你要测试的是一个DLL,你就可以设置过滤条件,只统计该DLL的代码覆盖率。你还可以设置过滤只统计某个类,某个函数的覆盖率数据。设置方法:菜单:"Configure" - "Settings" - "Filters"。
3. Coverage validator优缺点
优点:
1. 不需要重编被测代码,只需要提供被测二进制程序的pdb文件,可以单独的测试DLL/EXE模块
2. 结果数据输出直观,查看方便,代码窗口有颜色标记,详细显示各个函数,分支,文件覆盖情况,并标记每一行代码执行次数。有HTML报告和XML报告
3. 可配合cppunit使用
4. 插桩很快,应用程序的速度也很快
5. 可以设置过滤条件,只统计加载的某个模块的覆盖率数据,某个类,某个函数的覆盖率数据,也可以设置排除条件,排除统计某部分的覆盖率数据。可以一个文件一个文件的返回,也可以一个函数一个函数的返回。
6. 可以即时的查看代码覆盖测试结果信息,在执行的各个阶段查看。
7. 可以用于Native-mode与mixed-mode.net模式
缺点:
1). 结果的自动合成功能不太好,只是在一个SESSION的末期将结果合成。
2). 提供的覆盖测试功能最高达到分支覆盖。
3). 不能够覆盖所有的行,会有数据丢失
4. 参考
https://www.softwareverify.com/cpp/coverage/index.html
阅读(1465) | 评论(0) | 转发(0) |
0
上一篇:关于C++ code coverage tool 的研究(2)—GCOV 实现原理
下一篇: 关于C++ code coverage tool 的研究(3)—gcov使用实例
相关热门文章
- socket中的短连接与长连接,心...
- Haproxy、Keepalived双主高可...
- Tomcat的性能与最大并发(1000)...
- Nginx深入详解之日志
- socket编程的同步、异步与阻塞...
- linux dhcp peizhi roc
- 关于Unix文件的软链接
- 求教这个命令什么意思,我是新...
- sed -e "/grep/d" 是什么意思...
- 谁能够帮我解决LINUX 2.6 10...