Google代码覆盖率最佳实践

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

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

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

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

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

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

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

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

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

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

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

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

集成测试覆盖率也很重要

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

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

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

- END -


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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

88、K-Planes: Explicit Radiance Fields in Space, Time, and Appearance

简介 主页:https://sarafridov.github.io/K-Planes/ 图像使用一个平面表示,静态三维场景用三个平面表示,后续动态场景用三个平面加一维时间 t 表示,论文提出使用六个平面表示动静态场景,即静态场景占三个平面&#x…

【超详细文件操作(三)】C语言

作者:日出等日落 专栏:C语言 只有流过血的手指,才能弹出世间的绝唱。 ——泰戈尔 目录 1.文件的随机读写 1.1 fseek函数 1.1.1 下面使用fseek函数 1.2 ftell函数 1.3 rewind函数 …

Spring源码分析-Bean创建流程三

目录 一、 列举一些创建对象有哪几种方式 二、自定义BeanPostProcess生成代理对象 1、实战案例 2、源码分析 三、通过supplier创建对象 1、实战案例 2、源码分析 四、通过FactoryMethod创建对象 1、实战案例 2、源码分析 五、小总结 一、 列举一些创建对象有哪几种方…

作为一个女测试员是什么样的体验?

面试时极度紧张,语无伦次,觉得肯定没戏,最后却拿到高薪offer。 工作之后我听同事们讲,测试总监面试官并没打算要我,但身边的人都问他: 那个小姐姐什么时候来报道?... 于是在众人的期待的目光…

撮合交易系统简介

1 撮合交易系统简介 金融市场: 为了应对更高峰值的成交量,国内各金融机构,主要是交易所和银联、中心之间需求越来越多: 其中最重要的就是撮合系统: 系统拓扑图: 委托终端/柜台: 网关&#xff1…

一四三、人脸识别自动点赞、关注

文章目录脚本功能获取video当前播放帧图片将图片传到后台调用百度人脸识别接口拿到识别结果处理逻辑效果展示问题记录脚本功能 通过获取video当前播放帧图片,截图调用后台接口,再调用百度人脸识别拿到人脸信息(年龄、颜值、性别等&#xff09…

元宇宙医生虚拟形象提高远程医疗服务质量

与现实中不同,3D虚拟形象是由个人在数字空间中自由选择并进行扮演的。这种3D虚拟形象在元宇宙中的重要性越来越突出。 在元宇宙虚拟空间中,用户借助元宇宙3D虚拟形象就能与其他用户互动、交流并获得真实的沉浸式体验,因此能广泛融入各种生活、…

「解析」牛客网-华为机考企业真题 41-60

又是一年春招时,有幸收到华为自动驾驶算法岗,之前刷题不多,在此汇总下牛客网的真题,主要采用Python编写,个人觉得语言只是实现工具而已,并不是很关键,Python简洁易懂,更加适合算法工…

基于EB工具的TC3xx_MCAL配置开发06_PWM模块配置

目录 1.概述2. EB配置2.1 PWM->General2.2 PWM->Channel2.2.1 PWMChannel配置2.2.2 PwmChannelClass配置2.2.3 GTM通道选取2.3 MCU关联配置2.4 Port关联配置1.概述 本篇开始我们基于EB Tresos工具对英飞凌TC3xx系列MCU的MCAL开发进行介绍,结合项目经验对各MCAL外设的开…

Docker:关于 Dockerfile 编写优化的一些笔记整理

写在前面 分享一些 Dickerfile 构建镜像优化方式的笔记理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式&#…

【React全家桶】Flux与Redux

🎞️🎞️🎞️ 博主主页: 糖 -O- 👉👉👉 react专栏:react全家桶 🌹🌹🌹希望各位博主多多支持!!&a…

javaScript扫雷

文章目录一、准备工作1.图片2.html2.css3.js二、初始化数据1. 配置文件2.工具文件3.逻辑文件1.main函数2.init函数1.随机生成雷2.css添加三、完整代码1.html2.js3.css一、准备工作 1.图片 需要找三张图片 旗子的图片 炸弹的图片 爆炸的图片 2.html html文件夹新建一个html文…

区块链基本原理

区块链的起源 创始者介绍 姓名:中本聪(英语:SatoshiNakamoto),自称日裔美国人,日本媒体常译为中本哲史,此名是比特币协议及其相关软件Bitcoin-Qt的创造者,但真实身份未知。 中本聪于…

Chapter9.1:线性系统状态空间基础(上)

该系列博客主要讲述Matlab软件在自动控制方面的应用,如无自动控制理论基础,请先学习自动控制系列博文,该系列博客不再详细讲解自动控制理论知识。 自动控制理论基础相关链接:https://blog.csdn.net/qq_39032096/category_10287468…

解决Visual Studio设置C++标准 但是_cplusplus始终为199711

目录场景复现Visual Studio官方说明C标准对应表解决方案方法一 恢复__cplusplus宏方法二 使用_MSVC_LANG宏场景复现 我在VS2022偶然的一次测试C标准开发环境,发现无论我怎么修改C语言标准,输出的__cplusplus宏总是199711。 Visual Studio官方说明 链…

【C++】vector模拟实现及其应用

文章目录vector的介绍vector的使用及其实现vector的定义vector iterator 的使用vector空间增长问题vector的增删查改vector的介绍 vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素…

开源 Swallow 代码审计系统体验

最近在哔哩哔哩看 到Swallow 代码审计系统的宣传,发现功能比较适合我目前的工作需要,安装使用了一下,简单做了一个笔记,分享给有需要的朋友. 底层架构为蜻蜓编排系统,墨菲SCA,fortify,SemGrep,hema 项目地址:https://github.com/StarCrossPortal/swallow 安装与使用视频教程:ht…

hexo 搭建个人博客记录

看B站的程序羊的关于搭建hexo博客的方法自己搭了一个博客,链接是 手把手教你从0开始搭建自己的个人博客 |无坑版视频教程| hexo 下面就视频所讲做做笔记,以后可以回来查看,推荐小伙伴想搭建hexo博客的可以去看看这个视频。 1. 安装Node.js…

react项目路由组件懒加载和路由传值方式

项目实战 使用useRoutes配置路由&#xff0c;结合插槽配置用户登录检测。 用户登录成功进入login 直接系统主界面 路由模块抽离 整体代码外移 { path: "/admin", element: ( <Author name"admin"> <Index /> </Author> ), }, { path:…

「SAP ABAP」OPEN SQL(七)【GROUP BY | HAVING | ORDER BY】

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后端的开发语言A…