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