戏说c第二十六篇: 测试完备性衡量(代码覆盖率)
前言
师弟:“师兄,我又被鄙视了。说我的系统太差,测试不过关。”
我:“怎么说?”
师弟:“每次发布版本给程夏,都被她发现一些bug,太丢人了。师兄,有什么方法来衡量测试的程度么?”
我:“有,代码覆盖率就是一个比较好的方式。”
正文
通过gcov和lcov,可以很直观的看到代码的运行情况,同时也可以查看代码的行覆盖率,函数覆盖率等等信息,为开发提供一个方便的测试手段。
gcov是Linux下GCC自带的一个C/C++代码覆盖率分析工具,因此只要安装了gcc,就具备了。
gcov能够生成代码覆盖信息,但是不够直观,因此需要借助lcov/genhtml直观展示覆盖率,主要特点有:
● 基于Html输出,并生成一棵完整的HTML树
● 输出包括概述、覆盖率百分比、图表,能快速浏览覆盖率数据
● 支持大项目,提供三个级别的视图:目录视图、文件视图、源码视图
具体操作方法
代码编译的时候需要加上编译参数: -ftest-coverage -fprofile-arcs 和库 -lgcov。编译完会生成.gcno文件,然后进行测试,程序正常退出,会有.gcda文件生成。然后根据.gcda生成可视化信息。
Step1: lcov根据.gcda生成info数据
lcov 可以在指定目录去找代码覆盖的信息, 输出为 *.info, 这个 *.info 是一个中间结果 lcov -c -o
code_coverage.info -d .
Step2: 生成html数据
genhtml code_coverage.info -o coverage_result
Step3: 在coverage_result目录启动http服务,就可以通过网页访问
python3 -m http.server
其中第一二步,可以封装脚本为code_coverage.sh:
lcov -c -o code_coverage.info -d .
genhtml code_coverage.info -o coverage_result
结果如下
代码行覆盖率21.0%,函数覆盖率39.1%。

详细代码覆盖信息如下,其中标红的表示未测试到的代码行。

相关文章:
戏说c第二十六篇: 测试完备性衡量(代码覆盖率)
前言 师弟:“师兄,我又被鄙视了。说我的系统太差,测试不过关。” 我:“怎么说?” 师弟:“每次发布版本给程夏,都被她发现一些bug,太丢人了。师兄,有什么方法来衡量测试的…...
C语言初阶—函数
函数:子程序,是一个大型程序中的某部分代码,由一个或多个语句块组成,它负责完成某项特定任务,而且相较于其他代码,具有相对独立性。一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏&a…...
vue3的router
需求 路由组件一般放在,pages或views文件夹, 一般组件通常放在component文件夹 路由的2中写法 子路由 其实就是在News组件里面,再定义一个router-view组件 他的子组件,机会渲染在router-view区域 路由传参 <RouterLink :to"/news…...
云时代【5】—— LXC 与 容器
云时代【5】—— LXC 与 容器 三、LXC(一)基本介绍(二)相关 Linux 指令实战:使用 LXC 操作容器 四、Docker(一)删除、安装、配置(二)镜像仓库1. 分类2. 相关指令…...
npm digital envelope routines::unsupported
问题描述:npm运行命令报错:digital envelope routines::unsupported 原因:node版本过高 解决方案:在运行命令之前加上 SET NODE_OPTIONS--openssl-legacy-provider && SET NODE_OPTIONS--openssl-legacy-provider &&a…...
深入理解Flutter中的StreamSubscription和StreamController
在Flutter中,StreamSubscription和StreamController是处理异步数据流的重要工具。它们提供了一种方便的方式来处理来自异步事件源的数据。本文将深入探讨它们的区别以及在实际应用中的使用场景。 StreamSubscription StreamSubscription代表了对数据流的订阅&…...
聊聊 HTTP 性能优化
作为用户的我们在 "上网冲浪" 的时候总是希望快一点,尤其是抢演唱会门票的时候,但是现实并非如此,有时候我们会遇到页面加载缓慢、响应延迟的情况。 而 HTTP 协议作为互联网世界的基础,从网站打开速度到移动应用的响应…...
六、防御保护---防火墙内容安全篇
攻击可能只是一个点,防御需要全方面进行 DPI --- 深度包检测技术 --- 主要针对完整的数据包(数据包分片,分段需要重组),之后对 数据包的内容进行识别。(应用层) 1,基于“特征字”的…...
HC32F460 是否有 RTC?在电池供电方案中该如何使用?
[技术问答]HC32F460 是否有 RTC?在电池供电方案中该如何使用?_hc32f460 rtc-CSDN博客 华大HC32A460 系列介绍(三)_华大单片机内部温度传感器-CSDN博客 HC32F460PETB-LQFP100-华大半导体有限公司 [【HC32F460开发板测评】…...
HTML---表单验证
文章目录 目录 本章目标 一.表单验证概述 二.表单选择器 属性过滤选择器 三.表单验证 表单验证的方法 总结 本章目标 掌握String对象的用法会使用表单选择器的选择页面元素会使用JQuery事件进行表单验证Ajax的概念和作用 一.表单验证概述 前端中的表单验证是在用户提交表…...
基于tomcat的JavaWeb实现
Tomcat服务器 免费,性能一般的服务器 安装配置 基于Java,故需要配置环境变量,新加系统路径JAVA_HOME,路径为jdk的主目录。 而后打开bin目录下的startup.bat文件出现如下窗口说明配置成功 idea继承tomcat服务器 使用java开发…...
AI时代编程新宠!如何让孩子成为未来的编程大师?
文章目录 一、了解编程的基础概念二、选择适合的编程工具三、激发孩子的兴趣四、注重基础能力的培养五、提供实践机会六、鼓励孩子与他人合作七、持续支持与鼓励《信息学奥赛一本通关》本书定位内容简介作者简介目录 随着科技的迅猛发展,编程已经从一种专业技能转变…...
Qt 中Json的构造和解析简单例子
概述: Qt中使用Json比较方便,不像纯C需要导入CJson RapidJson JsonCpp等第三方的库,主要使用到QJsonDocument、QJsonObject对象即可 1、如何构造一个json字符串 假如我们需要构造 {"cmd":"1001","data":{"content&q…...
CSS特性
小技巧:在调试工具中,css样式上看层叠,下看继承。 1、层叠性 相同的属性会被覆盖,不同的属性会叠加 2、继承性 3、优先级 基于不同种类的选择器的匹配规则。 通配符 < 标签 < 类选择器 < id选择器 < 行内样式 <…...
springcloud:3.1介绍雪崩和Resilience4j
灾难性雪崩效应 简介 服务与服务之间的依赖性,故障会传播,造成连锁反应,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。 原因 1.服务提供者不可用(硬件故障、程序bug、缓存击穿、用户大量请求) 2.重试加大流量(用户重试,代码逻辑重试) 3.服…...
实现定时器的两种方法:使用windows api定时器 和使用c++11/14 定时器
前言: 当我有一个开发需求,符合下面的条件 1.需要某个任务在程序中每隔一段时间就要执行一次,可能把这个任务封装成了一个函数。 2.这种需要定时执行的任务,有2个,3个....越来越多。 这个时候我们就可以考虑使用定时…...
H5:图像标签和路径
目录 一.前言 二.正文 1.图像标签 注意: 2.路径 Ⅰ.目录文件夹和根目录 Ⅱ.路径 三.结语 一.前言 本篇介绍有关标签和路径,关于图像标签我们来看看有什么需要注意的。 二.正文 1.图像标签 在HTML标签中,img标签用于定义HTML页面中的图像。 <im…...
AI学习(5):PyTorch-核心模块(Autograd):自动求导
1.介绍 在深度学习中,自动求导是一项核心技术,它使得我们能够方便地计算梯度并优化模型参数。PyTorch 提供了一个强大的自动求导模块(Autograd),它可以自动计算张量的导数得出梯度信息,同时也支持高阶导数计算。 1.1 概念词 在学…...
Grid-Based Continuous Normal Representation for Anomaly Detection 论文阅读
Grid-Based Continuous Normal Representation for Anomaly Detection 论文阅读 摘要简介方法3.1 Normal Representation3.2 Feature Refinement3.3 Training and Inference 4 实验结果5 总结 文章信息: 原文链接:https://arxiv.org/abs/2402.18293 源码…...
FaceBook获取广告数据
1、访问 广告管理工具 确认自己登陆的账号下面能看到户。 2、使用 图谱Api探索工具 生成用户短期口令 3、get请求(或者浏览器直接打开)访问: https://graph.facebook.com/v19.0/me?fieldsid,name, email&access_token{上一步生成的口令} 4、短期…...
YOLOv11多模态融合新突破:RGB+红外线(IR)双输入结合HCF-Net的DASI模块,小目标检测性能显著提升!
1. YOLOv11多模态融合的技术突破 最近在目标检测领域,YOLOv11结合多模态输入(RGB红外)的方案引起了广泛关注。这种创新方法通过融合可见光和红外图像的优势,显著提升了小目标检测的性能。我在实际测试中发现,传统单模态…...
从数据采集到回放验证:ADTF 适配 ROS 的 ADAS 测试实践厮
一、简化查询 1. 先看一下查询的例子 /// /// 账户获取服务 /// /// /// public class AccountGetService(AccountTable table, IShadowBuilder builder) {private readonly SqlSource _source new(builder.DataSource);private readonly IParamQuery _accountQuery build…...
信道估计实战:从LS、MMSE到LMMSE的性能演进与工程权衡
1. 信道估计:无线通信的"导航系统" 想象一下你在一个陌生的城市开车,GPS信号时强时弱。信道估计就像是通信系统中的GPS,帮助接收端"看清"信号传输路径上的各种变化。在无线通信中,电磁波经过反射、折射、衍射…...
别再为reg2icg的setup违例头疼了!手把手教你用ICC2/Innovus这3招搞定(附实战数据对比)
3大实战技巧彻底解决ICC2/Innovus中reg2icg的setup违例问题 在数字芯片后端设计中,时钟门控单元(ICG)与寄存器之间的时序路径(reg2icg)一直是工程师们最头疼的问题之一。特别是在先进工艺节点下,这类路径经常出现setup违例,直接影响芯片性能甚…...
higress 这个中登才是AI时代的心头好搪
核心摘要:这篇文章能帮你 ?? 1. 彻底搞懂条件分支与循环的适用场景,告别选择困难。 ?? 2. 掌握遍历DOM集合修改属性的标准姿势与性能窍门。 ?? 3. 识别流程控制中的常见“坑”,并学会如何优雅地绕过去。 ?? 主要内容脉络 ?? 一、痛…...
告别简单池化:用PyTorch实现Attention MIL,让模型学会‘聚焦’关键实例
告别简单池化:用PyTorch实现Attention MIL,让模型学会‘聚焦’关键实例 在医学图像分析或文本分类任务中,我们常常遇到这样的场景:单个样本由多个实例组成(如病理切片中的多个细胞区域、文档中的多个句子段落ÿ…...
AdvGAN实战:用生成对抗网络高效制造“隐形”攻击样本
1. AdvGAN是什么?为什么你需要关注它? 想象一下,你训练了一个准确率高达99%的图像分类模型,但在实际部署时,系统却把"停车标志"识别为"限速标志"——仅仅因为有人用贴纸轻微修改了标志图案。这就是…...
协作与迭代:当Code Review意见砸过来,CI流水线又红了
协作与迭代:当Code Review意见砸过来,CI流水线又红了 上周三深夜,我在仓库里提交了一段SPI驱动优化代码。自觉逻辑清晰,性能提升明显,满心等着合入。第二天一早,企业微信弹出三条Code Review通知,紧接着CI流水线标红——一个隐蔽的时序bug在QEMU仿真里被逮了出来。这场…...
面试必备:如何清晰解释Transformer中Encoder和Decoder的交互?附示例代码
面试必备:深入解析Transformer中Encoder与Decoder的交互机制 在自然语言处理领域,Transformer架构已经成为处理序列到序列任务的黄金标准。无论是机器翻译、文本摘要还是对话生成,理解Encoder和Decoder之间的交互机制都是技术面试中的高频考点…...
树莓派Pico玩转TFmini Plus雷达:MicroPython驱动教程与避坑指南(附IIC模式切换)
树莓派Pico玩转TFmini Plus雷达:MicroPython驱动教程与避坑指南(附IIC模式切换) 当树莓派Pico遇上TFmini Plus雷达,会碰撞出怎样的火花?这款售价仅4美元的微控制器,凭借其双核ARM Cortex-M0处理器和灵活的G…...
