写点什么

需要 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:301827
用户头像

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

关注

评论

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

DB-Engines 3月数据库排名:MySQL跳出“同期跌幅榜”,拿下“本月涨幅榜冠军”

华章IT

数据库

Python 高手都这样使用字典,这些高效方法你知道吗?|pythonic 小技巧

AlwaysBeta

Python

Netty 核心源码解读 —— 开篇

松然聊技术

Netty

推荐35款可以快速提升工作效率的软件

科技猫

软件 经验分享 实用工具 办公 工具分享

快速使用Vue3最新的15个常用API(1W5+字详解,建议收藏)

零一

vue.js 大前端 Vue3

图解TCP的通信机制

零一

TCP 网络

Python-计算机视觉-OpenCV-调色板

Aldeo

Python OpenCV

Swift 5创建和使用Framework, XCFramework 从入门到精通 John 易筋 ARTS 打卡 Week 42

John(易筋)

ARTS 打卡计划 Framework XCFramework

下一站,星辰大海!

百度大脑

百度 AI 上市

阿里一战封神,百万人跪求的Java面试手册终于开源;

Java架构师迁哥

硬件工程师必备,常用元器件封装速查表

不脱发的程序猿

28天写作 电路设计 3月日更 元器件封装速查表 电子设计

超全Android中高级面试复习大纲,在线面试指南

欢喜学安卓

android 程序员 面试 移动开发

nsq源码阅读之diskqueue

werbenhu

nsq Go 语言

nsq源码阅读之Topic

werbenhu

nsq Go 语言

Netty 核心源码解读 —— ServerBootstrap 篇

松然聊技术

Netty

nsq源码阅读之Channel

werbenhu

nsq Go 语言

nsq源码阅读之nsqd总体流程

werbenhu

nsq Go 语言

4层板到12层板叠层经典设计方案

不脱发的程序猿

28天写作 电路设计 3月日更 PCB PCB布局

【LeetCode】扁平化嵌套列表迭代器Java题解

Albert

算法 LeetCode 3月日更

SQLServer性能调优方法小结

嘉为蓝鲸

数据库 sql 运维 SqlServer MAXDOP

想学IT的必看!漫谈MySQL权限安全,分享一点面试小经验

欢喜学安卓

android 程序员 面试 移动开发

Redis新版本开始引入多线程,谈谈你的看法?

Java架构师迁哥

已拿到蚂蚁金服Offer!阿里内部二十三万字Java面试题总结

Java架构追梦

Java 阿里巴巴 架构 面试 金三银四

SDK介绍及相关功能测试

行者AI

测试 sdk

hive的DQL查询语法详细剖析

大数据技术指南

大数据 hive 3月日更

使用Redis,你必须知道的21个注意要点

Java 数据库 redis 架构 面试

nsq源码阅读之消息接收和发送

werbenhu

nsq Go 语言

Dubbo的设计理念原来就藏在这三张图中

中间件兴趣圈

dubbo RPC

到底什么是Event Loop?那就来了解一下JavaScript分别在浏览器和Node环境下的运行机制吧

零一

JavaScript 大前端

如何在3分钟内实现音频变声和趣味音效?

拍乐云Pano

音视频 RTC 出海社交 社交泛娱乐

智慧公安重点人员系统开发,情报研判管控平台的搭建

13828808769

行业资讯

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