引言 最近在调研C++工程怎么做单元测试和代码覆盖率统计,由于我们工程有使用Boost库,尝试使用Boost.Test来实现单元测试并通过Gcov和Lcov来生成代码覆盖率报告。...gcov:GCC 自带的代码覆盖率工具。 lcov:用于生成 HTML 格式的覆盖率报告。 genhtml:用于将 lcov 生成的覆盖率数据转换为 HTML 文件。...GCOV 代码覆盖率统计流程 画板 由于gcov生成的代码覆盖率统计文件可视化较低,所以需要借助lcov,genhtml工具直接生成html报告。...生成覆盖率报告 # 生成初始的覆盖率信息 lcov --capture --directory ....Mac+VSCode,但Lcov对Mac系统并不太友好,前面的demo工程虽然编译通过了,但生成代码覆盖率报告就报错,猜测Mac的符号表机制跟Linux不太一样,最后还是在私有构建机的Linux环境跑通了
准备工具 请参考教程安装即可: GCC CMake Google Test gcov lcov gcovr 代码覆盖率 代码覆盖率一般包含以下几种类型: 函数覆盖率:描述有多少比例的函数经过了测试。...执行cmake、make命令编译之后生成单测可执行文件Test。...lcov是gcov工具的图形前端,收集多个源文件的gcov数据,生成描述覆盖率的HTML页面。生成的结果中会包含概述页面,方面浏览。...lcov软件包提供的另外一个命令genhtml来生成最终需要的html格式的覆盖率报告文件。...gcovr 一般场景下使用gcov和lcov能满足代码覆盖率的获取和展示工作,lcov和genhtml配合生成的HTML报告内容详尽,简洁直观,行覆盖率、分支覆盖率都有,但是HTML文件在常用的持续集成工具
我用mybatis生成器,生成时总有两个model类,一个是PO类,一个是example,但example我不想要了,想去掉,查一下,修改相关配置即可....false" enableSelectByExample="false" selectByExampleQueryId="false"> 修改后,没再生成
Hello Headers Directory Path CMake语法指定了许多变量,可用于帮助您在项目或源代码树中找到有用的目录。...这是您运行cmake命令的目录 CMAKE_CURRENT_BINARY_DIR 您当前所在的build目录 PROJECT_BINARY_DIR 当前项目的build目录 源文件变量 创建包含源文件的变量可以使您更清楚地了解这些文件...注意 如前面的示例所述,我们将源文件直接传递给add_library调用,这是现代CMake的建议。...是GCOV图形化的前端工具, 是Linux Test Project维护的开放源代码工具,最初被设计用来支持Linux内核覆盖率的度量。...基于Html输出,并生成一棵完整的HTML树,输出包括概述、覆盖率百分比、图表,能快速浏览覆盖率数据。 支持大项目,提供三个级别的视图:目录视图、文件视图、源码视图。 2.
但很多时候,我们可能希望得到更加美观和便于浏览的结果。 此时就可以使用lcov了。 lcov是gcov工具的图形前端。它收集多个源文件的gcov数据,并生成描述覆盖率的HTML页面。...lcov软件包提供的另外一个命令genhtml来生成最终需要的html格式的覆盖率报告文件。...可以通过浏览器查看覆盖率报告的结果,像下面这样: ? 从这个报告的首页,我们已经可以看到代码的语句覆盖率(Lines),函数覆盖率(Functions)以及分支覆盖率(Branches)。...而在实际的项目中,可能同时有很多人在开发同一个项目,每一天项目中都会有很多次的代码提交。我们不可能每次手动的执行编译和生成覆盖率报告结果。...这时就可以借助一些持续集成的工具,定时自动地完成项目的编译,测试和覆盖率报告结果的生成工作。
准备工具 clang-tidy、infer 用于静态代码检查 lcov 用于统计单元测试代码覆盖率 gcovr 用于生成覆盖率报告及转为 SonarQube 支持的报告格式 sonar-scanner...lcov 与基础报告对比生成结果 这个步骤比较繁琐,我们找到了一个开源的 CMake 插件 CodeCoverage.cmake,有了这个插件,您只需要在您的工程中添加几行 CMake 代码即可实现覆盖率统计能力...随后调用 setup_target_for_coverage_lcov() 添加一个自定义 CMake 目标用来执行并输出覆盖率统计报告,它的参数分别如下: NAME 在 CMake 中生成的自定义目标名称...,就可以自动在 CMake 缓存目录生成覆盖率统计报告了: # 初始化工程为 Debug cmake -Bbuild -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_STANDARD...如果你是 CMake 工程,做到这件事情非常简单,只需要在 CMake 初始化工程时增加参数:-DCMAKE_EXPORT_COMPILE_COMMANDS=ON,该参数的增加会告知 CMake 将所有源文件的编译选项写入到一个名为
3使用Gcov生成覆盖率报告 bash gcov my_program.c ·生成my_program.c.gcov文件,显示每行代码的执行次数。...替代工具 工具 特点 LCOV 基于 Gcov,生成 HTML 报告,可视化更强 gcovr Python 编写的 Gcov 报告生成工具,支持多种输出格式 LLVM-cov Clang/LLVM 的覆盖率工具...Lcov是一个基于Gcov的代码覆盖率分析工具,用于生成更直观、可视化的覆盖率报告(如 HTML)。...Lcov 报告示例 1 HTML 报告内容 ·目录/文件列表:显示每个文件的覆盖率。 ·颜色标识: o绿色:已覆盖的代码。 o红色:未覆盖的代码。 o黄色:部分覆盖(如分支未完全覆盖)。...2.运行程序,生成.gcda文件。 3.用lcov收集数据,genhtml生成报告。 ·适用场景: oC/C++ 项目的单元测试覆盖率分析。 o持续集成(CI)中的代码质量检查。
这包含 Doxygen 从你的源文件生成的 HTML 文档。使用你喜欢的浏览器打开index.html将显示 Doxygen 欢迎页面。...当与 Python 项目一起使用时,它可以解析源文件中的所谓 docstrings,并自动为函数和类生成文档页面。...向 CDash 仪表板报告测试覆盖率 本食谱的代码可在github.com/dev-cafe/cmake-cookbook/tree/v1.0/chapter-14/recipe-02获取,并包含一个...在本食谱中,我们将测量测试覆盖率并将其报告给 CDash 仪表板,以便我们能够逐行浏览测试覆盖率分析,以识别未测试或未使用的代码。...这段代码存在缺陷,我们将尝试借助 ThreadSanitizer 来识别数据竞争。如果不运行 ThreadSanitizer,我们可能不会发现代码中的任何问题: $ .
点击上方"蓝字"关注我们01、CMake>>>CMake是一个简化跨不同平台开发项目构建过程的工具。CMake自动生成生成系统,如Makefiles和Visual Studio项目文件。...# 查找Qt5库中的Core组件,并且要求这个组件是必需的find_package(Qt5 COMPONENTS Core REQUIRED)# 设置覆盖率编译选项,将Release配置的编译标志与覆盖率选项结合...07、CMake命令参考Qt5::Coreqt5_add_big_resources将大型二进制资源编译成目标代码qt5_add_binary_resources从Qt资源文件列表创建一个RCC文件qt5...DBusqt_add_dbus_adaptor为D-Bus接口生成适配器类qt_add_dbus_interface生成实现D-Bus接口描述文件接口的C++源代码qt_add_dbus_interfaces...为D-Bus接口描述文件生成实现接口的C++源代码qt_generate_dbus_interface从头文件生成D-Bus接口Qt5::LinguistToolsqt5_add_translation
单元测试就最贴近代码的,在开发过程中执行测试就越容易发现问题。另外覆盖率是测试金字塔的核心,越接近底层的测试覆盖率应该越高,所以我们通常会以代码覆盖率和增量代码覆盖率来佐证单元测试的效果。...使用 Google Mock 提供的 MOCK_METHOD 宏生成 MockMyInterface 类,该类继承自 MyInterface 并实现了 Foo 函数。...CMake配置示例 cmake_minimum_required(VERSION 3.14) project(UnitTestProj) # 设置 C++ 标准 set(CMAKE_CXX_STANDARD...Test和Google Mock库 include_directories(${gtest_SOURCE_DIR}/include ${gmock_SOURCE_DIR}/include) # 添加测试源文件...这里提供一些业界的参考指标,在我们引入单元测试后,尝试使用如下指标来衡量成果: 代码覆盖率:使用工具(如 gcov、JaCoCo)生成覆盖率报告,目标是达到 80% 以上的行覆盖率和分支覆盖率。
rust-reportcard.xuri.me.png Rust Report Card https://rust-reportcard.xuri.me 简介 Rust Report Card 服务,通过近 500 个代码检测项帮助分析你的...Rust 代码中的潜在质量问题,还可获得 badge 徽章。...该服务基于 rust-clippy 中 定义的 lint 规则对 Rust 进行静态代码分析扫描,在 Rust 编译器检查的基础之上帮你更进一步,编写出更好的代码,检查内容涵盖可优化性能写法、可简化代码写法...、代码惯用风格更符合最佳实践、未使用变量和 cargo 声明文件检查等。...Rust Report Card 提供了增量代码扫描、代码质量评级、徽章生成、开源软件协议检查和开源 Rust 代码质量评分排行等功能。 代码质量评级与得分规则 grade.png
在python代码进行单元测试的时候,我们总会遇到这样的问题,如何来统计我们的代码所有分支的测试?本文带你了解,如何快速的掌握代码的覆盖率。...html 结果: 生成了一个html文件夹,打开index.html 结果: 各字段说明: Stmts 总的有效代码行数(不包含空行和注释行) Miss 未执行的代码行数(不包含空行和注释行)...Branch 总分支数 BrMiss 未执行的分支数 Cover 代码覆盖率 Missing 未执行的代码部分在源文件中行号 可以看到大概的覆盖率....– 运行Python程序并收集执行数据 report – 报告覆盖率结果 html – 生成HTML文件,内容含覆盖率结果列表 json – 生成JSON文件,内容含覆盖率结果 xml – 生成XML...HTML覆盖率报告 cov.html_report(directory='covhtml') 一样可以收集到最后的结果,看大家如何去使用即可。
为了解决上述问题,我们深入调研了覆盖率报告的生成逻辑,并结合团队的开发流程,开发了一套嵌入在代码提交流程中、基于单次代码提交(git commit)生成报告、对开发者透明的增量代码测试覆盖率工具。...覆盖率映射关系生成源码是 LLVM 的一个 Pass,(下文简称 GCOVPass)用来向 IR 中插入计数代码并生成 .gcno 文件(关联计数指令和源文件)。...定制化的输出也可以通过修改上述函数完成。我们的增量代码测试覆盖率工具解决代码 BB 结构变动后合并到已有 .gcda 文件不兼容的问题,也是修改上述函数实现的。 ?...增量代码覆盖率检测原理 方案权衡 由于 gcov 工具(和前面的 .gcov 文件区分,gcov 是覆盖率报告生成工具)生成的覆盖率检测报告可读性不佳,如图 9 所示。...结合前两章内容和覆盖率报告生成步骤,覆盖率生成流程如下图所示。考虑到增量代码覆盖率检测中代码增量部分需要通过 Git 获取,比较自然的想法是用 git diff 的信息去过滤覆盖率的内容。
为了解决上述问题,我们深入调研了覆盖率报告的生成逻辑,并结合团队的开发流程,开发了一套嵌入在代码提交流程中、基于单次代码提交(git commit)生成报告、对开发者透明的增量代码测试覆盖率工具。...覆盖率映射关系生成源码是 LLVM 的一个 Pass,(下文简称 GCOVPass)用来向 IR 中插入计数代码并生成 .gcno 文件(关联计数指令和源文件)。...定制化的输出也可以通过修改上述函数完成。我们的增量代码测试覆盖率工具解决代码 BB 结构变动后合并到已有 .gcda 文件不兼容的问题,也是修改上述函数实现的。 !...# 增量代码覆盖率检测原理 ## 方案权衡 由于 gcov 工具(和前面的 .gcov 文件区分,gcov 是覆盖率报告生成工具)生成的覆盖率检测报告可读性不佳,如图 9 所示。...结合前两章内容和覆盖率报告生成步骤,覆盖率生成流程如下图所示。考虑到增量代码覆盖率检测中代码增量部分需要通过 Git 获取,比较自然的想法是用 git diff 的信息去过滤覆盖率的内容。
测试的编写理想情况下应该完全定义软件的行为,但是通常情况都是很难达到这样理想的程度。而测试覆盖率就是检验测试覆盖软件行为的情况,通过检查测试覆盖情况可以帮助开发人员发现没有被覆盖到的代码。...的测试覆盖率。...到这里测试覆盖信息已经搜集完毕,接下可以通过 genhtml 这样的工具生成 html,然后通过浏览器查看测试覆盖率,如下图所示: [image] 但是这样是非常不方便的,因为在持续的开发过程,如果每次都要手动进行这样一套操作...,那必然带来极大的人力浪费,所以现在的常用做法是将测试覆盖率写入 CI 并且和第三方平台(比如 Codecov,Coveralls)集成,这样开发人员完全不必关心测试覆盖信息的收集整理和展示问题,只需要发布代码后直接到第三方平台上查看覆盖情况即可...== 'centos7' run: | cmake -DENABLE_COVERAGE=ON -B build/ 可以看到这里我们将前文介绍的 coverage 相关的编译选项通过一个 cmake
flag,只需要debug符号,就可以输出代码覆盖率报告 OpenCppCoverage[72] Windows上的开源代码覆盖率工具 Valgrind Valgrind[73]是运行时代码分析器,可以检测内存泄漏...这些工具都使用覆盖率报告来寻找新的代码执行路径,并尝试为代码提供新的输入。它们可以发现崩溃、挂起以及一些没有被考虑到的输入。...如果目标是100%的代码覆盖率,很明显这些错误场景也需要被覆盖的。 调试 uftrace uftrace[87]可以用来生成程序执行的函数调用图。...ABI Compliance Checker ABI Compliance Checker[91] (ACC)可以分析两个库版本,并生成关于API和C++ ABI变化的详细兼容性报告,可以帮助库开发人员发现无意的破坏性更改...CNCC Customizable Naming Convention Checker[92](可自定义的命名约定检查器)可以报告代码中不遵循特定命名约定的标识符。
html – 生成HTML文件,内容含覆盖率结果列表 json – 生成JSON文件,内容含覆盖率结果 xml – 生成XML报告文件,内容含覆盖率结果 erase – 清除之前收集的覆盖率数据 combine...,第二步生成代码覆盖率的信息报告。...文件,代码覆盖率是100% 结果展示中的字段含义: tmts:语句总数 Miss:未执行到的语句数 Cover:覆盖率,计算公式 Cover=(Stmts-Miss)/Stmts 生成HTML报告文件...各字段说明: Stmts 总的有效代码行数(不包含空行和注释行) Miss 未执行的代码行数(不包含空行和注释行) Branch 总分支数 BrMiss 未执行的分支数 Cover 代码覆盖率 Missing...未执行的代码部分在源文件中行号 以执行的测试原文件命名的文件,可以高亮显示覆盖和未覆盖的代码。
):在字节码层面插入探针 执行测试:运行测试时记录执行路径 生成报告:分析收集的数据生成可视化报告 3.主要使用场景 持续集成环境中的代码质量门禁 开发过程中检查测试充分性 识别未被测试覆盖的代码区域...监控测试覆盖率趋势 4.报告解读 JaCoCo 生成的 HTML 报告包含: 覆盖率概览 (所有包和类的汇总数据) 源代码高亮显示 (绿色表示已覆盖,红色表示未覆盖) 分支覆盖详情 方法覆盖详情...3使用Gcov生成覆盖率报告 bash gcov my_program.c 生成my_program.c.gcov文件,显示每行代码的执行次数。...6.2.6.替代工具 工具 特点 LCOV 基于Gcov,生成HTML报告,可视化更强 gcovr Python编写的Gcov报告生成工具,支持多种输出格式 LLVM-cov Clang/LLVM的覆盖率工具...Lcov是一个基于Gcov的代码覆盖率分析工具,用于生成更直观、可视化的覆盖率报告(如HTML)。
笔者最近发现一款将pandas数据框快速转化为描述性数据分析报告的package——pandas_profiling。一行代码即可生成内容丰富的EDA内容,两行代码即可将报告以.html格式保存。...这是最简单最快速了解一个数据集的方法。当然,更深层次的EDA一定是要借助统计图形来展示的。基于scipy、matplotlib和seaborn等工具的展示这里权且略过。...: python setup.py install 再来看pandas_profiling基本用法,用pandas将数据读入之后,对数据框直接调用profile_report方法生成EDA分析报告.../census_report.html")) 看看报告效果如何。pandas-profiling EDA报告包括数据整体概览、变量探索、相关性计算、缺失值情况和抽样展示等5个方面。...配置完成后在pycharm左边项目栏目直接右键external_tool下的pandas_profiling即可直接生成EDA报告。更多内容大家可以到该项目GitHub地址查看: ?
笔者最近发现一款将pandas数据框快速转化为描述性数据分析报告的package——pandas_profiling。...一行代码即可生成内容丰富的EDA内容,两行代码即可将报告以.html格式保存。笔者当初也是从数据分析做起的,所以深知这个工具对于数据分析的朋友而言极为方便,在此特地分享给大家。...: python setup.py install 再来看pandas_profiling基本用法,用pandas将数据读入之后,对数据框直接调用profile_report方法生成EDA分析报告.../census_report.html")) 看看报告效果如何。pandas-profiling EDA报告包括数据整体概览、变量探索、相关性计算、缺失值情况和抽样展示等5个方面。...配置完成后在pycharm左边项目栏目直接右键external_tool下的pandas_profiling即可直接生成EDA报告。更多内容大家可以到该项目GitHub地址查看: ?