写点什么

请善用覆盖率度量

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

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

关注

评论

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

后台图库上传功能

CRMEB

实至名归!九章云极DataCanvas公司荣获智能制造领域多项殊荣

九章云极DataCanvas

智能制造

C#/VB.NET 从PDF中提取表格

在下毛毛雨

C# .net PDF 提取表格

TiKV & TiFlash 加速复杂业务查询丨TiFlash 应用实践

PingCAP

TiDB

微信小程序获取用户手机号码

源字节1号

微信小程序 软件开发 前端开发 后端开发

深入理解MySQL事务MVCC的核心概念以及底层原理

jiangxl

MySQL 事务 MVCC dba 签约计划第三季

浅聊缓存函数

掘金安东尼

前端 8月月更 高阶函数

Java网络编程IO模型 --- BIO、NIO、AIO详解

Bug终结者

Java io 8月月更

Hadoop Spark太重,esProc SPL很轻

石臻臻的杂货铺

SPL

下午见!2022京东云数据库新品发布会

京东科技开发者

MySQL 数据库 云计算 安全 数据迁移

Sass/Scss、Less 是什么?

CRMEB

限流不只有计数器,带你快速了解四种经典限流算法实现

知识浅谈

8月月更

wallys/new product/MT7915/MT7975/4*radios/

wallys-wifi6

1K字详解canal-1.1.5实时同步MySQL数据到Elasticsearch

了不起的程序猿

MySQL 数据库 程序员 Java 分布式

浅谈SVN备份

剑雪封喉

本周四晚19:00知识赋能第4期直播丨OpenHarmony智能家居项目之设备控制实现

OpenHarmony开发者

OpenHarmony

Python 教程之输入输出(3)—— 在 Python 中从用户那里获取多个输入

海拥(haiyong.site)

Python 8月月更

开源一夏 | 分享一款实用的太阳能充电电路(室内光照可用)

矜辰所致

开源 电路设计 8月月更 太阳能

Linux工具之Vim编辑器

TimeFriends

8月月更

开源一夏 | 教你快速实现“基于Docker快速构建基于Prometheus的MySQL监控系统”

知识浅谈

开源 8月月更

中文字体反爬,易易易易易易【Python脱敏】车车车车车车车车

梦想橡皮擦

Python 爬虫 8月月更

ABAB-740新语法

桥下本有油菜花

SAP abap

LP流动性挖矿DAPP系统开发丨流动性挖矿功能原理及说明

开发微hkkf5566

mysql进阶(二十四)防御SQL注入的方法总结

No Silver Bullet

MySQL SQL注入 8月月更

近邻搜索算法浅析

得物技术

深度学习 算法 Faiss 近邻搜索 乘积量化

深入解析分布式文件系统的一致性的实现

移动云大数据

分布式系统 数据同步

XDR平台架构与关键技术解析

极盾科技

网络安全 信息安全 数据安全 xdr 检测响应

Dva.js 新手入门指南

Susie喵~

dva 8月月更

《数字经济全景白皮书》金融数字用户篇 重磅发布!

易观分析

金融 数字用户

聊天app开发——防炸麦以及节省成本的内容鉴定方法

开源直播系统源码

软件开发 语音聊天室 直播系统源码 直播源码 语音app开发

STM32+OLED显示屏制作指针式电子钟

DS小龙哥

8月月更

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