为什么那么看重代码覆盖率?

陈哥聊测试
• 阅读 14

大家好,我是陈哥。

我看到有不少读者给我留言吐槽代码覆盖率很像自欺欺人的数字游戏,低了怕影响质量,高了又怕陷入“为了覆盖而覆盖”的无效内卷。明明功能测得差不多了,为啥非要揪着这个百分比不放?

今天,我们就一起谈谈为什么那么看重代码覆盖率

一、测试人员的经验和责任没法量化

很多人觉得,测试用例写得够不够,全靠测试人员的经验和责任心。这话没错,但经验和责任心是主观的,没办法量化。

你说你测得全,怎么证明?你说这个功能没问题,依据在哪?这时候,代码覆盖率就是最客观的标尺。

代码覆盖率,简单说就是你的测试用例到底执行了多少行代码。

比如一段100行的代码,测试用例跑下来,只执行了60行,那覆盖率就是60%。剩下的40行,就是测试的盲区。这些盲区里,可能藏着边界条件、异常场景,甚至是逻辑错误。

有人说,覆盖率高不代表代码质量好。这话是对的,但反过来想,覆盖率低的代码,质量就会好了吗?覆盖率就像考试的及格线,考60分不一定学习好,但连60分都考不到,肯定算不上合格。

对于团队而言,并不需要靠覆盖率来证明代码完美,只需要用它来判断测试有没有做到位。至少,能让我们把看得见的漏洞先补上。

为什么那么看重代码覆盖率?

二、提高代码覆盖率不是测试一个人的事

现在很多团队都在推敏捷开发,讲究快速迭代、小步快跑。但快不等于乱,迭代不等于敷衍。

我发现一个很有意思的现象:重视代码覆盖率的团队,研发流程往往更规范;反之,流程混乱的团队,覆盖率通常也低得可怜。

为什么会这样?因为要提高代码覆盖率,不是测试一个人的事,而是需要开发和测试的配合。

开发写代码的时候,要考虑可测试性,不能写一堆耦合度高、逻辑混乱的代码,否则测试根本没办法设计用例。测试设计用例的时候,要对照着代码逻辑,把每个分支、每个条件都覆盖到,不能只测主流程。

举个例子,我们团队以前开发新功能,都是开发写完就扔给测试,测试发现Bug就打回去。

后来我们规定,所有新功能提交前,开发必须先做单元测试。这么做了之后,我们团队的效率明显提升,测试环节反馈的低级 Bug 数有所下降,来回返工的时间大幅减少。大家能把精力集中在核心功能打磨上,版本上线的稳定性也跟着提高。

如果大家对禅道研发团队流程感兴趣,可留言【流程1223】领取。

因为开发在写单元测试的时候,其实是在自己检查代码逻辑。

很多低级错误,比如变量名写错、条件判断颠倒,在这个阶段就被发现了,根本轮不到测试去提Bug。而且,单元测试写得好,后续集成测试和系统测试的效率也会提高。

这就是覆盖率的价值,它能逼着整个研发流程往更规范的方向走。

三、代码覆盖率降低长期维护成本

很多人算不清一笔账:觉得花时间提高覆盖率,是增加了研发成本。

但他们忘了,线上Bug的修复成本,是研发阶段的几十倍甚至上百倍。

一个小Bug,研发阶段改可能只需要1小时,到了测试阶段可能需要1天,到了线上,可能需要一个团队折腾好几天,还要面对用户投诉、数据回滚、赔偿损失等一堆麻烦事。

而重视覆盖率的团队,虽然在研发阶段多花了一点时间,但长期来看,维护成本会大大降低。

因为覆盖率高的代码,意味着测试更充分,潜在的Bug 更少。后续迭代的时候,开发可以放心地修改代码,不用担心改了这一处,会触发另一处的隐藏Bug。

当然,我也不是说覆盖率越高越好。有人追求100%的覆盖率,为了覆盖一行无关紧要的代码,写一堆复杂的测试用例,这就是走向极端了。

为什么那么看重代码覆盖率?

测试代码覆盖率更像是一种研发态度,代表着团队对代码质量和用户的负责。

我见过太多因为偷工减料而付出的代价,也正是因为这些经历,我才一直坚持在代码质量这件事上,容不得半点马虎。

点赞
收藏
评论区
推荐文章
美凌格栋栋酱 美凌格栋栋酱
11个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
企业级飞速低代码 | 这5个理由让软件架构师积极拥抱低代码
从避免技术债务到简化和整合业务流程到解锁单体系统,低代码提供了速度和灵活性。软件开发者和架构师曾经有理由对低代码技术持怀疑态度,但今天,许多成熟的低代码平台使敏捷开发团队能够提高生产力、增加质量、并频繁部署。开发人员使用低代码技术来构建应用程序、客户体验、门户网站、搜索体验、工作流集成、数据管道、数据流、仪表板、测试自动化、机器学习模型和其他解决方案。"低代
Wesley13 Wesley13
4年前
jacoco+maven 初次使用覆盖率工具
工作要搞覆盖率测试,看到公司平台上用的jacoco,就找了网上的demo自己跑了一下。一.覆盖率测试是干什么的http://www.openopen.com/lib/view/open1472174544246.html  1.用来看看类/方法/判定中的语句的使用情况,防止废弃无用的代码和错误代码出现。  2.用来和需求覆盖做一个对照,做
iOS代码覆盖率(一)-全量覆盖率自动化实践
这是一个统计基于Swift&ObjectiveC工程的代码覆盖率的自动化脚本。之所以做成Pod,是便于更好的复用,该Pod只包含了收集生成代码覆盖率的脚本。整体比较简单方便。
云原生引擎单元测试实践
快速迭代的开发工作中如何提高代码质量一直是团队痛点,特别是没有测试支持的开发团队。合理的使用单元测试,并关注单元测试通过率、代码覆盖率可以有效提高代码质量。今天就来讲讲云原生引擎单元测试实践。
Wesley13 Wesley13
4年前
Jacoco在eclipse上的集成使用
随着敏捷开发的流行,编写单元测试已经成为业界共识。但如何来衡量单元测试的质量呢?有些管理者片面追求单元测试的数量,导致底下的开发人员投机取巧,编写出大量的重复测试,数量上去了,质量却依然原地踏步。相比单纯追求单元测试的数量,分析单元测试的代码覆盖率是一种更为可行的方式。JaCoCo(JavaCodeCoverage)就是一种分析单元测试覆盖率的工具,使
Stella981 Stella981
4年前
Parasoft cpptestcli 指令行参数配置
ParasoftCtest  是款功能非常强大的自动化测试工具,能有效提高软件开发效率和代码质量。功能特点如下:    静态代码分析和编码策略实施;  自动代码审查的图形界面和进度跟踪;  自动化的单元测试和回归测试;  代码覆盖率分析,集成通过应用层覆盖跟踪从单元级测试;  结合静态分析、单元测试、代码评审和其他
Stella981 Stella981
4年前
C++开源代码覆盖率工具OpenCppCoverage介绍(Windows)
关于代码覆盖率统计工具,Linux平台下,gcc内置支持gcov,通过编译时加参数选项,进行代码插桩,从而实现代码覆盖率。在Windows平台下,早在几年前,我还没找到特别好用又开源的覆盖率工具,所以以前公司是自己实现了一套,使用起来也不是很方便。最近又遇到同样的问题,不过非常幸运的是,一款开源的Windows平台的C代码覆盖率工具出现了在我的面前:
在Bamboo上怎么使用iOS的单元测试 | 京东云技术团队
本教程将使用北汽登录模块为例,一步一步和大家一起搭建单元测试用例,并在Bamboo上跑起来,最终测试结果和代码覆盖率会Bamboo上汇总。
陈哥聊测试 陈哥聊测试
9个月前
自动化会提高测试覆盖率,那测试覆盖率是什么
测试覆盖率是测试质量的度量标准之一,告诉我们测试了多少代码。
陈哥聊测试
陈哥聊测试
Lv1
资深敏捷测试顾问,致力于测试自动化和DevOps等的实践和研究。
文章
90
粉丝
0
获赞
2