亮网络解锁器,解锁网络数据的无限可能 了解详情
写点什么

请善用覆盖率度量

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

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

关注

评论

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

建立自己的领导风格

石云升

领导力 28天写作 职场经验 管理经验 4月日更

C/C++ Linux后端进BAT的学习路线(腾讯官方认证)丨Linux服务器开发

Linux服务器开发

腾讯 后端 Linux服务器开发 BAT

【得物技术】前端工程师要知道的Nginx知识

得物技术

nginx 负载均衡 大前端 得物技术 知识

升级dubbo,小心default.version

捉虫大师

Java dubbo

为什么拥有云原生数据平台对电信公司很重要?

VoltDB

云原生 5G VoltDB 电信

入职字节跳动那一天,我哭了(蘑菇街被裁,奋战7个月拿下offer)

Java 编程 程序员 架构 面试

1800 美金?Apache ShardingSphere 带薪远程实习招募啦!| 2021 Google 编程之夏

京东科技开发者

Apache 开源 ShardingSphere

有趣的技术知识 3 | GitHub超火科学上网加速器!

Java_若依框架教程

翻墙 佛跳墙 科学上网

聪明人的训练(二)

Changing Lin

4月日更

Kafka 零拷贝模型

花一个无所

kafka 模型 简易架构图

睿象云智能告警平台cloudalert排班可以帮你做什么

睿象云

运维 告警 运维人生 智能告警 告警管理

如何抓住新社交风口下的音视频通讯大潮?

融云 RongCloud

区块链版「滴滴+Uber」,让出行带来收益

CECBC

移动互联网

架构实战营-模块一作业

西伯利亚鼯鼠

架构实战营

Golang map 模型

花一个无所

源码分析 模型 Go 语言 简易架构图

一体化智能安全防御 京东云星盾安全加速正式发布

京东科技开发者

互联网 网络安全

数字货币,已成为理解现代经济不可排斥的一个因素

CECBC

数字经济

基于区块链技术的建筑供应链金融创新

CECBC

区块链

给你看一个开发和运维的效率加速器!

BinTools图尔兹

DevOps 运维 运维工程师 dba 数据库管理工具

Golang interface 模型

花一个无所

源码分析 模型 Go 语言 简易架构图

架构实战营模块一作业

日照时间长

架构实战营

后端选择java,还是python?

cdhqyj

Java Python 后端 计算机 语言

Tidb模型

花一个无所

架构 TiDB 简易架构图

Golang Map 模型

花一个无所

模型 源码剖析 Go 语言 简易架构图

3.2 Go语言从入门到精通:包管理工具之GOPATH

xcbeyond

Go 语言 4月日更

漫画Nginx的subfilter

运维研习社

nginx 4月日更

找到适合您的数字化转型策略的3个步骤

龙归科技

数字化转型 企业

为什么要用 Redis 实现事务的 ACID

escray

redis 学习 极客时间 Redis 核心技术与实战 4月日更

Golang channel 模型

花一个无所

源码分析 模型 Go 语言 简易架构图

关于Object,你所必须知道的!

Chalk

大前端 Object 4月日更

大数据计算生态之数据存储

小舰

4月日更

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