NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

怀疑在软件测试中所起的作用

  • 2018-04-17
  • 本文字数:4176 字

    阅读完需:约 14 分钟

本文要点

  • 对我们自身、其他大多数人,以及确定性事务应持怀疑态度。
  • 拒绝确定性,对任何事情持怀疑态度。
  • 健康的怀疑态度,以及合理的怀疑,测试可从中收益。
  • 一些批判性思维法则有效地扩展了测试者工具。
  • 假定天天都是愚人节。

对我们自身及大多数人所确信的事情秉持怀疑态度,这可促使我们脚踏实地,全力以赴地努力做好。对我们自身及他人的确定感做出怀疑,这是一种健康的实践,将有助于我们解决问题,并避免产生更长远的问题。怀疑可使我们成为更好的测试人员。

Zeger Van Hese 是一位独立测试顾问。在 2018 欧洲测试大会(European Testing Conference)上,他做了题为“怀疑的力量:成为一名软件怀疑论者”的主题演讲。InfoQ 以采访和文章全程报道了此大会。

在小册子《怀疑的力量》中,Van Hese 介绍了他是如何接纳怀疑态度,给出合理的怀疑,并解释了怀疑将如何影响测试。

InfoQ 采访了 Van Hese,访谈内容涉及:怀疑和怀疑态度的日常表现;怀疑态度的一些法则及这些法则如何应用于测试;心存怀疑是如何使其成长为一名测试人员的。

InfoQ:是什么使您决定成为一位软件怀疑论者?

Zeger Van Hese:我无法给出某个具体的时间点,或是某个具体的触发事件。这是一种持续多年并且愈发强烈的情怀。我所得到的经验越丰富,就越是认识到自己存在更多的未知之处,只是流于表面。我周围不少人似乎对自己非常确信,而我总是对自己的知识、能力和决定持怀疑态度。经过多年,我认识到,软件团队是一个复杂实体,其中的事情通常并非黑白分明,而更多情况下是模糊不清。对于那些我曾确凿无疑表述的事情,经验使我超越事情本身进而产生怀疑,这有助于我取得提高。如果一个人所从事的领域是需要以“给出保证”为工作职责,那么秉持怀疑态度无疑是格格不入的。

我并没有将怀疑深藏心底,而是决定去面对它们。我想对此究根问底,并用一年的时间完全投入所有与怀疑态度相关的事情中,希望从中发现一些有助于我开展测试并解决怀疑的蛛丝马迹。这是一个美好的过程,我在欧洲测试大会上的主题演讲以及附带论文中对此做了介绍。

InfoQ:持怀疑态度和怀疑的日常表现是什么?

Van Hese: 在一开始时,我们在了解了自身所存在的偏见后,会对自己产生怀疑态度。我们无法相信自己的所见、所闻甚至是记忆。意识到我们每天都很易于被愚弄,这使得我们脚踏实地,全力以赴地努力做好。

此外,对于大多数人所相信的事情,我尽量持怀疑态度。在与他人分享你的意见时,你很难改变主意。很难在别人认定的事物、传统思维以及“所接受的真理”上进行争辩。如果某个理念只是一个人提出的,那么对此可能会出现一些分歧或争论。但是如果有多个人认同某事就是真相时,我们自己往往也不会做进一步的质询。

我自身在怀疑态度上的经历告诉我,也应对确定性持怀疑态度。确定的感觉是十分棘手的事情。科学研究表明,无论人们在感觉上是多么的确定,但确定性并非一种有意识的选择,也不是一个思维过程。与爱情或愤怒一样,确定性是一种源自于大脑的机制,独立于理性而发挥作用。在我们相信某事为真时,我们最终也无法相信自己,认识到这一点是非常重要的。或许有时我们应该相信自己,认识到我们并不知道答案。

InfoQ:您能列举一些怀疑态度的法则吗?

Van Hese: 当然。有很多法则可以帮助我们增强怀疑态度。Carl Sagan 在他所著的《恶魔萦绕的世界:科学是黑暗中的一支蜡烛》(Demon Haunted World - Science as a Candle in the Dark)一书中,给出了他自己提出的一套称为“Baloney 检测工具”的实用法则。还有一些人也分享了他们是如何有效地持有怀疑态度的经验法则。我觉得其中有一小部分十分有用,列举如下:

奥卡姆剃刀

这是一个非常易用的经验法则。在解释某事时,如果存在两种不分伯仲的假设,那么选择其中更简单的,即需要做出最少假定的。

逆火效应(The backfire effect)

仅仅因为一个假设是自己提出的,就过份依赖于其,这时就会产生逆火效应。应尽量避免这种做法。在追求知识的过程中,假设只是其中的一个步骤。扪心自问为什么自己会对此想法情有独钟,并尽量将该想法与其它一些选择进行比较。

不要受来自权威说辞的影响

来自权威的说辞通常如此:“我是对的,因为我是专家”。无需将权威的说辞看得过重,因为这些“权威”在过去曾犯过错误,他们将来同样也会犯错误。

“如果我是错的?”

当你要做出一个重要假设时,尝试用这个问题问问自己。检查潜在的双方可能。这样一旦信息被证明是错误的,你也有退路。

对未知之处了然于胸

找出任何项目或情况中的未知之处。你无法对任一缺失变量做到面面俱到。但如果能做到认识自身的未知之处,那么一旦有新的信息出现,这将有助于你做出反应。

证伪

总是寻找假设可被证伪的方式。无法测试或不可证伪的命题是毫无价值的。

谨防偏见盲点

偏见盲点是一种认知偏差,它导致人们能看到偏见对判断他人的影响,而看不到偏见对判断自身的影响。

假定每日都是愚人节

在我看来,这是最重头的怀疑法则。一年中只有在愚人节当天,每个人会在看到、读到或听到所有内容时切换到一种“超级谨慎模式”,而在第二天就会放弃这种模式。我尽可能提醒自己,每天都是愚人节。

InfoQ:您是如何在测试中应用这些法则的?

Van Hese:早在 2002 年出版的经典测试书籍《软件测试的经验与教训》(Lessons Learned in Software Testing)中提出:“如果你认为自己是个傻瓜,那么你就很难以被欺骗”。软件行为以及我们的感官行为会欺骗我们,这正是这些怀疑法则在测试中发挥作用之处。

在你看到一份图表或报告时,问一下自己:“它们是什么意思?”、“它们表现了什么?”,尤其是,“它们并未显示出什么?” 图表的目的通常在于帮助人们解读数据,但它们有时只会误导我们,影响我们的测试方式。图表或报告可能会扭曲数据,而测试策略和决策通常基于这些数据。用批判性的眼光看待它们,有助于避免产生进一步的问题。

要将合理的怀疑纳入到我们的日常测试实践中。有一种简单的做法,即使用安全语言。如果你使用了“它肯定有效”、“我确定就是这个行为”等绝对性用语时,你最好是绝对正确的,否则你就会失去信誉。我鼓励大家使用“也许、“可能是”、“到目前为止”或“看起来”这样的表达,给自己留出一定的回旋余地。

怀疑态度建议我们,在至少能够核证一些事实之前,应拒绝任何确定性,并暂时将一些确信束之高阁。这种做法非常强有力,可做为测试人员的一种日常工作方式。永远不要认为你所收到的信息就是全部的真相,甚至不要相信它们是正确的。我并不是说人们对你说谎了,而是说人们可能并不了解全部的真相。他们告诉你的,是他们所见的事实。如果我们的开发人员向我们保证:“我们不需要对应用的这一部分做整体重新测试,因为修复程序针对的是其它一些地方,而这个区域并未受到影响”。这时,如果我们听从了他们的建议,会发现应用的一些重要区域甚至不再工作,并只能在出现问题后去再去寻找解决出路。我们真的知道某事是否将会受影响吗?开发人员在扩展他们的代码时,有时出现一些神秘的状况。

“假定今天是愚人节”法则非常适用于测试。在分析需求时,问问自己:“有什么收获?”、“我错过了什么?”、“当然这不可能是全部?” 。在做部分测试时,如果一切都看起来很完美,那么问问自己:“有什么收获?”、“什么是我没有看到的?”。如果看到软件行为异常并需要提交软件缺陷时,对自己说:“等一下,慢下来,这真的是一处软件缺陷吗?我的系统配置是否正确?我的测试数据是否有问题?我所看到的行为真的是错误的吗?还是由于其它原因导致了这一切?”。如果你感觉所读到的或所见的信息存在问题,那么对此做出检查,查找对其有贡献的多个来源。

InfoQ:作为一名测试人员,您从怀疑中得到了什么?

Van Hese: 我知道人们对怀疑颇有微词。毕竟,怀疑似乎并没有让你走得很远,也不会使你赢得奖励,得到晋升。这所导致的结果是,确定性和过度的自信大行其道。但我已经看到怀疑与智慧,知识和技能已在关联,这使我认为怀疑肯定会发展得更好。这就是为什么我主张对怀疑做重新评估的原因。我们开始以不同的方式看待怀疑。它并非一种表示软弱的迹象,而是一种集合了能力和文化的标志。

我之前提到,确定性作为一种情感,它和愤怒或爱情一样,不一定是出于一种正确的判断。最大的问题在于,当我们认为自己知道某事的那一刻起,我们的大脑就会进入一种自动驾驶模式。从我们认为自己知道解决方案或答案的那一刻起,我们就不再对其做批判性的思考。怀疑我们自己和其他人的确定感,这是一种好的做法,有助于我们去解决问题,并从长远看可避免出现更大的问题。

一旦你新加入了一个团队,或新分配了一个项目,这时你需要迅速地消化大量的信息。你必须加快速度,虽然没有人期望你能从一开始就无所不知。“凡事在做成之前,不可引以为真”,这是长期流行在顾问人群中的一个座右铭。我知道它是起作用的,我承认,过去我甚至亲自做过,但我现在更喜欢不再假装。我现在的一般做法是,在对事情有更好的理解之前,我不会做出结论,而是会说“我目前不清楚”。我鼓励大家也这样做。

我相信,如果能以合理的方式做出怀疑,我们就会成为更好的测试者。怀疑态度的关键在于持续地、积极地应用科学的方法。怀疑态度的最大挑战在于,如何在两种看似矛盾的态度之间找到一个平衡点,即对新的观念持开放态度,同时也对所有的新旧观念做出怀疑审查。

我最后给出的建议是:怀疑,但应作出合理的怀疑。对所有事物持怀疑态度,包括你自身在内。保持思考能力,不要失去好奇心。

InfoQ 以问答、总结和文章全程报道了 2018 欧洲测试大会。

关于被访者

Zeger Van Hese 认为自己是一位需要毕生学习软件测试技能的学生。他曾担任 Eurostar 2012 大会的程序主席,也是探索测试荷兰研讨会(DEWT,Dutch Exploratory Workshop on Testing)和比利时研讨会(BREWT)的联合创始人。他在自己的博客 TestSideStory 和 Twiiter 账号 @testsidestory 上推出了一些测试实践,并定期在一些国家级和国际会议上演讲。他在 2013 年创立了自己的公司 Z-sharp。

译者注:文中大量使用了“skeptical/skepticism”和“doubtful/doubt”。两种用词都可直译为“怀疑”,区别之处在于,前者强调的是一种难以动摇的怀疑态度,而后者强调的是尽管经过了一些调查依然无法确定的状态。因此在本文中,“skepticism”译为“怀疑态度”,“doubt”则直译为“怀疑”。

查看英文原文: The Power of Doubt in Software Testing

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2018-04-17 17:521559
用户头像

发布了 391 篇内容, 共 127.1 次阅读, 收获喜欢 256 次。

关注

评论

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

“元宇宙”与“数字孪生”

CECBC

区块链能否助力版权“突围”?

CECBC

元宇宙,帮助土耳其奶牛产了更多奶?

CECBC

墨天轮国产数据库沙龙 | 四维纵横姚延栋 :MatrixDB,All-in-One高性能时序数据库

墨天轮

数据库 时序数据库 国产数据库 MatrixDB

WMS是什么?

源字节1号

开源 后端开发

4 月亚马逊云科技培训与认证课程,精彩不容错过!

亚马逊云科技 (Amazon Web Services)

架构师 培训 认证

面向编排的运维在阿里的应用 |阿里巴巴DevOps实践指南

阿里云云效

云计算 阿里云 运维 云原生 部署与维护

中小型企业CRM系统有哪些好处

低代码小观

销售管理 企业管理 CRM系统 客户关系管理系统 企业管理软件

Figma禁封中国企业,下一个会是Postman吗?国产软件势在必行

Liam

后端 Postman Apifox API swagger

java培训:使用 Disruptor 做springboot内部消息队列

@零度

JAVA开发 springboot

#yyds内容盘点# 一文带你搞懂Python中变量与常量

程序媛可鸥

Python 人工智能 面试

建木持续集成平台v2.2.4发布

Jianmu

运维 持续集成 开源社区 自动化平台 建木CI

如何写好单元测试

TroyLiu

Java 单元测试 解耦 测试原则 好的测试是什么样的

这是我见过最详细的Nginx 内存池分析

Linux服务器开发

nginx 线程池 Linux服务器开发 Linux后台开发 内存池

推荐算法!基于隐语义模型的协同过滤推荐之商品相似度矩阵

编程江湖

大数据 算法

# yyds内容盘点 # 一文教会你Python中三种简单函数的使用

程序媛可鸥

Python 人工智能 面试

【CAD】系列Ⅱ

謓泽

3月月更

it运维工程师的工作是做什么的?累吗?

行云管家

运维 服务器 IT IT运维

智慧城市解决方案提供商万达信息加入龙蜥社区

OpenAnolis小助手

开源 智慧城市 万达集团

OpenHarmony移植:XTS子系统之应用兼容性测试套件

华为云开发者联盟

OpenHarmony 移植 XTS子系统 acts 测试套件

Java有了synchronized,为什么还要提供Lock

华为云开发者联盟

Java synchronized 死锁 lock 同步代码块

java编程技术FastDFS 安装和配置

编程江湖

技术平台&应用开发专题月 | 如何保证业务服务稳定运行—用友云原生技术平台高可用能力介绍

用友BIP

用友 用友iuap

云平台是什么?知名云平台有哪些?

行云管家

云计算 阿里云 云服务 云平台

TypeScript 2.0开启空值的严格检查

华为云开发者联盟

typescript js 空指针 ts

做开发这么久了,还不会搭建服务器Maven私有仓库?这也太Low了吧

冰河

系统架构 程序开发 程序员进阶 编程基础 Maven仓库

为什么MySQL主键查询这么快?

蝉沐风

MySQL 索引 主键查询

阿里云移动研发平台EMAS:2月产品动态

移动研发平台EMAS

阿里云 程序员 emas 移动端 研发工具

拥抱云原生 2.0 时代,Tapdata 入选阿里云首期云原生加速器!

tapdata

数据库 实时数据服务平台

深入跨国互联网业务场景,看华为云数智融合元数据如何打破“数据墙”

华为云开发者联盟

大数据 数据仓库 华为云 元数据 数智融合

HBase海量数据高效入仓解决方案

vivo互联网技术

数据库 HBase

怀疑在软件测试中所起的作用_软件工程_Ben Linders_InfoQ精选文章