写点什么

需要 100% 的测试覆盖率吗?

  • 2007-05-31
  • 本文字数:937 字

    阅读完需:约 3 分钟

多少测试才算够用呢?答案因人而异。有人会告诉你要做到 100%的测试覆盖率。另一些人却不这么想,他们认为这个问题的答案因测试代码质量的不同而不同,而衡量测试覆盖率并不能说明这些测试及被测试代码的质量。

来自 ObjectMentor 的 Tim Ottinger 写道:“如果你正在进行真正的 TDD,那么你的测试覆盖率应该很高,因为你只有编写出产品级代码才能满足测试的部分。”这很巧妙地表明,TDD 对已有代码的测试覆盖率几乎没有什么影响。

我并不是说代码覆盖率应该很低,只是说随着我们的进展,我们写的每个独立的测试应该对我们的代码覆盖率影响非常小……这是一个很令我感兴趣的想法。

通过示例,Andy Glover 向我们说明了代码覆盖的度量可能会给我们带来了错误的安全感。对于代码覆盖的度量可能会告诉你哪些代码没有被测试,但不能准确地告诉你哪些代码 _ 被 _ 测试过了。同样地,Tobias Schlitt 认为:对代码覆盖的度量是很重要的,因为它会告诉我们哪部分是我们没有覆盖到的。

诚然,一个测试套件的高代码覆盖率根本不能说明代码经过了很好的测试(假如你自己不写代码和测试的话)。但是反过来说是成立的:一个较低的代码覆盖率毫无疑问还是意味着这个测试套件并不充分。就让我来深入分析一下代码覆盖率问题,看看它会给你带来什么吧。

测试大师 Testivus 认为“结果因情况而异”是最好的解释。对于那些刚开始写测试的人来说:

现在他写了很多代码,但还没有测试代码,那他还有很长的路要走。此时把重点放在代码覆盖率上的话将会很郁闷,而且毫无用处。他现在最好开始写一些测试并运行这些测试,覆盖率问题是他之后才需要考虑的事情。

对于那些有经验的开发者来说:

……所需的测试数量依赖于很多因素,而且在“需要考虑哪些因素”这个问题上,她比我更清楚,毕竟代码是她写的。虽然没有那种简单明了的答案,但她还是足以应付这个事实。

最后,对于那些只想得到答案的人来说:

第三个程序员想得到仅仅是简简单单的答案——即便事实上简简单单的答案并不存在……而且(即便有)他在稍后并不会遵循这些答案。

就象在这些 Blog 中说的那样,测试的关注点在于测试给质量检验带来的益处。从这个角度出发,我们应该意识到,对测试覆盖率的度量可以告诉我们遗漏了什么,而不是告诉我们哪些做的很好。

查看英文原文: 100% Test Coverage?

2007-05-31 02:301543
用户头像

发布了 100 篇内容, 共 22.6 次阅读, 收获喜欢 5 次。

关注

评论

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

前端开发:VS Code编辑器新建Vue文件自定义模板的方法

三掌柜

11月日更

数据库版本控制中间件flyway企业落地

小鲍侃java

11月日更

CSS架构揭秘之Ant design

Augus

CSS 11月日更

模块四作业:千万级学生管理系统的考试试卷存储方案

dean

架构实战营

[Pulsar] ChunkMessageID介绍及其原理

Zike Yang

Apache Pulsar 11月日更

Go 的 Panics 处理

baiyutang

golang 11月日更

搞定大厂算法面试之leetcode精讲1.开篇介绍

全栈潇晨

算法面经

Hive数据抽样与存储格式详解

五分钟学大数据

11月日更

Redis 实现限流的三种方式

大数据技术指南

11月日更

dart系列之:dart中的异步编程

程序那些事

flutter dart 程序那些事 11月日更

Android C++系列:Linux文件系统(二)

轻口味

c++ android jni 11月日更

【Redis集群原理专题】(1)介绍一下常用的Redis集群机制方案的原理和分析

洛神灬殇

集群 redis cluster redis sentinel 11月日更

【架构实战营】模块四

衣谷

架构实战营

CentOS环境下Redis的安装和配置

Empty

redis

参与tdengine开源的方式

williamcai

fork git 学习

requests-html库初识 + 无资料解BUG之 I/O error : encoder error,Python爬虫第30例

梦想橡皮擦

11月日更

自动驾驶 传感器和计算硬件 易筋 ARTS 打卡 Week 76

John(易筋)

ARTS 打卡计划 arts

面试必备(背)--Go语言八股文系列!

微客鸟窝

Go 语言 八股文 11月日更

十分钟搞懂WebAssembly

俞凡

Wasm

Prometheus Exporter (三)容器信息监控

耳东@Erdong

container Prometheus exporter 11月日更 cAdvisor

通过USB接入双目UVC协议外接人脸比对相机实现1:1比对开发

Todd Wong

数字化办公

基于海思Hi3559A或者Atlas_200模块,Hi3559A(主)+Atlas_200(从)开发AI加速边缘计算主板的三种模式

Todd Wong

人工智能 深度学习

自定义View:如何手写ViewGroup实现ListView效果

Changing Lin

11月日更

Go语言学习查缺补漏ing Day2

Regan Yue

Go 语言 11月日更

kafka常用命令

williamcai

kafka

Prometheus 都可以采集那些指标?-- 常用 Exporter 合集

耳东@Erdong

内容合集

【Flutter 专题】03 图解第一个程序 Hello World!

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 11月日更

别被你的框架框住了

Teobler

angular.js 大前端 React 框架 编程范式

【LeetCode】最长和谐子序列Java题解

Albert

算法 LeetCode 11月日更

网络安全—如何从IP源地址角度,预防DDoS攻击?

郑州埃文科技

一些关于原宇宙的思考

Simon

元宇宙 Metaverse

需要100%的测试覆盖率吗?_研发效能_Amr Elssamadisy_InfoQ精选文章