读书笔记 《软件测试 52 讲》-茹炳晟

探索式测试的一般过程:

首先根据软件功能描述来设计最初的测试用例,然后执行测试;测试执行后,我们可能得到与预期输出不完全一致的实际输出,于是你会猜测这种不一致是否可能来自于软件的缺陷;为了验证这个想法,我们会根据错误输出设计新的测试用例,然后执行新的用例以检查软件的输出。

在一次测试中,我们可能会经过几轮这样的猜测和验证,进行反复“探索”,最终确定了一个软件的缺陷。而这个过程中,我们会发现,识别缺陷的思路和测试用例的设计,并没有出现在最初的测试设计和测试用例文档中,而是以很快的速度在我们的脑海中以及实际测试执行和验证中快速迭代。

从本质上来看,上述的两个过程就是探索式测试最基本的思维模型了。所以说,探索式测试本身并不是一种测试技术,而是一种软件测试风格。这个测试风格,强调测试工程师要同时开展测试学习、测试设计、测试执行和测试结果评估等一系列的活动,以持续优化测试工作。

探索式测试的定义

首先,探索式测试是一种软件测试风格,而不是一种具体的软件测试技术。 作为一种思维方法,探索式测试强调依据当前语境与上下文选择最合适的测试技术。所以,切记不要将探索式测试误认为是一种测试技术,而应该理解为一种利用各种测试技术“探索”软件潜在缺陷的测试风格。

其次,探索式测试强调独立测试工程师的个人自由和责任,其目的是为了持续优化其工作的价值。 测试工程师应该为软件产品负责,充分发挥主观能动性,在整体上持续优化个人和团队的产出。这种思想方法,与精益生产、敏捷软件开发的理念高度一致,这也正是探索式测试受到敏捷团队欢迎的原因之一。

这里需要特别指出的是,探索式测试对个人的能力有很高的依赖: 同样的测试风格,由不同的人来具体执行,得到的结果可能会差别巨大。因此,对执行探索式测试的工程师的要求就会比较高,除了要能够从业务上深入理解被测系统外,还要有很强的逻辑分析与推理能力,当然对测试技术以及测试用例设计的融会贯通也是必不可少的技能。

最后,探索式测试建议在整个项目过程中,将测试相关学习、测试设计、测试执行和测试结果解读作为相互支持的活动,并行执行。 注意,这里的并行(run in parallel)并不是真正意义上的并行,而是指对测试学习、测试设计、测试执行和测试分析的快速迭代,即在较短的时间内(比如,1 个小时或者 30 分钟内)快速完成多次循环,以此来不断收集反馈、调整测试、优化价值。这样,在外部看来,就会感觉这些活动是在并行地执行。

探索式测试有明确的测试目标和测试设计,只是测试设计的时间很短,会以很高的频率与测试执行交替切换。

如何开展探索式测试

通常,我们首先会对软件的单一功能进行比较细致的探索式测试。 “探索”的过程主要是 基于功能需求以及非功能性需求 进行扩展和延伸,期间可以采用类似“头脑风暴”的工具,比如 Xmind 等,帮助我们整理思路。

然后,我们往往会开展系统交互的探索式测试,这个过程通常会采用基于反馈的探索式测试方法。基于反馈的探索式测试方法,会运用所有可用的测试技术,以及基于对产品深入理解后的技术直觉,并结合上一次测试结果的反馈与分析结果,指导测试工程师下一步的测试行动。

总结

探索式测试是一种软件测试风格,而不是一种具体的软件测试技术。

作为一种思维方法,探索式测试强调依据当前语境与上下文选择最适合的测试技术,并且强调独立测试工程师的个人自由和责任,其目的是为了持续优化其工作的价值。

探索式测试建议在整个项目中,将测试相关学习、测试设计、测试执行和测试结果解读作为相互支持的活动,并行地执行。