上一章介绍了探索式测试的定义。在实际项目的测试执行过程中,读者是否曾遇到如下的几个现象:
测试人员按照一个测试用例来执行测试,得到的程序输出与预期输出不一致。
测试人员判断程序的行为并不是缺陷,但根据新的输出想到了新的测试思路。
测试人员根据新的测试思路采用不同的输入并检查程序输出。
测试人员再次根据新的测试结果选择新的输入,反复地探索下去,最终发现了一个程序缺陷。
测试人员发现该缺陷的测试思路或测试用例并没有出现在最初的测试设计或测试用例文档中。
相信有很多读者熟悉上述的情景,也许有些人认为这是测试设计的遗漏,但笔者要告诉读者的是,千万不要怀疑你的测试设计能力,因为这是非常正常的现象。由于我们还没有真正深入地了解产品,不可能在测试设计的时候想到所有测试场景,且在需求分析阶段不可能评审到所有的隐含需求,所以最初的测试设计并不能捕获程序的所有缺陷。为了发现尽可能多的缺陷,测试人员需要在测试过程中,根据测试反馈持续地优化测试模型、调整测试设计。这是一个研究、实践和探索的过程。了解探索式测试的思维将有助于测试人员更有效地测试。
根据测试专家Erik Petersen对于探索式测试的理解,笔者抽象出探索式测试的思维模型CPIE(Collation,Prioritization,Investigation,Experimentation),如图2.1所示。该测试模型包含迭代的4个阶段:整理、排序、调查和实验。
图2.1 探索式测试的思维模型
整理(Collation):尽最大可能收集关于被测产品的信息,去了解和理解它们。
排序(Prioritization):确定所有测试任务的优先级。
调查(Investigation):对即将执行的测试任务进行仔细的分析并确定测试输入和预期输出。
实验(Experimentation):实际地去测试,验证我们的预测是否正确,检查我们在整理阶段获取到的信息是否正确。根据实验结果,测试人员将收集更多的信息,并调整测试任务的优先级。
对于探索式测试的思维过程,测试专家 James Bach提出了如图2.2所示的思维模型。该模型包含一组启发式问题,以推动测试人员在知识(Knowledge)、分析(Analysis)、实验(Experiment)和测试故事(Testing Story)上深入探究。
知识:掌握产品特性、开发技术、测试技术和领域规则等测试需要的知识。
分析:分析产品风险、测试覆盖、测试方法、测试先知 和产品缺陷等测试相关因素。
实验:配置、操作、观察和评估被测产品。
测试故事:用测试计划、测试报告和可工作的产品等组成测试报告,以准确地反映测试状态和产品质量。
图2.2 探索式测试的思维过程
从图2.1和图2.2可以看出James Bach和Erik Petersen的观点都强调通过实验(Experiment)来持续改进测试设计。他们认为瀑布式的测试设计和用例编写并不会产生优质的测试设计,测试人员还需要在测试执行的时候持续扩展新的测试思路,完善测试设计。在探索式测试过程中,测试学习、测试设计、测试执行和测试评估是互相支持和驱动的活动。第4章将讲述几个案例来说明探索式测试这种迭代优化的测试风格。