写点什么

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

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

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

关注

评论

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

网络安全中API常见漏洞

郑州埃文科技

API漏洞

认知篇:CQRS架构模式的本质

京东科技开发者

架构 微服务 后端 CQRS 企业号 1 月 PK 榜

我们要的一种自学方式,也许是看书自学成才。

叶小鍵

火山引擎DataTester:“在字节,A/B实验是一种信仰”

字节跳动数据平台

大数据 字节跳动 AB testing实战

2023,不一样的数据库

NineData

数据库 运维 数据开发 数据管理 NineData

为什么 Go 不支持 []T 转换为 []interface

AlwaysBeta

Go golang 源码 slice interface

智慧公安!3DCAT实时云渲染助力某公安机关打造数字孪生可视化系统

3DCAT实时渲染

智慧城市 数字孪生 云渲染 实时云渲染

Object中的wait和notify方法详解

threedayman

面试 并发编程 java;

认识区块链,认知区块链——NFT

MavenTalker

区块链 NFT web3 数字藏品

如何使用 Java8 改造模板方法模式!

风铃架构日知录

Java 程序员 后端 设计模式 模板方法

高频JavaScript手写面试题

梁木由

JavaScript 前端 前端面试题

国产射频滤波器公司频岢微电子 完成近两亿元B轮融资

硬科技星球

软件测试/测试开发 | 接口自动化中如何完成接口加密与解密?

测试人

软件测试 自动化测试 接口测试 测试开发

15个 高并发系统设计 锦囊帮助你设计高并发!

风铃架构日知录

Java 程序员 后端 高并发 分库分表

Trie树简介及应用

京东科技开发者

数据结构 算法 高性能 双数组trie树 企业号 1 月 PK 榜

秒云获评开源GitOps产业联盟“当仁不让 · 最佳分享奖”

MIAOYUN

开源 产业联盟 gitops OGA产业联盟

市场上常见的5种LED异形屏

Dylan

LED LED显示屏 led显示屏厂家

Python 内置界面开发框架 Tkinter入门篇 乙

eng八戒

Python GUI tkinter

vivo 超大规模消息中间件实践之路

vivo互联网技术

kafka 中间件 pulsar 消息中间件 RoketMQ

软件测试/测试开发 | 接口自动化测试,如何实现多套环境的自动化测试?

测试人

软件测试 自动化测试 接口测试 测试开发

Verilog HDL数据流建模与运算符

timerring

FPGA

微信小程序实训|基于云数据库的语文听写工具

TiAmo

微信小程序 云开发 微信开发

启科QuTrunk+Runtime+QuSaaS+AWS量子计算编程实战

启科量子开发者官方号

量子计算

Sam Altman的成功学|升维指南

OneFlow

人工智能 深度学习

关于 JavaScript 定时器

devpoint

JavaScript 定时器 setTimeout setInterval

3DCAT实时云渲染助力VR虚拟现实迈向成熟

3DCAT实时渲染

vr 云渲染 虚拟现实 元宇宙

生产环境10分钟黄金时间快速排障:CPU不定时飙高怎么排查?

KINDLING

Java Linux 后端 监控 ebpf

资产梳理与应用自动化部署技术实践

智维数据

大数据 数据可视化 智能运维 应用交付平台 流量分析系统

云原生应用你应该这么管- 谐云发布基于KubeVela增强的应用版本管理和在线升级

谐云

云计算 Kubernetes OAM 容器云 企业号 2 月 PK 榜

5K字 由浅入深聊聊Promise实现原理

梁木由

JavaScript 前端 前端开发 前端面试

从 JVM 中深入探究 Synchronized

小小怪下士

Java 程序员 JVM synchronize

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