写点什么

请善用覆盖率度量

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

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

关注

评论

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

前端 “一键换色“ 的几种方案

CRMEB

社交电商如何规避传销风险

源字节1号

软件开发

石油储运生产 2D 可视化,组态应用赋能工业智慧发展

一只数据鲸鱼

数据可视化 数字孪生 组态 石油开采

“操作系统的「冷板凳」要坐多久?”万字长文解读16年开源人的坚持

OpenAnolis小助手

Linux 开源 操作系统 坚持 龙蜥社区

边缘工业协议网关软件Neuron正式开源,连接海量异构工业设备

EMQ映云科技

开源 物联网 IoT mqtt emq

2022年医疗+AI,将会如何蓄力发展?

易观分析

医疗AI

Java 并发编程——AQS 源码学习

爱好编程进阶

Java 程序员 后端开发

网站开发进阶(三十二)HTML5之FileReader的使用

No Silver Bullet

html5 5月月更 FileReader

大数据培训MySQL 索引B+Tree

@零度

大数据

Alluxio 2.8版本重磅发布!3大提升抢先打开数据新世界

Alluxio

分布式缓存 数据管理 Alluxio 大数据 开源

比心云平台基于阿里云容器服务 ACK 的弹性架构实践

阿里巴巴云原生

阿里云 容器 云原生 客户案例 阿里云容器服务ACK

2013年,我有点喜欢编程了

勇哥java实战分享

SpringBoot集成开源IM框架MobileIMSDK,实现即时通讯IM聊天功能

JackJiang

网络编程 即时通讯 IM TCP协议

构建面向特征工程的数据生态 ——拥抱开源生态,OpenMLDB全面打通MLOps生态工具链

第四范式开发者社区

人工智能 机器学习 数据库 特征平台 特征工程

全面解析企评家网站功能

企评家

企业评价 企评家 企业成长性评价 企业查询

到底什么是企业应用现代化?

Daocloud 道客

云原生 应用现代化

【Python】此集合非彼集合

謓泽

5月月更

呵呵,JavaScript 真好玩(苦笑脸)

java培训定时任务的理解与实战教学

@零度

定时任务 JAVA开发

web前端培训interface和type的区别分析

@零度

typescript 前端开发

Kubernetes 1.24 - 走向成熟的 Kubernetes

Daocloud 道客

Kubernetes 云原生 容器编排

python进阶-装饰器

AIWeker

Python 人工智能 5月月更

java IO流

爱好编程进阶

Java 程序员 后端开发

Java 将字节数组转化为16进制的多种方案

爱好编程进阶

程序员 后端开发

解析Java-throw抛出异常详细过程

华为云开发者联盟

Java 开发语言 throw throws 系统自动抛异常

Git 常用命令

平凡人生

Open Harmony移植:build lite配置目录全梳理

华为云开发者联盟

HarmonyOS Open Harmony移植 Open Harmony build lite配置

百亿级数据同步,如何基于 SeaTunnel 的 ClickHouse 实现?

Apache SeaTunnel

Apache 大数据 开源 DolphinScheduler workflow

PingCode Flow技术架构揭秘

PingCode研发中心

Java Swing图形化编程之JTextArea

爱好编程进阶

Java 程序员 后端开发

Java 之基础程序设计

爱好编程进阶

Java 程序员 后端开发

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