写点什么

请善用覆盖率度量

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

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

关注

评论

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

炸了!阿里又一力作上传GitHub,Spring Cloud Alibaba差距不止一点

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

诧异!GitHub上竟有阿里专家用800页笔记,只讲MySQL调优而且火了

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

Filecoin算力矿池挖矿系统开发案例

薇電13242772558

区块链 IPFS

Flutter IM跨端架构设计和实现

OpenIM

网络协议之NAT穿透原理

Linux服务器开发

网络协议 p2p NAT Linux服务器开发 网络穿透

GitHub获120w+star的JDK源码剖析手册,竟出自Alibaba高管之手?

Java 程序员 架构 面试 Alibaba

京东内部“绝密”SpringCloud实战手册,GitHub列为首推

Java 程序员 架构 面试 计算机

全国基于区块链数据知识产权质押贷款落地杭州

CECBC

openGauss X ShardingSphere,分布式方案的另一种最佳实践

SphereEx

数据库 开源

2021全球高性能云计算创新大赛,9月15日重磅启动!

亚马逊云科技 (Amazon Web Services)

云计算

实时数据引擎系列(五): 关于 SQL Server 与 SQL Server CDC

tapdata

一文揭示,DevOps与企业数字化究竟有何联系?

飞算JavaAI开发助手

DevOps 自动化 软件工程

GitHub星标70K阿里大佬手写的Spring Boot实战手册

Java架构师迁哥

The Data Way Vol.4|开源是创造软件诸多方法中最好的一种形式

SphereEx

数据库 开源

由于太全被各大厂要求Github连夜下架

Java架构师迁哥

如何高效学习 Kubernetes 知识图谱?

阿里巴巴云原生

Kubernetes 容器 云原生

探秘 JavaScript 世界的神秘数字 1.7976931348623157e+308

清秋

JavaScript 大前端 浮点数 引航计划 IEEE754

中原银行分布式批处理调度平台介绍

中原银行

分布式 批处理 中原银行

北鲲云超算平台为何能够被高性能计算行业认可?

北鲲云

AI应用说 | 「虫口夺粮」的害虫识别还是牛场24小时无人监控,AI+农业话题咱们唠一唠

百度大脑

网络攻防学习笔记 Day137

穿过生命散发芬芳

网络基础 9月日更

云备份和恢复的优缺点

云计算

NoCode 热身系列:实现一个任务跟踪与管理系统(上)

亚马逊云科技 (Amazon Web Services)

html 自动驾驶 ios

NoCode 热身系列:实现一个任务跟踪与管理系统(下)

亚马逊云科技 (Amazon Web Services)

ios android 数据库

开源即巅峰!阿里首次分享:Java架构师全栈“成长笔记”

Java架构师迁哥

牛客网论坛最具争议的Java面试成神笔记,看过的人都已经成功进入大厂

Java 编程 程序员 架构 面试

NoCode 热身系列:你准备好了吗?

亚马逊云科技 (Amazon Web Services)

人工智能 数据库

NoCode 实战 | 零代码应用开发,轻松搞定任务跟踪管理难题(上)

亚马逊云科技 (Amazon Web Services)

人工智能 android

Vue进阶(幺幺贰):package-lock.json 文件解析

No Silver Bullet

Vue 9月日更

如何获取系统错误报告--Bug Report

Changing Lin

9月日更

JavaScript进阶(二)上

Augus

JavaScript 9月日更

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