猜数字游戏和探索性测试
蔡:什么是探索性测试?
郑:探索性测试(Exploratory Testing,ET)是Cem Kaner在1983年提出的,是软件测试的一种方式。与脚本化测试(Scripted Testing,ST)相比,探索性测试将更高的认知水平放在了测试执行上面,同时更加强调测试人员学习、设计、执行与结果分析等测试活动的并行、相互反馈与相互支持。
很多人都玩过猜数字游戏:我预先在心里想好一个 1到 100之间的数字,你来猜。你可以问任何问题,而我只有两种回答“是”或“不是”。然后通过你的不断提问与我的不断回答,最终猜到我心中想的数字。在猜对的情况下,问的问题越少得分越高。这就是一个典型的探索性测试的例子。测试人员需要根据前面问题的答案分析和设计下一个问题。第一个问题可能不靠谱,但是根据前面问题的不断反馈和结果分析,你设计的问题将会越来越靠近问题的答案。假如参与者了解二分法,那么最多 7 次就可以猜中数字。假如不了解二分法,你也可以猜到数字,但是尝试的次数可能远多于 7次。你的策略、技术与方法,直接决定了你完成任务的速度与质量。
探索性测试的过程与猜数字游戏的过程是类似的。游戏中你要猜的数字,就是你要寻找的缺陷或者其他质量信息;你要问的问题,是你分析和设计的测试用例;每个问题的答案,则是测试过程中测试对象的输出。测试人员面对一个被测试的功能,首先对它有个模糊的概念与范围,然后不断地分析、设计和执行测试用例,观察测试对象的输出和反应,并以此为基础判断下一步的测试用例,获取缺陷或者其他质量信息。
由于探索性测试的不断探索、不断分析、不断反馈的特点,它可以较好地解决脚本化测试中的一些问题,例如,脚本化测试强调尽早的测试设计,但是测试设计越早,测试人员对测试对象的了解越少,对风险的了解越少。测试人员对测试对象的了解是一个逐步的过程,脚本化测试需要更多的工作量以应对这个过程(需求的细化和变更等)。
与脚本化测试相比,探索性测试更强调测试人员的思维自由度与主观能动性。然而,探索性的自由,并不代表它是不做准备的,它也不是随机的。好的探索性测试依赖于测试人员综合应用测试策略、测试技术与方法的能力,例如,获取测试数据,掌握测试设计技术,建立失效模式,创建测试模型等。口号式的探索性测试并不能帮助测试人员成功。探索性测试如下象棋,规则不多。但是我们在欣赏象棋比赛的时候,关注的是在这些规则下选手选择下一步如何走的技巧与技能,它的技术含量也不在其规则,而在选手的技巧与技能。规则简单,技巧复杂。
旁观者说:探索性测试的基础是对测试对象的熟悉。
尽管探索性测试可以解决脚本化测试中的一些问题,但我并不认为探索性测试优于脚本化测试,或者将来会谁取代谁的问题。它们之间各有所长,作为测试人员,我们应该做的是根据测试对象特点、组织特点、资源特点等具体情况,如何更好地发挥两者的各自优点,弥补两者的不足。