戏说c第二十六篇: 测试完备性衡量(代码覆盖率)

news2025/1/11 14:43:01

前言

师弟:“师兄,我又被鄙视了。说我的系统太差,测试不过关。”
我:“怎么说?”
师弟:“每次发布版本给程夏,都被她发现一些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%。
代码覆盖率
详细代码覆盖信息如下,其中标红的表示未测试到的代码行。
详细代码覆盖率

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1493564.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue2源码分析-vue入口文件global-api分析

文章背景 vue项目开发过程中,首先会有一个初始化的流程,以及我们会使用到很多全局的api,如 this.$set this.$delete this.$nextTick,以及初始化方法extend,initUse, initMixin , initExtend, initAssetRegisters 等等那它们是怎么实现,让我们一起来探究下吧 源码目录 global-…

2024年展望Android原生开发的现状,2024网易Android高级面试题及答案

没有稳定的工作,只有稳定的能力。 又到了万物复苏的季节,在程序猿这个行当里,作为 Android 开发出生的,在经历了八年的脱发生涯后,有了越来越多的想法和感触 趋势 随着各类移动跨平台的兴起,在 ReactNati…

基于SpringBoot+Vue实现的人力资源管理系统

系统介绍: 基于SpringBootVue实现的人力资源管理系统是为了提高企业人力资源管理水平而开发的。主要目标是通过对员工及人力资源活动信息(考勤、工资)等的编制来提高企业效率。 系统一共分为五大菜单项,分别是首页、薪资管理、权限管理、系统…

魔行观察-每日品牌监测-沪上阿姨-开店趋势

今日监测对象:沪上阿姨,监测时间段:2014年9月至2023年12月,发布时间:2024-03-05 数据获取地址:魔查查https://www.moxingdata.com/品牌基础信息 现有门店人均消费覆盖省份经营模式投资金额814416.531特许/…

工时管理软件:为什么企业需要工时跟踪?

工时跟踪对于企业经营来说,可能不是首要事项。工时跟踪有什么用? 管理学大师彼得德鲁克曾说过:If you can’t measure it, you can’t improve it(如果无法衡量,就无法改进)。企业经营也是同样道理&#x…

分布式系统中常用的缓存方案

1. 引言 随着互联网应用的发展和规模的不断扩大,分布式系统中的缓存成为了提升性能和扩展性的重要手段之一。本文将介绍几种在分布式系统中常用的缓存方案,包括分布式内存缓存、分布式键值存储、分布式对象存储和缓存网关等。 1.1 缓存在分布式系统中的…

FEP容量瓶多应用于制药光电光伏行业

常用规格:25ml、50ml、100ml、250mlFEP容量瓶也叫特氟龙容量瓶,容量瓶是为配制一定物质的量浓度的溶液用的精确定容器皿,常和移液管配合使用。广泛用于ICP-MS、ICP-OES等痕量分析以及同位素分析等高端实验。地质、电子化学品、半导体分析测试…

挑战杯 基于深度学习的动物识别 - 卷积神经网络 机器视觉 图像识别

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…

安防摄像头(IPC)的步进马达及IR-CUT驱动国产芯片——D6212

应用领域 安防摄像头(IPC)的步进马达及IR-CUT驱动。 02 功能介绍 D6212内置8路带有续流二极管的达林顿驱动管阵列和一个H桥驱动,单芯片即可实现2个步进电机和一个IR-CUT的直接驱动,使得电路应用非常简单。单个达林顿管在输入电…

android开发教程百度网盘,高并发系统基础篇

展望未来 操作系统 移动操作系统的演变过程,从按键交互的塞班功能机到触摸屏交互的Android/IOS智能机,从小屏幕手机到全面屏、刘海屏、水滴屏。任何系统无非干两件事:输入和输出,接收到外部输入信号后经过操作系统处理后输出信息…

如何减少AI中的偏见问题:八种方法避免AI偏见渗入模型

克服与避免 AI 偏见的八大方法 AI 中的算法偏见是一个普遍存在的问题,它虽然不可能完全消除,但却可以通过科学的方法积极地防止这种偏见。我们将在本文中围绕如何应对AI中的偏见问题展开深入的讨论。 您可能会回想起新闻中报道的一些存在偏见的算法示例…

深入理解RAM与ROM:计算机存储技术的核心

深入理解RAM与ROM:计算机存储技术的核心 在计算机科学领域,理解各种存储技术对于开发和维护高效、可靠的系统至关重要。本文旨在深入探讨两种基础且关键的存储形式:随机存取存储器(RAM)和只读存储器(ROM&am…

每日一练:LeeCode-面试题 02.07. 链表相交 【链表+迭代】 LeeCode-142. 环形链表 II【链表+集合】

每日一练:LeeCode-面试题 02.07. 链表相交 【链表迭代】 LeeCode-142. 环形链表 II【链表集合】 LeeCode-面试题 02.07. 链表相交思路 LeeCode-142. 环形链表 II思路set集合方法 本文是力扣 每日一练:每日一练:LeeCode-面试题 02.07. 链表相交…

全自动气象站的工作原理

TH-CQX5全自动气象站是一款野外高精度监测气象数据的环境气象站设备。它结合了先进的传感器技术、自动化控制系统和远程通信技术,能够提供准确、实时的气象数据,为环境保护、气象研究、农业生产等领域提供重要的数据支持。 高精度传感器:全自…

PSINS工具箱笔记——函数定义

绘图函数: 时间进度条: timebar(用起来简单) 姿态转换: 欧拉角、姿态矩阵、等效旋转矩阵、姿态四元数、运载火箭使用的欧拉角之间的转换。 轨迹生成: seg trjsegment(seg, segtype, lasting, w, a, var…

BUUCTF-Misc-百里挑一

题目链接:BUUCTF在线评测 (buuoj.cn) 下载附件打开是一个流量包文件: 全是在传图片时候的流量,先把图片保存出来文件–>导出对象–>HTTP–>保存到一个文件夹 然后使用kali下的exiftool找到了一半flag exiftool *|grep flag 另外一半…

【C语言】编程题专项练习+答案

目录 1.删除有序数组中重复的数 2.用除二取余的方法,把任意一个十进制正数的二进制序列输出(不考虑溢出) 2.1如果是把任意一个十进制整数的二进制序列输出呢? 3.输出一个六行六列的整形矩阵,并输出其转置矩阵。矩阵…

保修期内经营者收取维修费用应遵循正当程序原则

↑↑↑“上海高院”头条号为您讲述精彩的法律科普内容 上海市第一中级人民法院在履行司法审判职能的同时,始终高度重视高质量案件工作,总结司法审判经验,努力提高司法审判质量。 在2020年全国法院系统优秀案例分析评选活动中,上海…

伟大音乐家的伟大不朽作品,贝多芬一生的音乐作品全集

一、音乐描述 贝多芬一生创作题材广泛,重要作品包括9部交响曲、1部歌剧、32首钢琴奏鸣曲、5首钢琴协奏曲、多首管弦乐序曲及小提琴、大提琴奏鸣曲等。因为其对古典音乐的重大贡献,以及对奏鸣曲式和交响曲套曲结构的发展和创新,而被后世尊称为…

【Flutter 面试题】main()和runApp()函数在Flutter的作用分别是什么?有什么关系吗?

【Flutter 面试题】main()和runApp()函数在Flutter的作用分别是什么?有什么关系吗? 文章目录 写在前面解答补充说明 写在前面 关于我 ,小雨青年 👉 CSDN博客专家,GitChat专栏作者,阿里云社区专家博主&…