热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于C++codecoveragetool的研究(4)—coveragevalidator使用

http:www.taobaotesting.comblogsqa?bid8592Coveragevalidator1.简介2.原理简介3.使用4.优缺点1.Cove
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...

给主人留下些什么吧!~~
评论热议


推荐阅读
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了腾讯最近开源的BERT推理模型TurboTransformers,该模型在推理速度上比PyTorch快1~4倍。TurboTransformers采用了分层设计的思想,通过简化问题和加速开发,实现了快速推理能力。同时,文章还探讨了PyTorch在中间层延迟和深度神经网络中存在的问题,并提出了合并计算的解决方案。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • 本文介绍了连接库的定义和使用方法。连接库是通过编译生成的dll文件,例如php_mysql.dll。在使用扩展时,需要去掉配置文件中的分号,并通过phpinfo查看是否正确加载了mysql连接库。详细内容请参考链接:https://www.cnblogs.com/xiaobiaomei/p/7654750.html。摘要字数:180字。 ... [详细]
  • Python中sys模块的功能及用法详解
    本文详细介绍了Python中sys模块的功能及用法,包括对解释器参数和功能的访问、命令行参数列表、字节顺序指示符、编译模块名称等。同时还介绍了sys模块中的新功能和call_tracing函数的用法。推荐学习《Python教程》以深入了解。 ... [详细]
  • 本文介绍了JavaScript进化到TypeScript的历史和背景,解释了TypeScript相对于JavaScript的优势和特点。作者分享了自己对TypeScript的观察和认识,并提到了在项目开发中使用TypeScript的好处。最后,作者表示对TypeScript进行尝试和探索的态度。 ... [详细]
author-avatar
果丽珍
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有