写点什么

检查,还是测试,你使用哪个?

  • 2009-12-28
  • 本文字数:1767 字

    阅读完需:约 6 分钟

软件测试是一种以观察和实验为依据的调查过程(empirical investigation),该过程以测试为手段,为干系人提供产品或服务的质量信息。然而,这个定义并没有提到人类智慧的应用,而人类的智慧使得测试(testing)和检查(checking)之间产生微妙区别。 Michael Bolton 谈了两者的区别及其产生原因。

Michael 认为:

检查是指为了证实已经存在的理念而去做的事情。检查是一个证实(confirmation)、验证(verification) 和确认(validation) 的过程。当我们已经相信某些东西是正确的,我们会通过检查来核实这一点。当我们修改了代码又想确保一切功能照常运行,我们就需要检查测试是指我们为了发现新信息而去做的事情。测试是一个探索(exploration)、发现(discovery)、调查(investigation)和学习的过程。当我们想通过配置、操作或者观察来评估一个产品时,或者当我们试图去识别一个没有预计到的问题时,我们就是在测试。

Michael 认为:检查要依赖机器完成,因为它们可以给出非此即彼的两个答案:通过或者失败。测试却需要智慧。测试是了解系统和解答问题的探索之旅:“这里有问题吗?”这也引出了测试人员和检查人员的区别。

需要有最新的、清晰、完整而且没有歧义的规范说明才能工作的人是检查人员,不是测试人员。同样,需要有测试脚本才能工作的只是检查人员,而不是测试人员。而仅仅根据参考文档来比较当前程序的人也是检查人员,不是测试人员

George Dinwiddie 认为检查和测试都是需要智慧的。他觉得虽然Michael 认为“运行和观察结果”是检查,但是这仅仅是脚本测试的一部分。一旦测试失败了,就需要测试人员的智慧来弄明白到底发生了什么。这可能包括通过查看日志文档来获得信息,让其他人去看看别的系统是不是工作正常,以及很多其他探究性工作。所以这跟探索性测试没有区别,除了发生的时间有点延时而已。

Michael 一定程度上也同意这个观点,他认为仅仅检查点(check)本身是很微不足道的。往往检查之前或者检查之后,人类的智慧起到了很大作用。这也就是一个检查点(check)和检查(checking)的区别。

所以核心问题在于我们认为哪一个更有价值,是检查点(我们有 50000 个自动化测试)还是检查。只有检查点是不重要的,但是检查——涉及到构建、维护和分析每个检查点——却是很重要的。参照艾森豪威尔那句话(译者注:艾森豪威尔,二战欧洲盟军总司令,美国 34 任总统。他在诺曼底登陆以后有句名言:Plan is nothing, but planning is everything),就检查而言,检查点什么都不是,与之相比,检查这一系列过程才是王道 (with respect to checking, the checks are nothing; the checking is everything)。然而检查也不是万能的,测试也是如此。

Johanna Rothman 也发表了类似的看法,她认为测试需要技能和智慧并存。

敏捷项目需要真正的多面手来担当测试人员:拥有能读懂需求、设计和代码的技能的人。没有这些技能,他们就不能足够深入地去思考开发中的产品,他们也就有可能无法识别出足够多的各类测试用例。如果他们能够理解需求、设计和代码,他们就可以根据他们的理解设计出巧妙的测试用例。其中的一些测试是探索性的,甚至有些探索性的测试需要以自动化方式实现,以便以后重复运行。我曾经在敏捷项目中见过一些出色的测试人员,他们能够很快地编写出自动测试脚本来做一些探索。

Cem Kaner 不同意敏捷测试人员需要是多面手一说。他认为既然探索性测试既需要测试又需要探索,那么为了能探索得当,还是很有必要运用些特定技能的。他说道:

程序员理解项目中很多的风险。相比非程序员出身的人,他们可能能更好地写出深入的测试来探测那些风险。而其他人可以更加专注于当前环境下的软件集成。相类似地,我们熟知的一些系统性能或者安全评估方面的专家,也能在他们的领域更好地表现。他们中的一些人是程序员,一些则不是。所有这些人和系统级别的软件测试人员(software validator)一起,才能做好自动脚本测试或者探索性测试。

George 认为这两种模型都有各自的利弊。检查和测试都能满足 Cem Kaner 关于测试的定义。关键不在于是不是测试脚本化,而是你做事的流程和方式。

两个都是测试,都在寻找新信息,都需要智慧。如果你不这么想,那么你的测试方式就错了。

前不久,InfoQ 也发布了一篇新闻《热衷敏捷测试的十大理由》,有兴趣的同学们请参阅。

查看英文原文: What do you do, Testing or Checking?

2009-12-28 02:542271
用户头像

发布了 114 篇内容, 共 34.2 次阅读, 收获喜欢 2 次。

关注

评论

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

分布式数据库是无用的屠龙术吗?

海边的Ivan

企业架构 分布式数据库 业务中台

喔,明白了,成功也是一种苦难

霍太稳@极客邦科技

创业 身心健康 企业文化 个人成长 心理

【SpringBoot】掌握这两个属性,你的测试类可以启动的更快些

遇见

Java Spring Boot Unit Test

Kubernetes 容器运行时演进

倪朋飞

Kubernetes 容器 云原生

用你喜欢的 emoji 作为页面的 favicon 吧 🎉

遇见

CSS html favicon emoji

是时候要说再见了,春风十里,不如邮你!

乐少

删掉最后一句话

池建强

心理学 情绪控制

小议RPA

一品凡心

人工智能 RPA 自动化

【深度】为您解读东西方艺术教育的专业设置差异对比~

默聲

我的第一个千万阅读量

彭宏豪95

创作 生活 写作

任正非管理哲学中的三个常识和三种科学

霍太稳@极客邦科技

创业 团队管理 华为

《小狗钱钱》——财富离我们并不遥远

Yin

读书笔记 投资 成长 思维方式

一篇文章搞定 java 中的 path 和 classpath

shengjk1

Java classpath vs path classpath path

走出舒适区最好办法别走了,扩大它

乐少

dubbo-go 中如何实现远程配置管理

joe

Apache 开源 微服务 dubbo Go 语言

精纯还是混乱?职场十二箴言——重读“成为乔布斯”的思考(一)

石君

职场 乔布斯 成功学

做小池塘里的大鱼,还是大池塘里的小鱼?这是个问题。

霍太稳@极客邦科技

创业 团队管理 目标管理

探究vscode debug流程,解决无法运行go程序的问题

simpleapples

vscode Go 语言

如何解决 Kubernetes 的 DNS 延迟问题

倪朋飞

Kubernetes 微服务 云原生

Elasticsearch文档版本冲突原理与解决

Skysper

elasticsearch 乐观锁 悲观锁

翻译: Effective Go (2)

申屠鹏会

翻译 Go 语言

特别评论:甲骨文的傲气

张晓楠

云计算 互联网巨头 企业文化

简单到不可能失败 —— 《微习惯》

零和幺

读书笔记

无代码开发

Fenng

如何做一名失败的安全架构师

石君

架构 安全架构师 安全评估

GitHub知错就改,是个好同志

遇见

GitHub

HTTP Methods和RESTful API的设计

孙苏勇

架构 系统设计 RESTful 接口

我如何用 Python 给 Github 的 README.md 做一个访客统计功能

遇见

Python GitHub 开源 badge open-source

精纯还是混乱?职场十二箴言——重读“成为乔布斯”的思考(二)

石君

创业 乔布斯 成为乔布斯

做产品的同理心

孙苏勇

产品 产品经理 产品设计

Kubernetes中的CI/CD

倪朋飞

Kubernetes DevOps 微服务

检查,还是测试,你使用哪个?_研发效能_Vikas Hazrati_InfoQ精选文章