C++ 代码覆盖率分析工具

这篇具有很好参考价值的文章主要介绍了C++ 代码覆盖率分析工具。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考:https://hxysayhi.com/posts/7af8893f/

本文对C++相关的代码覆盖率分析工具进行调研,作出简要的总结

内容提要

Squish Coco (收费)
OpenCppConverage (开源)
Squish Coco
简介
quish Coco是Tcl,QML,C#和C / C ++程序(包括SystemC程序)的完整代码覆盖工具链。它运行在macOS,Linux™和Microsoft®Windows上。

Squish Coco分析应用程序运行的方式,例如 可作为测试套件的一部分进行使用,然后可以利用其结果使测试更有效和完整。

功能
Squish Coco在一下方面的帮助尤为突出:

找到未经测试的代码部分。

找到可以消除的冗余测试。Squish Coco可以识别测试涵盖源了代码的哪些部分。它可以检测新测试是否涵盖了现有测试未涵盖的源代码。

通过显示从未执行过的代码来查找死代码。

计算最佳测试执行顺序,以便最大化每次运行的测试覆盖率。这对手动测试特别有用。

分析应用程序的两个单独版本并比较差异。这使得可以查看哪些测试受到源代码修改的影响,并且还可以测量补丁或修补程序的测试覆盖率。

衡量程序和测试的执行时间。

Squish Coco可用于测试的每个阶段和所有测试方法(单元测试,自动测试,手动白盒测试,黑盒测试等)。 测试套件可以分为各个独立部分,Squish Coco可以将多个执行报告合并为一个统一的报告。

组件
Squish Coco包的主要组件是两个独立的工具和一个插件:

CoverageScanner: 一个分析和检测Tcl,QML,C#和C/C++应用程序的程序。

CoverageBrowser - 用于显示和管理覆盖率分析结果的程序。

Microsoft®VisualStudio® Add-In - 一个可选插件,用于为Microsoft®VisualStudio®下开发的C#或C ++项目配置代码覆盖率。

此外还有几个辅助程序用于报告生成,覆盖数据操作和许可证管理。

CoverageScanner – Instrumentation as part of the build process
CoverageScanner可以检测编译器看到的源代码,而无需触及原始代码。 它生成一个检测的可执行文件,共享库或插件。 检测会跟踪运行可执行文件或使用库或插件时执行的代码。 能够测算每行执行次数、是否执行了某一行。 当检测程序终止时,会生成执行报告。

为了获得高质量的覆盖率测量,CoverageScanner不仅可以在方法和语句级别上使用,还可以记录语句覆盖率和决策覆盖率信息。

此外,还可以将测试名称和执行状态(即“通过”或“失败”)插入到报告中。 这可以通过脚本或直接从应用程序完成。 进一步,可以将CoverageScanner集成到测试框架(如CppUnit或CxxTest)中,在该框架中为每个测试生成单独的覆盖信息。

CoverageScanner是一个命令行工具,它取代了通常用于构建可执行文件,库或插件的编译器。 它将特殊的检测指令插入到预处理的源代码中,然后使用原始编译器编译修改后的代码。 同时,生成数据库(.csmes文件)以供以后分析。 它包含仪器列表和检测源代码的副本。

在编译之后,可以像往常一样运行检测的可执行文件(并且可以通过访问它们的程序使用检测的库或插件),但是现在,当程序终止时,生成执行报告(.csexe文件)。

CoverageScanner几乎适用于任何标准编译器,包括GNU gcc,GNU g ++,Microsoft®VisualStudio®6.0,.NET,Express和嵌入式C ++,英特尔®C++等。对于大多数其他编译器,可以轻松配置CoverageScanner。

CoverageBrowser – Viewing, analyzing and managing code coverage results
可以使用CoverageBrowser工具分析和管理.csexe文件中的执行报告。 该程序具有GUI图形用户界面,用户可以通过GUI浏览和管理其执行报告。 这样可以直接找到未经测试或无法访问的代码以及低效的测试。

CoverageBrowser的能力总结如下:

向已检测的源代码行添加注释。

在树视图中显示执行列表。

标记无法测试的代码段为“手动验证”。

浏览已检测的代码。

在覆盖级别之间切换:决策覆盖,条件覆盖和语句块覆盖。

显示工具状态的详细说明。 这包括:

用户评论。

每个已检测语句的状态:已执行,未执行,已部分执行。

执行检测语句的次数。

执行检测语句的测试列表。

从自动测试套件中检索执行状态。

单元测试的代码覆盖率分析。

将结果导出到电子表格。

测试效益分析模式可以查看一组测试添加的附加代码覆盖范围。

源代码和函数浏览器,显示每个文件,每个类,每个命名空间以及每个Tcl,QML,C#和C / C ++函数的代码覆盖率统计信息。

以HTML格式生成报告。 它包括每个源文件的统计信息,方法,执行和未执行的代码行列表。

黑盒测试支持。

比较不同版本软件的覆盖率数据。

Squish Coco的使用
由于是收费应用,,,,,,

OpenCppCoverage
OpenCppCoverage 是一个开源的windows平台下的C++源代码覆盖率测试工具。
主要用于单元测试覆盖,但也可以使用它来了解程序中执行的行以进行调试。

功能:
Visual Studio支持:支持带有程序数据库文件(.pdb)的编译器。

非侵入式:只需使用OpenCppCoverage运行程序,无需重新编译应用程序。

HTML报告: 使用命令行方式运行,生成HTML格式的报告。

行覆盖: 支持代码行级别的覆盖检查,在报告中以不同的背景色加以区分。

作为Visual Studio插件运行: 可以Visual Studio插件的形式进行使用,安装该插件后,在Visual Studio的tool栏中可以直接进行覆盖率检查。

Jenkins支持

支持优化构建。

根据正则表达式排除代码行。

子进程覆盖。

覆盖率聚合:可运行多个代码覆盖率检测并将它们合并到单个报告中。

环境要求
Windows Vista或更高版本。

Microsoft Visual Studio 2008或更高版本的所有版本,包括Express版本。 也应该可以与以前版本的Visual Studio一起使用。

使用方法
命令行模式
下载OpenCppCoverage并进行安装,安装时选择将其添加到环境变量。

最基本的命令如下:

OpenCppCoverage.exe --sources MySourcePath – YourProgram.exe arg1 arg2
其中MySourcePath是要检测的项目的源文件目录,YourProgram.exe是编译好的准备进行检测的项目可执行文件,最后可以添加检测的目标程序运行的参数。

使用–sources MySourcePath参数是为了告诉OpenCppCoverage我们需要纳入覆盖率检测的源代码。否则,在计算覆盖率时可能会对许多非项目中的文件进行统计。

运行之后,将在当前目录生成HTML的报告文档。在浏览器中可以进行方便的查看。报告中包含了整个项目的覆盖率数据,各个文件的覆盖率,以及各个文件的代码行级的覆盖情况。在每个文件中根据代码是否被被运行到做了颜色的区分。

生成报告文档的格式以及目录同样是可以配置的,配置命令为–export_type arg,使用示例如下:

OpenCppCoverage.exe --export_type=export_type_value:outputPath – MyProgram.exe
其中export_type_value为输出的格式,支持的格式有:

html:将报告保存为一个Html文件。 如果未设置此标志,则为默认值。
cobertura:创建了一个与Jenkins的Cobertura插件兼容的xml文件
binary:覆盖率报告保存在二进制文件中。 可以使用–input_coverage重新加载此文件。
outputPath是将执行导出的路径。未配置时使用默认值:

对于html: CoverageReport-YYYY-MM-DD-HHhMMmSSs,其中YYYY-MM-DD-HHhMMmSSs将被当前日期取代。outputPath应为一个目录。

对于cobertura: 默认为ProgramNameCoverage.xml,其中ProgramName是已执行程序或CoverageOutput的名称。 outputPath必须是文件。

对于binary:默认为ProgramName.cov,其中ProgramName是已执行程序或CoverageOutput的名称。 outputPath必须是文件。

还可以同时指定多个输出配置:

OpenCppCoverage.exe --sources=MySources --export_type=html:OutputFolder --export_type=cobertura – MyProgram.exe
更多的参数选项见此处

Visual Studio 插件模式
OpenCppCoverage对Visual Studio提供插件支持,支持2015和2017等版本。

安装插件之后,正常编译项目,在菜单栏选择Tools(工具) –> Run OpenCppCoverage将会弹出运行OpenCppCoverage的配置菜单,在Basic栏中Program to run为我们要检测的目标程序,对应命令行运行时我们输入的YourProgram.exe。Arguments为运行目标程序时使用的参数。在Filter中Additional Source Pattern中可以配置检测的目标项目源文件目录,对应命令行运行时的–sources=MySources。
C++ 代码覆盖率分析工具
C++ 代码覆盖率分析工具
C++ 代码覆盖率分析工具
C++ 代码覆盖率分析工具

将这三个参数配置好就可以进行最基本的覆盖率检测了。

运行完毕后将在output窗口生成覆盖率报告,同时也会在代码浏览窗口中根据代码是否被执行来对各行代码以不同的颜色进行标识。

此外在Import/Export栏可以配置输出文件的格式等,此处多更多的配置使用不作详细介绍。文章来源地址https://www.toymoban.com/news/detail-442977.html

到了这里,关于C++ 代码覆盖率分析工具的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 代码覆盖率

    在做单元测试时,代码覆盖率常常被拿来作为衡量测试好坏的指标,甚至,用代码覆盖率来考核测试任务完成情况,比如,代码覆盖率必须达到80%或 90%。于是乎,测试人员费尽心思设计案例覆盖代码。用代码覆盖率来衡量,有利也有有弊。本文我们就代码覆盖率展开讨论

    2024年02月07日
    浏览(32)
  • Google代码覆盖率最佳实践

    软件质量保障: 所寫即所思|一个阿里质量人对测试的所感所悟。 谷歌一直倡导的领域之一是使用代码覆盖率数据评估风险并识别测试中的真空。然而,代码覆盖率的价值一直是个争议的话题。每次聊到代码覆盖率时,似乎都会引发无尽的争论。由于大家固守自己阵营,所以

    2024年01月16日
    浏览(50)
  • 单元测试——测试代码功能及代码覆盖率

    目录 目录 前言 一、单元测试是什么? 二、前置准备  三、测试代码  四、示例  五:单元测试覆盖率 单元测试的写法不固定,这里以我自己的一种写法为例,算是很简单的一种写法           单元测试其实就是写一些测试函数,测试代码的功能是否正常运行,一般如果

    2024年02月07日
    浏览(37)
  • Lombok导致代码单元测试覆盖率崩塌

    Lombok 由于其使用的便利性, 目前流传非常广泛。甚至有呼声希望其能被Java官方引入,成为JDK的一部分。 当然凡事都有两面性,Lombok的引入也是有代价的。一时注释一时爽,结果导致代码在不知不觉中翻了好几倍。 例如以下几个简单的注解,背后是N多个自动生成的方法: @Da

    2024年02月07日
    浏览(41)
  • 如何有效保证Java代码单元测试覆盖率

    我们在实际项目开发过程中,不同level的童鞋由于专业技能的层次不同,导致在参与实际开发的业务代码中经常会出现各种bug,项目管理中好的pm或许会给充足的时间来让开发童鞋们定位修复这些bug,也有各种客观原因的PM不会在项目中预留这些时间,往往就需要开发自己通过

    2023年04月17日
    浏览(46)
  • go/java/C++覆盖率工具原理汇总学习记录

    goc采用的是插桩源码的形式,而不是待二进制执行时再去设置breakpoints。这就导致了当前go的测试覆盖率收集技术,一定是侵入式的,会修改目标程序源码。直接看案例 运行命令 生成的代码如下 jacoco是一个开源的代码覆盖率工具,针对java语言,其使用方法很灵活,可以嵌入

    2023年04月24日
    浏览(50)
  • OpenHarmony本地代码和接口覆盖率可视化操作梳理

    目录 一. 修改gn文件,编译执行测试套 1. 修改业务侧BUILD.gn文件,增加编译选项 2.设置lcov统计“branch coverage”的方法 3. 编译测试版本+目标用例 4. 在windows下搭建执行环境,执行测试用例 5. 查看测试生成gcda文件 二. 使用本地代码覆盖率脚本 7. 修改python脚本中的路径 8. 执行脚

    2023年04月26日
    浏览(34)
  • 16 RTL仿真工具介绍—Modelsim脚本操作(Modelsim仿真 覆盖率测试)

    深入还是得靠自己学——尤其是脚本代码的编写 目录 1.Flist常用写法 2.Debussy——检查语法错误+debug代码 2.Linux版的Debussy——verdi 3.Modelsim——do file脚本 4.按脚本方式操作Modelsim 1.首先更改工作目录,到Modelsim文件夹下 2.写脚本代码 3.执行脚本、仿真 4.加载波形、界面操作、保存

    2024年02月08日
    浏览(54)
  • Python单元测试:一步步了解测试框架、测试用例和覆盖率分析

    在软件开发中,单元测试是一个非常重要的环节。它可以确保你的代码能够正常运行,并且在将来的修改中不会出现问题。在Python中,单元测试是非常容易实现的。本文将介绍Python单元测试的所有知识点,包括测试框架,测试用例,测试装置,测试套件和覆盖率分析。 Pytho

    2024年02月04日
    浏览(58)
  • 单元测试必备:Asp.Net Core代码覆盖率实战,打造可靠应用 !

    在前几章我们深度讲解了单元测试和集成测试的基础知识,这一章我们来讲解一下 代码覆盖率 ,代码覆盖率是单元测试运行的 度量值 ,覆盖率通常以百分比表示,用于衡量代码被测试覆盖的程度,帮助开发人员评估测试用例的质量和代码的健壮性。常见的覆盖率包括语句覆盖

    2024年04月23日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包