写点什么

请善用覆盖率度量

  • 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:28722
用户头像

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

关注

评论

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

GitLab 如何降级安装?

极狐GitLab

覆盖30个省市自治区万余家医疗机构,原生鸿蒙助力打造智慧医疗便利体验

最新动态

快递鸟单号识别API接口代码操作流程

快递鸟

快递

快递鸟物流跟踪API代码参数接入流程

快递鸟

快递物流

2024年AI办公工具API:优化工作流程的智能解决方案

幂简集成

API

南京大学 鲲鹏昇腾科教创新孵化中心揭牌,引领高校科研生态新模式

极客天地

淘宝订单信息获取接口,淘宝订单信息获取API

tbapi

淘宝API接口 淘宝店铺订单接口 天猫店铺订单接口 淘宝店铺订单API

更经济实惠的SD-WAN组网

Ogcloud

SD-WAN 企业组网 SD-WAN组网 SD-WAN服务商 SDWAN

如何使用PHP开发API接口?

科普小能手

php API php扩展 API接口 API 测试

《实力见证,卓越前行 ——伊克罗德信息荣获 Amazon Redshift Delivery 认证》

伊克罗德信息科技

大数据 Amazon

【问卷调研】HarmonyOS SDK开发者社区用户需求有奖调研

HarmonyOS SDK

GitLab 出现 500错误怎么解决?

极狐GitLab

gitlab

第74期 | GPTSecurity周报

云起无垠

5分钟搞懂 Golang 数据库连接管理

俞凡

golang

语音 AI 革命:未来,消费者更可能倾向于与 AI 沟通,而非人工客服

RTE开发者社区

区块链NFT项目开发流程

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

2024-11-13:求出所有子序列的能量和。用go语言,给定一个整数数组nums和一个正整数k, 定义一个子序列的能量为子序列中任意两个元素之间的差值绝对值的最小值。 找出nums中长度为k的所有子

福大大架构师每日一题

福大大架构师每日一题

MES系统助力中小企业数字化转型

万界星空科技

数字化转型 生产管理系统 mes 万界星空科技 中小企业数字化转型

【JIT/极态云】技术文档--审批事件

武汉万云网络科技有限公司

怎么在线画用户旅程图?分享10个用户旅程图模板!

职场工具箱

职场 产品经理 在线白板 绘图工具 用户旅程图

Python 如何根据给定模型计算权值

不在线第一只蜗牛

Python 深度学习

比 Copilot 快两倍以上!在我的开源项目 AI Godot 桌宠中用通义灵码解决问题

阿里云云效

阿里云 云原生

鸿蒙网络编程系列47-仓颉版UDP客户端

长弓三石

DevEco Studio 开发实例 HarmonyOS NEXT 网络与连接

【JIT/极态云】技术文档--模型事件

武汉万云网络科技有限公司

公链数字钱包开发与加密钱包App原生开发

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

尝鲜智能体,今年双十一“快递100”用上混元大模型

极客天地

比 Copilot 快两倍以上!在我的开源项目 AI Godot 桌宠中用通义灵码解决问题

阿里巴巴云原生

阿里云 云原生

哇喔!20种单例模式的实现与变异总结

威哥爱编程

Java 设计模式 单例模式 JavaEE

Serverless 微服务治理神器: 阿里云 SAE 全链路灰度揭秘

阿里巴巴云原生

阿里云 Serverless 云原生

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