这在心理学上称为“心理定势”,指的是一个人看问题一旦形成某种模式后,就不再思考了;但是如果暮然回首再回头看时,会觉得原来不是没得可为、不能再做什么事了,而是看待问题又有了新的突破。这种心理现象在测试中是普遍存在的。
前一段时间,我和另外几个人对同一被测对象各自单独进行了探索性测试。被测对象是Word2007的插入页码功能。在1小时的探索中,我测试了插入页码在页面顶端、底端、页边距、当前位置,以及设置不同的页码格式、删除页码功能,发现缺陷集中在“在页面上编辑页码格式”( 比如放大页码格式的形状、移动其位置等等)以及对超大文件插入页码方面;由于页码删除功能比较简单,只测试了少许时间,认为其风险比较低。总体而言,我对这次探索性测试比较满意。
可是,当我观察另外一个人的探索性测试时,我惊奇地发现,还有这样一个重要的功能完全不在我的视线范围之内:编辑某种页码格式的属性。按如下的操作步骤:插入—页码—页面顶端—普通数字1—右键点击鼠标,选择“编辑属性……”,则弹出“修改构建基块”的对话框,用户可以编辑修改此种页码格式相关的属性。同时我发现,她花费了较多的时间测试“删除页码”的功能,并且发现了一些问题。为什么会出现如此的差异呢?这些功能和问题为什么我没有发现呢?一个直接的原因就是,我把注意力集中在每种页码格式可能存在的问题上,每次选择一种页码后,直接点击鼠标左键,然后急于观察这种页码格式显示是否正确、当我改变其形状移动其位置后表现是否正确,从来没有想过点击鼠标右键。这么做,好的方面是,我找到一个点后,对这个点的测试会比较深入(Test in Depth);不好的方面是,测试宽度上(Test in Width)容易有所遗漏。
这里面有几个有趣的点值得深入探讨一下。
(1)心理定势
“总是直接点击鼠标左键、从来没有想过点击鼠标右键”,这虽然描述的是我的动作,但是一个人的行为取决于他/她(下文统一用“他”代替了)的思想和意识。
我的心理定势是:我认为插入页码的主要功能就是“插入各种格式的页码”,主要的风险也在这里,所以我的注意力也集中在“每种页码格式可能存在的问题上”。当我把这个集中的点进行了较充分的测试,并且真的发现了其中的一些问题,并且对这些问题进行了进一步的调查后,我就会认为:这次测试还是有些收获的、差不多可以结束了、主要的点基本都覆盖过了、应该没有什么大问题了,对那些可能被遗漏的点(比如“编辑属性”功能)和那些未知的缺陷(删除页码相关的缺陷)却浑然不觉。
当然,如果我再进行一轮测试,很有可能会突破前一轮测试的思维定势,找到新的测试点、找到新的缺陷。所以,从测试的心理定势我想到的,为了保证更好的测试效果,使不同的测试人员对同一个被测对象展开测试、或者同一个测试人员在不同时间对同一被测对象展开不只一次的测试,是很有必要的。
(2)深度测试与广度测试
注意,在上面的分析中,我把“并且真的发现了其中的一些问题”重点强调了一下。如果我把注意力集中在“每种页码格式可能存在的问题上”,却什么问题也没有发现,会怎么样呢?也许,我会怀疑之前自己对风险的假设,从而关注其他值得深入测试的点,也许就能发现上述的测试盲区。这说明,发现的缺陷往往会阻止缺陷的发现。
这句话的意思是,当我发现了一个缺陷,我就会花费时间去调查这个缺陷,它真的是个缺陷吗?还是我测试过程出现了问题?这个缺陷有可能导致什么问题?到底如何触发这个缺陷的?有没有其他值得进一步挖掘的缺陷?对于一个优秀的测试人员来讲,解答这些问题的过程才是真正有趣的测试过程,就像一名猎手闻到猎物后开始的一系列追踪的过程,充满希望和挑战!但测试也是充满矛盾的过程:测试需要这种深入的测试过程,深入的测试才能发现有价值的缺陷,可是发现了缺陷就会占用你的测试时间、放缓你的测试脚步、“占用”你的测试思维,让你没有更多的时间、也无法避免地忽视其他的缺陷,从而导致测试的遗漏,所以总是要在深度测试和广度测试之间把握一定的平衡。
本文中提到的探索性测试的例子,我更偏向于深度测试,而另外一个人更偏向于广度测试。如果用那个沿着一条路挖水井的例子做类比,我挖了很多坑,大部分都挖了100米,最终找到了4口井;她挖了更多的坑,都不超过50米,找到了2口井。其实,更好地平衡深度测试与广度测试的话,我们都可以挖掘出更多的更有价值的井。
由深度测试与广度测试,还可以联想到另外一个测试中的矛盾点:你可以相信测试人员提供的对被测对象质量的评价,但你又不能完全相信这个评价。深度测试更多与降低风险相关,广度测试更多与增加覆盖相关。无论测试人员做到怎样的平衡,都不能同时做到100%的深度测试和100%的广度测试,也就是说,不可能既降低了所有的质量风险、又覆盖了所有应该覆盖的东西。我们知道,每个测试人员都是基于他的测试情况给出他对被测系统质量的评价。比如,基于我的测试过程,我认为Word2007的插入页码功能在页数较多的大文件插入页码时存在质量风险、系统对不同种类页码格式的处理有所不同(我的感觉)因而需要分别测试、对页码形状进行编辑等操作容易引起问题;而另外一名人员经过他的测试过程,认为Word2007的插入页码功能质量不错,只有一些小的GUI界面提示性问题,没有什么大的问题,无需对每一种页码格式进行单独测试。作为测试管理者,你应该相信每一位测试人员提供的质量评价,因为这个测试结论是测试人员基于他的测试过程对质量的真实理解,但是你显然不能尽信这个观点,因为这个真实的理解并不代表真实的质量信息,只是目前测试人员能够觉察到的质量信息(Perceived Quality),你还要去了解这个观点是在什么样的测试深度和测试广度下得出的结论。
(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法》,里面有不少有趣的例子。限于篇幅,这里只分享一下我对交替思维的理解。
你在测试时,是否有这样的时候,绞尽脑汁也发现不了什么问题、缺乏新的测试思路,或者感觉当前有点混乱、测试效率很低;或者当你读一本书的时候,读了一段时间,发现大脑反应有点迟钝、阅读效果极差、感觉有点烦躁。这个时候,并不是你不专心高效测试了、不爱读书了,而是你的大脑给你传来一个信号:我已经接受了太多的信息,请您休息片刻,让我消化消化,再继续工作。此时,是你运用交替思维的绝佳时机,你可以做些其他的事情转移当前的注意力,比如随便点击鼠标试试其他的功能、比如整理一下你的测试记录、或者干脆休息一下。虽然你在休息,但你的大脑并没有休息,它在消化吸收刚才的信息,当你再次开始测试时,你会发现测试效率提高了、测试思路打开了,往往会有意想不到的收获。
所以,下次测试的时候,不妨注意一下你是否也存在某种心理定势?这种心理定势是如何影响了你的测试效果?你的测试深度与测试广度又是如何平衡的?有意识地运用一下交替思维、系统性思维等思维方式,让你的测试更加高效起来!
--------------------------转自《2012年第一期电子杂志测试人》作者:邰晓梅------------------------------------