测试的心理定势

文章探讨了在测试过程中如何克服心理定势,如过度关注已知问题而忽视新发现,强调了深度测试和广度测试的平衡。通过Word2007插入页码功能的案例,揭示了探索性测试和个人心理定势对测试结果的影响,并提倡运用交替思维和系统性思维提高测试效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

岳晓东博士在中国版幸福课《幸福在我心》中,拿出一副达·芬奇的画作《蒙娜丽莎》让听众观察画里面还有什么。有的看出画里面有一只猫,有的看出画里面还有一只狗,有的人除了蒙娜丽莎怎么也看不出来画里面还有什么……如果你看不出有什么动物,休息一会儿,再看这幅画时,也许就能看到了。
这在心理学上称为“心理定势”,指的是一个人看问题一旦形成某种模式后,就不再思考了;但是如果暮然回首再回头看时,会觉得原来不是没得可为、不能再做什么事了,而是看待问题又有了新的突破。这种心理现象在测试中是普遍存在的。
前一段时间,我和另外几个人对同一被测对象各自单独进行了探索性测试。被测对象是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年第一期电子杂志测试人》作者:邰晓梅

内容概要:本文详细探讨了制造业工厂中两条交叉轨道(红色和紫色)上的自动导引车(AGV)调度问题。系统包含2辆红色轨道AGV和1辆紫色轨道AGV,它们需完成100个运输任务。文章首先介绍了AGV系统的背景和目标,即最小化所有任务的完成时间,同时考虑轨道方向性、冲突避免、安全间隔等约束条件。随后,文章展示了Python代码实现,涵盖了轨道网络建模、AGV初始化、任务调度核心逻辑、电池管理和模拟运行等多个方面。为了优化调度效果,文中还提出了冲突避免机制增强、精确轨道建模、充电策略优化以及综合调度算法等改进措施。最后,文章通过可视化与结果分析,进一步验证了调度系统的有效性和可行性。 适合人群:具备一定编程基础和对自动化物流系统感兴趣的工程师、研究人员及学生。 使用场景及目标:①适用于制造业工厂中多AGV调度系统的开发与优化;②帮助理解和实现复杂的AGV调度算法,提高任务完成效率和系统可靠性;③通过代码实例学习如何构建和优化AGV调度模型,掌握冲突避免、路径规划和电池管理等关键技术。 其他说明:此资源不仅提供了详细的代码实现和理论分析,还包括了可视化工具和性能评估方法,使读者能够在实践中更好地理解和应用AGV调度技术。此外,文章还强调了任务特征分析的重要性,并提出了基于任务特征的动态调度策略,以应对高峰时段和卸载站拥堵等情况。
内容概要:本文介绍了一个使用MATLAB编写的基于FDTD(时域有限差分)方法的电磁波在自由空间中传播的仿真系统。该系统采用了ABC(吸收边界条件)和正弦脉冲激励源,并附有详细的代码注释。文中首先介绍了关键参数的选择依据及其重要性,如空间步长(dx)和时间步长(dt),并解释了它们对算法稳定性和精度的影响。接着阐述了电场和磁场的初始化以及Yee网格的布局方式,强调了电场和磁场分量在网格中的交错排列。然后详细讲解了吸收边界的实现方法,指出其简单而有效的特性,并提醒了调整衰减系数时需要注意的问题。最后,描述了正弦脉冲激励源的设计思路,包括脉冲中心时间和宽度的选择,以及如何将高斯包络与正弦振荡相结合以确保频带集中。此外,还展示了时间步进循环的具体步骤,说明了磁场和电场分量的更新顺序及其背后的物理意义。 适合人群:对电磁波传播模拟感兴趣的科研人员、高校学生及工程技术人员,尤其是那些希望深入了解FDTD方法及其具体实现的人群。 使用场景及目标:适用于教学演示、学术研究和技术开发等领域,旨在帮助使用者掌握FDTD方法的基本原理和实际应用,为后续深入研究打下坚实基础。 阅读建议:由于本文涉及较多的专业术语和技术细节,建议读者提前熟悉相关背景知识,如电磁理论、MATLAB编程等。同时,可以通过动手实践代码来加深理解和记忆。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值