(3)交替思维

  怎么样克服测试的心理定势、避免测试的盲区呢?

  也许你会说,我不用探索性测试,我用脚本化测试(Scripted Testing,这里对脚本化测试的理解与Cem Kaner在http://www.kaner.com/pdfs/ValueOfChecklists.pdf里对Scripted Testing的描述是一致的)方法,测试前仔细阅读需求规格说明书,这样我可以事先知道一共有多少个点需要测试了,不会遗漏。这样做其实并不能从根本上解决问题。

  首先,需求一旦写成文档,是不完整或不足够细致的需求了。你并不能依赖需求文档的完整性来避免漏测。而且,算在测试执行之前,你已经了解了所有的需求,测试的心理定势以及其他一些因素仍然会致使你漏掉一些缺陷。

  其次,如果过于依赖脚本化测试方法,你的测试思路会不知不觉地受文档描述的影响。我们有另外一个人对插入页码功能也进行了测试。与我们的测试过程不同,他先阅读插入页码的帮助,然后再开展测试。结果,我发现他的测试过程有很多“受文档影响的痕迹”。对于文档中没有提到的部分,他很少会关注。比如“对页码的形状进行编辑”、“对过大的文件”来测试等等这样的操作”;而对于文档中提到的部分,他会关注较多,比如帮助中有这么一句话:“您可以将页码添加到文档的顶部、底部或页边距。保存在页眉和页脚或页边距中的信息显示为灰色,并且不能与文档正文信息同时进行更改”,很显然这句话给他留下了深刻的印象,所以他在测试中时不时地会验证一下页码信息和正文信息是否可以同时修改。是的,我这里用的词是“验证”,也可以叫“检查”,可以对应到英文的checking,我是说他的测试过程更偏向于checking,而不是testing。关于checking和testing的区别,可以参考Michael Bolton的博文,http://www.developsense.com/blog/2009/08/testing-vs-checking/。更偏重于checking的人,测试执行时会更倾向于去验证一下他之前认为的一个结果是否正确;而更偏重于testing的人,测试执行时会更多地想发现一些之前没有想到的情况、发现一些新的信息、获得对真实的系统更深一些的理解。

  克服心理定势、避免测试盲区,可能有很多种方法,比如运用系统性思维(Systems Thinking),散焦思维(Defocused Thinking),交替思维(Alternation Thinking)等,关于这些概念的更多信息,可以参考James Bach的书《Scerets of a Buccaneer-Scholar》,也可以参考这本书《经典思维50法》,里面有不少有趣的例子。限于篇幅,这里只分享一下我对交替思维的理解。

  你在测试时,是否有这样的时候,绞尽脑汁也发现不了什么问题、缺乏新的测试思路,或者感觉当前有点混乱、测试效率很低;或者当你读一本书的时候,读了一段时间,发现大脑反应有点迟钝、阅读效果极差、感觉有点烦躁。这个时候,并不是你不专心高效测试了、不爱读书了,而是你的大脑给你传来一个信号:我已经接受了太多的信息,请您休息片刻,让我消化消化,再继续工作。此时,是你运用交替思维的时机,你可以做些其他的事情转移当前的注意力,比如随便点击鼠标试试其他的功能、比如整理一下你的测试记录、或者干脆休息一下。虽然你在休息,但你的大脑并没有休息,它在消化吸收刚才的信息,当你再次开始测试时,你会发现测试效率提高了、测试思路打开了,往往会有意想不到的收获。

  所以,下次测试的时候,不妨注意一下你是否也存在某种心理定势?这种心理定势是如何影响了你的测试效果?你的测试深度与测试广度又是如何平衡的?有意识地运用一下交替思维、系统性思维等思维方式,让你的测试更加高效起来!