当前位置: 首页 > news >正文

戏说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%。
代码覆盖率
详细代码覆盖信息如下,其中标红的表示未测试到的代码行。
详细代码覆盖率

http://www.lryc.cn/news/309360.html

相关文章:

  • C语言初阶—函数
  • vue3的router
  • 云时代【5】—— LXC 与 容器
  • npm digital envelope routines::unsupported
  • 深入理解Flutter中的StreamSubscription和StreamController
  • 聊聊 HTTP 性能优化
  • 六、防御保护---防火墙内容安全篇
  • HC32F460 是否有 RTC?在电池供电方案中该如何使用?
  • HTML---表单验证
  • 基于tomcat的JavaWeb实现
  • AI时代编程新宠!如何让孩子成为未来的编程大师?
  • Qt 中Json的构造和解析简单例子
  • CSS特性
  • springcloud:3.1介绍雪崩和Resilience4j
  • 实现定时器的两种方法:使用windows api定时器 和使用c++11/14 定时器
  • H5:图像标签和路径
  • AI学习(5):PyTorch-核心模块(Autograd):自动求导
  • Grid-Based Continuous Normal Representation for Anomaly Detection 论文阅读
  • FaceBook获取广告数据
  • Redis之十:Spring Data Redis --- CrudRepository方式
  • Spring重点记录
  • 代码覆盖率工具Gcovr和Fastcov的性能对比
  • css - flex布局实现div横向滚动
  • 关于在Ubuntu20.04环境下安装GRPC
  • 力扣601 体育馆的人流量
  • ubuntu20.04设置docker容器开机自启动
  • Kubernetes/k8s的核心概念
  • vue 前端预览 Excel 表
  • 【JS】生成N位随机数
  • 2024年FPGA可以进吗