【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

请善用覆盖率度量

  • 2008-11-17
  • 本文字数:914 字

    阅读完需:约 3 分钟

Christian Gruber 就 TDD 的代码覆盖率度量方面阐明了其态度。他谈到了代码覆盖率度量会告诉你什么以及不会告诉你什么,TDD 是如何适应它的,同时还提到了我们如何能更好地使用代码覆盖率度量。
对于采用良好的 TDD 开发的应用来说,其代码覆盖率通常都会很高(>80-90%)。但另一方面,代码覆盖率高并不意味着应用构建在良好的 TDD 上,甚至可能都没有采用 TDD。再进一步,代码覆盖率高就表示你的应用经过了彻底的测试么?

Christian Gruber 对此进行了讨论,这很大程度上是由 Kevin Pang 就该主题所发表的另一篇博文引起的。打开天窗说亮话,Gruber 的主要观点是 TDD 的支持者们并不建议将代码覆盖率作为“一个真正的度量”,它在一定程度上是有用的,但只有与其他反馈结合使用时其作用才能发挥出来。他抨击了 Pang 的观点:“(Pang)100% 的代码覆盖率是测试爱好者的终极追求”,他说:“(Gruber)高代码覆盖率是经过良好测试的系统的想要拥有的一个属性,但其目标却是打造一个经过完全和充分测试的系统”。

他就代码覆盖率、TDD 及“充分的测试”提出了以下 6 点主张:

  1. 代码覆盖率只在编写良好的测试中才有意义。如果测试没有价值,那么它也不会对你有什么帮助。
  2. 如果测试通过,我们应该根据行 / 分支来统计代码覆盖率。
  3. 代码覆盖率可以指出测试不充分的地方,但无法保证测试的充分性。
  4. 测试驱动的代码最可能拥有良好的覆盖率。
  5. 测试驱动的代码将会得到充分的测试,因为代码编写者编写了构成代码需求的所有测试。
  6. 覆盖充分的代码不一定是得到充分测试的代码。

接下来 Gruber 简要概述了 TDD(已经成为一种设计技术,而不仅仅是一个测试工具)如何有助于彻底的测试。他进一步强调“代码覆盖率(在 TDD 的上下文中)有助于你发现某些遗漏的东西,但仅此而已”,在这一点上他与 Pang 已经达成了共识。

早就有人对滥用代码覆盖率度量提出了警告,但我们仍然要不断重复这种警告,因为有越来越多的公司开始采用 TDD(恭喜啊!),他们很容易陷入“覆盖率圣经”这种反模式中。

请查看 :blog"> Jason Rudolph 最近发表的一篇博文中的“Pragmatic Use of Code Coverage Analysis”一节以了解这方面的更多信息,它就该主题援引了很多专家的观点。

查看英文原文: Careful With Your Coverage Metrics

2008-11-17 08:28515
用户头像

发布了 88 篇内容, 共 258.7 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

react源码解析4.源码目录结构和调试

全栈潇晨

React Hooks react源码

OpenKruise v0.9.0 版本发布:新增 Pod 重启、删除防护等重磅功能

阿里巴巴云原生

容器 运维 云原生 k8s

致恰达耶夫,致鸿蒙

脑极体

微博评论的高性能高可用计算架构设计

唐高为

你们公司的数据库出过问题么?

escray

学习 极客时间 朱赟的技术管理课 6月日更

【Flutter 专题】114 图解自定义 ACEProgressPainter 对比进度图

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 6月日更

持续测试 | 让测试更自由:在 CODING 中实践自动化执行用例

CODING DevOps

DevOps 自动化测试 持续测试

你真的了解 “开源” 么?请查收【保姆级】开源百科

程序员鱼皮

Java c++ Python GitHub 开源

HarmonyOS 2正式发布 硬件生态品牌HarmonyOS Connect一同亮相

科技汇

Redis数据结构

邱学喆

数据库 redis 跳跃表

Dubbo SPI

青年IT男

dubbo

Hello Python! 第一天学 Pyhton 语言

在即

6月日更

分治(详解残缺棋盘 —— Java代码实现)

若尘

算法 分治 java代码 6月日更

手把手教你在IDEA中配置Maven

打工人!

Java maven 6月日更

ARTS- 日常打卡5

pjw

“扯皮”终结者,区块链帮农民工计薪水

CECBC

深圳首辆数字人民币主题观光巴士亮相

CECBC

BZZ节点挖矿系统搭建,BZZ矿机分币系统

🏆大势所趋,迈向认识WebRTC的第一步,加油!

洛神灬殇

WebRTC RTC RTC征文大赛 6月日更

【Vue2.x 源码学习】第二篇 - Vue的初始化流程

Brave

源码 vue2 6月日更

关于第四次财富狂潮的思考,区块链如猛虎出笼?

CECBC

React Hooks - 如何安全地使用state

蛋先生DX

大前端 React React Hooks JavaScrip 6月日更

面试系列-3 限流场景实践

李阿柯

php lua redis 面试 限流算法

VSPD9.0基础 建立一对互联的虚拟串口,进行串口通信的测试

万里无云万里天

IoT 6月日更 VSPD

面试系列-2 redis列表场景分析实践

李阿柯

php 面试 redis cluster

情指勤一体化指挥调度平台搭建,情报研判分析系统搭建

k8s 插件管理工具之krew使用

雪雷

6月日更

Spring Boot FatJar类加载机制简要分析

luojiahu

Spring Boot 类加载 ClassLoader FatJar

我对技术潮流的一点看法

Phoenix

基于 BDD 理论的 Nebula 集成测试框架重构(上篇)

NebulaGraph

5分钟速读之Rust权威指南(十五)

wzx

rust

请善用覆盖率度量_Java_Mike Bria_InfoQ精选文章