写在前面的:这里只是节选了博客部分内容翻译。有些段落没有翻译,因为觉得自己的理解还不那么深刻和准确。有感兴趣的可以阅读原文链接。 几天前,James Bach大师的博客上又出了一篇新作,名字叫“Exploratory Testing 3.0”。我也很好奇到底什么是3.0? 1.0, 2.0又是什么? 这篇博客是由James Bach和Michael Bolton共同写的。这两位大师我都见过,也聆听过他们的讲座。他们不仅是的测试前辈,更是善于思考和总结的老师。博客中指出在计算机软件刚刚开始的岁月里,只有测试的概念。没有人会提探索性测试还是脚本测试。1961年Jerry Weinberg大师第一次在他的《计算机编程基础》中区别了机器要做的事情和人可以做的事情。认为测试可以公式化,这也是脚本测试的产生。而且认为面向脚本的测试是专业的,而那些不正式的测试,没有脚本的测试是非专业的。当James在1987年加入后,他发现“Ad Hoc”测试总是能发现一些脚本测试无法发现的问题。之后,他发现Cem Kaner已经定义过“Exploratory Testing” Exploratory Testing”用来做完脚本测试的对立面。当时Cem Kaner并没有清晰地定义探索式测试,但是他的确是第一个直接提出在设计测试的同时执行测试。这我们可以成为ET1.0. ET 1.0: 反叛(Rebellion) 有脚本的测试和无脚本的测试只是不同的体验。首先,当我们偏离脚本,按照我们的那些idea来测试的时候,总能发现更多更好的bug。感觉好像是更好的一种测试。当时我们并不了解这是为什么。因此第一阶段的探索式测试主要是为了摆脱脚本测试,争取更多偏离脚本探索的机会。我们面临这大多数人的态度是。“Ad Hoc”测试是无目的的,不可控的,无法管理的,不应该做的测试。所以很多人都认为ET是一种技术,一种特别的活动。 ET1.0的时代在1995年的时候开始衰退。更多的人开始把探索式测试作为一门学科来研究,虽然事实上所有的人都有意识无意识的在用,在追求。 ET 1.5:阐述(Explication) 在90年代末,在北美有一小撮人开始试图理解软件测试所需的技巧和思维。他们分为两个分支,一个是以Jerry Weinberg为代表的,人类学方向,将软件工程,系统思维和心理学联系起来。另外一个则是Cem Kaner为代表的认知科学以及波普尔批判理性主义。这些研究很快让我们对探索式测试和脚本测试有个全新的认识。为什么?因为我们更深刻地了解了测试本身的结构,以及快速的演变。 当James 1995年加入ST lab时,他第一时间全情投入对于软件测试方法论的研究。这也开始了他和Cem Kaner长达15年的合作。这也是快速测试方法学的雏形。第一个比较大的创新是引入了启发式引导词语作为一种方法来指导和引导测试人员的思维。测试方法和一些模板早存在了很久,但是我们总结出有经验测试人员的词汇和认知模型,我们开始从一个新的方向看待探索式测试。我们开始比较探索式测试和脚本测试的结构,关系,而不仅仅感受它们活动的不同。 1999年,James为微软定义了规范化ET的流程。规范化Ad hoc测试看似矛盾,但是这引起了一场冲突,这些冲突通过James和Cem之间的辩论而得到解决,从而来催生出来ET 2.0 James和 Jon两兄弟开发了基于测程的测试管理(SBTM)。 SBTM非常成功的帮忙人们认识到探索式测试是完全可管理的,也是人们转换了对于探索式测试“Don’t do that”的态度。 ET2.0: Intergration 2.0的时代很长,基于将探索式和脚本测试的结合。我们开始认识到探索式测试不是一项技术,而是一个测试的方式,风格。随着我们对于测试技巧和测试本身有更多的认识和想法,人们对于测试的探索不在是凭直觉,而是会使用一些结构,模式,认知过程。在90年代我们叫的探索式测试,现在更多的我们叫freestyle探索式测试。 直到2006年,我们开始简单地定义ET为同时来学习,设计和执行测试。经过几番讨论,辩论,终Cem将探索式定义成我们现在熟知的: A style of testing that emphasizes the freedom and responsibility of theindividual tester to continually optimize the quality of his work by treatingtest design, test execution, test result interpretation, and learning asmutually supporting activities that continue in parallel throughout the courseof the project. 探索式测试的定义逐渐清晰,这里更强调个人的责任和导向。一个有经验的探索式测试人员和一个有经验的脚本测试人员其实并无二致。 2009年,Michael 提出了testing 和checking的区别。认为“Testing”是无法被自动化的,但是checking可以完全被自动化。 ET 3.0:标准化(Normalization) 在2011年,社会学家Harry Collins开始为我们改变一切。他花了很多年在科学研究上,他认为科学研究实际上和测试领域是一样的。通过学习Harry和他同事的工作,我们了解到如何辨别不言而喻和可解释明确的差别。这让我们意识到什么能,什么不能写到一个脚本中去。他区分了行为(Behavior)和动作(Actions),这使James想到了check和testing的区别,什么样的是可以重复的,每次都想按同样的方式执行,什么样的是每次必须根据情况变化的。这也帮助我们了解到自动化所能企及的范围。 后一点: ET 3.0 作为一个术语还是挺纠结的。因为快速测试方法论想做的事情其实是对于探索式测试的退化。是的,我们正在让这个术语淡出,22年后,为什么? 因为我们正在将所有的testing都定义为探索。我们的定义是: Testing isthe process of evaluating a product by learning about it through explorationand experimentation, which includes: questioning, study, modeling, observationand inference, output checking, etc 。。。 你在做测试吗?那么你已经在做探索式测试了。你在做脚本测试吗?那么如果你很负责的在做,你也在做探索式测试,只是有脚本而已。如果你只是按照脚本在执行测试,那么我觉得你并不是在真正的做测试。你只是试图表现的像个机器,而不是个负责人的tester。 ET 3.0,一句话总结是将脚本测试认为是一个技术,而探索式测试才是测试。