Google代码覆盖率最佳实践

news2024/11/24 4:21:13

软件质量保障: 所寫即所思|一个阿里质量人对测试的所感所悟。

谷歌一直倡导的领域之一是使用代码覆盖率数据评估风险并识别测试中的真空。然而,代码覆盖率的价值一直是个争议的话题。每次聊到代码覆盖率时,似乎都会引发无尽的争论。由于大家固守自己阵营,所以每次争论都无疾而终。本文引导大家找到共同点,以便能够切实地使用覆盖率信息。我们提出了代码覆盖率的最佳实践,以有效地处理代码健康问题。

代码覆盖率有益于改进研发流程

它虽不是测试质量的完美度量,但它提供了一个合理、客观、行业标准的指标,并提供可操作的数据。它不需要大量的人为干预,适用于所有产品,并且行业中有大量的工具可用于大多数语言。你必须把它视为一种间接的度量,由于它将大量的信息压缩成一个数字,因此不能把它当做唯一度量指标。相反,应该与其他技术一起使用,以创建更全面的测试评估。

使用代码覆盖率会减少缺陷?

关于仅使用代码覆盖率是否会减少缺陷,这是一个开放性问题,但我们的经验表明,增加代码覆盖率的努力通常会导致工程卓越文化的变化,从长远来看,会减少缺陷。例如,注重代码覆盖率的团队倾向于将测试优先,倾向于在产品设计中嵌入可测试性代码,以便更少的工作量实现测试目标。这反过来又导致更高质量的代码编写(更模块化、更干净的 API 契约、更易于管理的代码审查等)。

高代码覆盖率并不保证测试覆盖的高质量

把注意力放在尽可能让这个数字接近100%,会导致一种虚假的安全感。这也可能是浪费机器运算能力,并且在低价值的测试中创建技术债。由于缺少测试而将糟糕的代码推向生产环境可能发生的原因是,要么是因为(a)你的测试没有覆盖到某个代码路径,这是一种很容易通过代码覆盖率分析来识别的测试间隙;要么是因为(b)你的测试没有覆盖到某个区域的特定边界情况,尽管该边界已经有了代码覆盖,但这种情况很难或不可能通过代码覆盖率分析来捕捉。代码覆盖率并不能保证覆盖到的行或分支被正确地测试了,它只保证这些行或分支已被测试执行过。要谨慎考虑只是为了增加覆盖率而复制/粘贴测试,或者添加实际价值很小的测试来达到数字要求。评估你是否足够地执行了测试覆盖到的代码行,并且是否对失败进行了充分的断言,更好的技术是突变测试。

低的代码覆盖率没有通过充分自动化测试

这增加了我们将糟糕的代码推向生产环境的风险,因此应该引起注意。事实上,代码覆盖率数据的很多价值在于突出显示未覆盖的内容,而不是已经覆盖的内容。

并不存在适用于所有产品的“理想代码覆盖率值”

对一组代码所需要的测试程度应该是以下三个因素共同决定的函数:(a) 代码的业务影响/重要性;(b) 需要多频繁地接触/更改代码;(c) 代码预计的寿命,其复杂性和领域模型。我们不能要求每个团队都必须有x%的代码覆盖率;这是一个最好由产品所有者以领域特定的知识做出的业务决策。任何x%代码覆盖率的要求都应该伴随着基础设施投资,以使测试变得容易,例如将工具集成到开发人员工作流程中。

集成测试覆盖率也很重要

单元测试覆盖率只是解决问题的一部分。集成测试覆盖率也很重要。在你的pipelines(包括单元测试和集成测试)中覆盖所有源代码的情况至关重要,因为这可以提供一个更大的视角,让你了解测试自动化漏测了多少代码,而这些代码可能会在生产环境中出现问题。需要注意的一点是,虽然单元测试执行的代码与被评估的代码之间有很高的相关性,端到端测试的覆盖率则是偶然的。但集成测试的代码覆盖率可以帮助你避免这样的情况。

应该对未达到代码覆盖率标准的部署进行Block

我们应该对未达到代码覆盖率标准的部署进行Block。大家应该讨论哪种block机制更有效。例如:对所有代码的覆盖率进行block,还是仅对增量代码的覆盖率进行block;以特定的硬编码代码覆盖率进行block,还是以与之前版本的差异为基础进行block,只关注特定部分的代码。然后,团队应对覆盖率标准达成共识。当代码覆盖率下降时则违反了这一标准,应该阻止代码提交和部署生产环境。

- END -


关注 软件质量保障,与质量君一起学习成长、共同进步,做一个职场最贵Tester!

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

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

相关文章

微信小程序开发 | 小程序开发框架

小程序开发框架7.1 小程序模块化开发7.1.1 模块7.1.2 模板7.1.3 自定义组件7.1.4插件7.2 小程序基础样式库—WeUI7.2.1 初识WeUI7.2.2【案例】电影信息展示7.3 使用vue.js开发小程序7.3.1 初识mpvue7.3.2 开发工具7.3.3 项目结构7.3.4【案例】计数器7.4 小程序组件化开发框架7.…

Ztree树状的处理

1.用一个div进行包裹ztree结构&#xff0c;引用相关的js代码和css样式&#xff0c;这里用的样式是awesome.css 所引用的js文件&#xff0c;css文件可以在网上下载&#xff08;这里所用到的jquery-ztree文件放在网盘了&#xff09; <ul id"tree" class"ztre…

企业即时通讯软件开发基本功能有哪些?

即时通讯是基于互联网技术的新型交流沟通方式&#xff0c;是目前最流行的通讯方式&#xff0c;广泛的应用市场使得各种各样的即时通讯软件系统也层出不穷&#xff0c;企业即时通讯就是其中的一种延伸。是一种面向企业终端使用者的网络营销、网络沟通和内容管理的工具服务&#…

mysql基础安装以及问题

mysql 基础安装以及问题安装MySQL8.0的安装&#xff1a;MySQL5.7 版本的安装、配置卸载服务的启动与停止图形化工具推荐安装 官网&#xff1a;https://www.mysql.com MySQL8.0的安装&#xff1a; 这里是写你直接要安装的目录&#xff1a; 之后配置mysql8.0 注意&#x…

不会注册ChatGPT?4个国内网站让你尽情体验

最近火出圈的科技新词非“ChatGPT”莫属了。 但是由于ChatGPT注册起来比较困难&#xff0c;我到现在都还学不会如何注册.... 但是&#xff01;世上无难事&#xff01;只要有心人&#xff01; 我千辛万苦终于找到几个ChatGPT平替的网站了。 AI中文智能对话 地址&#xff1a;…

目标检测入门:发展历史

预备知识 分类classification 输出:物体的类别 评估方法:准确率 定位location 输出:方框在图片中的位置(x,y,w,h) 评估方法:交并比IOU 定位的解决思路: 思路一:看做回归问题 看做回归问题,我们需要预测出(x,y,w,h)四个参数的值,从而得出方框的位置 成为class…

数字证书的相关专业名词(下)---OCSP及其java中的应用

一、前言 上篇文章我们了解了根证书和校验证书有效性中的一个比较重要的渠道–CRL&#xff0c;但是CRL有着时间延迟&#xff0c;网络带宽消耗等缺点&#xff0c;本篇文章我们了解另一种更高效也是目前被广泛应用的校验证书有效性的另一种方式–OCSP&#xff0c;并且我会结合ja…

4年测试工程师经历,下一步转开发还是继续测试?

​测试四年&#xff0c;没有积累编程脚本能力和自动化经验&#xff0c;找工作时都要求语言能力&#xff0c;自动化框架。感觉开发同事积累的经历容易找工作。下一步&#xff0c;想办法转开发岗还是继续测试&#xff1f;&#xff1f;&#xff1f;正常情况下&#xff0c;有了四年…

matlab图像处理系列:图片圈数识别+编号标记位置

matlab图像处理系列&#xff1a;图片圈数识别编号标记位置一、app界面介绍二、实现过程step1图像二值化step2 图像close 做差step3 像素阈值处理step4 清除小区域step5 识别联通区域 并在原图上标记三、项目分享一、app界面介绍 读取图片按钮&#xff1a;使用ui交互工具&#x…

单词管理系统【GUI/Swing+MySQL】(Java课设)

系统类型 Swing窗口类型Mysql数据库存储数据 使用范围 适合作为Java课设&#xff01;&#xff01;&#xff01; 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 本系统源码地址&#xff1a;https://download.csdn.net/download/qq_50954361/87682568 更多系统资源库…

Prometheus - Grafana 监控 MysqlD Linux服务器 详细版

readme 其实上一篇文章已经把如何操作&#xff0c;基本上是写全了&#xff08;因为是从本文精炼出来的&#xff09;本文可能更多的是补充一些关于 Prometheus 和 Grafana 的理论 &#xff0c;关系等。 操作 标签&#xff1a;是必看&#xff0c;要操作的。 非必要看 标签&…

DP7416国产192K数字音频接收芯片兼容替代CS8416

目录192K 数字音频应用DP7416简介芯片特性192K 数字音频应用 采样率192khz&#xff0c;能将192,000hz以下的频率都录下来&#xff0c;而且对声波每秒连续采样192,000次。在回放的时候&#xff0c;这192,000个采样点按顺序播放&#xff0c;从而还原原来的声音。   过采样技术除…

微信小程序开发 | 综合项目-点餐系统

综合项目-点餐系统8.1 开发前准备8.1.1 项目展示8.1.2 项目分析8.1.3 项目初始化8.1.4 封装网络请求8.2 【任务1】商家首页8.2.1 任务分析8.2.2 焦点图切换8.2.3 中间区域单击跳转到菜单列表8.2.4 底部商品展示8.3 【任务2】菜单列表8.3.1 任务分析8.3.2 折扣信息区8.3.3 设计菜…

关系数据库及其设计

目录 一、关系数据库 二、关系数据库设计 1、需求分析 2&#xff0e;概念结构设计 3&#xff0e;逻辑结构设计 4&#xff0e;数据库表的优化与规范化 5、规范化的大学数据库 6、数据库中表间关系 三、关系数据库的完整性 1&#xff0e;实体完整性约束&#xff08;PRI…

51电动车报警器.md

1.项目接线 接线示意图和实物图 示意图&#xff1a; 实物图&#xff1a; 信号传输路线 路线1&#xff1a; 433遥控信号 ——> 433接收模块D0引脚以及D1引脚 ——> 单片机P1^2引脚以及P1^3引脚 ——> 单片机P1^1引脚 ——> 继电器IN引脚 ——> 继电器COM口和NO口…

安全防御 --- 防火墙高可靠技术

防火墙高可靠技术&#xff08;双机热备&#xff09; VRRP&#xff1a;负责的单个接口的故障检测和流量引导。每个VRRP备份组拥有一个虚拟的IP地址&#xff0c;作为网络的网关地址&#xff1b;在VRRP主备倒换时通过发送免费的ARP来刷新对接设备的MAC地址转发表来引导流量。VGMP&…

SSVEP解码算法 - 多变量同步指数(MSI)

1 算法来源 该算法来自电子科技大学张杨松博士,针对该算法的计算在张博士的博士论文中有详细介绍,有兴趣的读者可以下载阅读,本文重点在对该方法的代码实现。Zhang, Yangsong, et al. “Multivariate synchronization index for frequency recognition of SSVEP-based brain…

Mysql 8 VS Mariadb 10.6 他们有多不一样 (声译)

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

获取List集合中的最大值和最小值

实现获取List集合中的最大值和最小值共有以下两种方式&#xff0c;根据自己的场景选择合适的方法。 目录 Collections 1、String、Integer、Double类型 2、对象类型 排序 1、Integer类型 2、 基本排序方式&#xff1a; Collections 1、String、Integer、Double类型 当…

如何使用Edge Copilot

在ChatGPT红得发紫年代&#xff0c;也应该了解下微软microsoft edge浏览器中的Copilot。 通过这个Copilot - 副驾驶&#xff0c;Edge浏览器发生了革命性变化。 借助AI副驾驶强大的功能&#xff0c;在Edge浏览器中可以轻松完成AI聊天、AI写作、AI网页分析&#xff0c;和AI绘图…