测试过程
测试过程
图2.3 测试过程需要考虑的因素
James Bach还曾提到过,探索式测试就像对一个人进行面试。测试人员需要向面试对象提出高质量的问题(一个问题类似于一个测试想法),并根据面试对象的回答提出更好的问题。为了提高发问的水平,测试人员需要着重培养如下的能力和技巧:
n 提出有用的问题(目的驱动问题)。
n 观察什么事情正在发生。
n 描述自己能够感觉到或看到的东西。
n 对于自己的所知进行批判性的思考。
n 组织和管理业务上的规则。
n 能够提出假设和进行试验验证。
n 尽管已经了解,但仍然进行深入思考。
n 分析其他人的思考方式。
n 根据因果关系进行推导。
不妨将测试团队的工作比喻成足球团队的传球配合,测试人员拿到了一个测试任务,就类似于足球传到他的脚下,他需要针对该测试任务问自己一些问题:
n 我是否能够接住这个传球?
n 我能否确认已经接到了这个球?
n 我有几种方式处理这个球吗?
n 我所承担的角色和任务是什么吗?
n 我的装备是否已经准备好了?
n 我的队友在哪里?
n 当前球场上的形势如何?
n 能否让队友来帮助我?
n 我是否意识到情况的严重性?
n 我是否做好了准备去行动,现在?
一旦测试人员对自己的知识和自己的技能有所了解,接下来就是确定自己的任务,并根据以下因素对产品、需求和模块进行测试分析:
n 产品和项目风险。
n 测试覆盖。
n 测试先知。
n 资源和限制。
n 价值和成本。
n 已存在的缺陷。
在初始分析结束后,测试人员可以开始探索式测试,通过“提问«回答”的循环不断地对产品进行试验。通常,一次试验包含配置、操作、观察和评估四个步骤。
那么测试人员是怎么来进行试验的呢?具体包括如下几个步骤。
(1)配置:安装产品,准备测试数据和工具,驱动产品进入特定的状态以待测试,根据自己的测试任务准备测试先知和启发式问题。
(2)操作:通过试探性的输入向产品提问。
(3)观察:收集关于这个产品是如何工作(利用正确和错误的输入)的信息来评价产品是否正常工作。
(4)评估:应用测试先知发现和确认产品缺陷。
在实验过程中,测试人员可以利用如下思路实施探索。
n 充分利用自己现有的资源,包括用户、文档信息、开发人员关系、同事、设备和工具和计划等。
n 综合使用多种测试技术,包括功能测试、域测试、压力测试、场景测试、用户测试、风险测试、声明测试(针对重要客户的声明内容进行测试)和自动化测试等。
n 利用自己实际能够做的东西,包括自己擅长的技术、最容易暴露问题的数据问题和可利用的硬件资源等。
Ø 尽可能发散地(De-Focus)测试:
Ø 从一个不同的产品状态开始测试。
Ø 优先执行复杂且有约束条件的操作。
Ø 从系统模型的变化中产生测试思路。
Ø 质疑我们的试验流程和工具。
Ø 试着去观察每个产品细节,从中获取测试灵感。
第1章提到了探索式测试的定义:测试相关学习、测试设计、测试执行和测试评估是并行实施的。所以,测试执行的过程也是学习的过程,即通过测试来学习(Testing to Learn)。其中,测试学习通常包含如下几个步骤。
(1)形成一个关于产品功能的模型。
(2)了解这个产品旨在完成什么任务。
(3)列出需要测试的产品元素。
(4)尝试构建多个测试先知,例如参考HICCUPPS(F)启发式规则开发一批针对当前产品的测试先知。
(5)产生测试数据。
(6)考虑被测产品的可测试性和尝试不同的测试工具。
(7)尝试用多种不同的方法去试验。
(8)报告所发现的产品缺陷。
在测试与学习的过程中存在分支是正常的。测试人员需要不停地产生新的分支(测试思路),而不是一条直线走到底。因为通常难以预料走另外一个分支后会发生什么事情(也许会发现重要的新信息或隐藏的缺陷)。但凡事都有个度,测试人员需要定期去检查现在测试的模块是否与分配到的测试任务相一致,防止将过多的时间花在非测试任务上,否则就得不偿失了。
在试验的过程中,测试人员可能遇到令人困惑的问题。这时,他可以考虑使用以下方法来解除疑惑。
(1)简化自己的测试思路。
(2)保留测试现场并寻求帮助。
(3)不断重复执行自己的操作。
(4)返回到一个已确认过的状态。
(5)一次只考虑一个因素,一次只修改一个因素。
(6)做出精确的观察。
在探索式测试过程中,测试人员的下一个测试思路往往是不可预知的。在很大程度上,下一个思路取决于本次测试用例的执行情况。有时,测试人员需要自问:是沿着当前思路继续挖掘,还是更换思路另辟蹊径?这时,可以参考“陷入与退出”(Plunge in and Quit)策略[Kaner01]:面对复杂的产品,先深入研究30分钟或1小时,然后停下来做些别的工作。经过几轮的陷入与退出,就会开始理解产品的模式和轮廓,并在头脑中形成更系统、更具体的测试和研究策略。
本文节选自《探索式测试实践之路》一书
史亮,高翔著
电子工业出版社出版