如何复现难以复现的缺陷

简介: 重现缺陷很容易陷入盲目的尝试,直到测试人员感到疲倦而放弃,也没有多少进展。提出错误猜测使得测试有明确的目标,在它的指引下测试人员可以自由发挥,而不会迷失方向。整个过程的特征是设定明确的目标、用实验去获得信息、根据新信息建立新目标。

调查一个难以重现的缺陷与软件调试非常相似,测试人员可以借鉴一些调试原则和方法。可以试试一下9条调试规则不但可以指导调试,还能帮助测试。
1.理解系统(Understand the system) 。解决一个具体问题,很多时候需要在整体上理解系统。重现一个缺陷也要求测试人员在宏观上和细节上都能把握软件。在项目全程,测试人员需要积极地学习被测软件的领域知识、产品架构、代码实现、技术平台、调试工具等。只有较全面地理解软件,才能有效地分析信息、设计实验、快
速测试。软件开发与测试没有捷径,持续积累才是正途。
2.制造失败(Make it fail) 。影响软件行为的因素包括软件自身的状态和软件的外部输入(用户的输入、操作系统的输入、其他软件的输入等)。测试人员应该列举这些影响软件行为的因素,并分析哪些因素可能与当前缺陷有关。然后,他需要大量尝试这些因素的取值组合,并试着总结缺陷重现的模式。有时测试人员需要求助于程序员,让他提供更好的测试钩子以控制软件的状态和输入,或提供更好的调试日志以了解软件的状态和输出。
3.观察先于思考(Quit thinking and look) 。在猜测引发错误的原因之前,应该仔细地观察软件的状态、操作系统的状态、所依赖的软件或服务的状态,并分析软件的输入数据和输出数据。细心观察可以更好地推测缺陷原因,设计更有效的测试,相反,凭空猜测很可能使测试误入歧途,费时费力却没有收获。
4.分而治之(Divide and conquer) 。如果运行一次测试需要大量的准备工作(如初始化数据库、复制数据文件、重启服务等),测试就不能提供快速的反馈,缺陷调查的效率就很低。为此,测试人员需要建立一个可以快速测试的环境,这通常需要隔离一些无关的数据、软件和服务,也需要测试钩子的帮助。在此环境中,测试人员通过逐次逼近来缩小搜索的范围,即通过测试来排除一些影响软件的因素,从而慢慢锁定若干重要的因素。
5.一次只做一处修改(Change one thing at a time) 。在科学实验中,科学家一次只修改一个变量的值,从而了解该变量对于实验结果的影响。同样,在测试中,测试人员一次只修改一个变量的值,从而了解它对软件行为的影响。
6.保持审计跟踪(Keep an audit trail) 。在调查过程中,要记录下所做的测试和测试结果。魔鬼隐藏在细节中,而人的记忆总是不可靠的。应该将测试、软件和环境的细节记录下来,作为缺陷报告的一部分。
7.检查基本假设(Check the plug) 。如果测试人员的调查没有进展,他也许要质疑一下他的基本假设。面对复杂的问题,测试人员的思考常常基于一些能简化情况的假设,例如他会假定“服务器返回的数据应该是没问题的”、“这个模块一直很稳定,不会出错”、“错误检查代码一定能过滤掉无效的输入数据”等。这些假设在大多数时候成立,但是并非永远如此,要质疑并检查它们。
8.获得全新视角(Get a fresh view) 。如果重现的努力没有成功,测试人员可以向程序员或测试同伴请教。软件是如此的复杂,每个人都有盲点。向别人解释问题,会强迫测试人员组织思路,这有助于他跳出原来的思维模式,获得新的见解。也许叙述完毕,测试人员就获得了新的测试灵感。此外,被咨询人可能知道一些知识,能够提供有效的测试策略或关键线索,这会显著提高调查效率。
9.如果你没有修复它,它就一直存在(If you didn't fix it, It ain't fixed) 。当重现缺陷的努力失败时,测试人员不能简单地说:“它一定随风而去了。”缺陷在测试环境中不出现,但可能在用户的环境中出现,更可能在公司领导向媒体做公开演示时出现。为了让项目团队获得必要的信息,测试人员应该提交缺陷报告。调查不可重现的缺陷可能是一个“时间黑洞”。测试人员应该根据缺陷的严重程度,设定不同长度的时间盒。在时间耗尽时,他可以自问:“是否追加一个时间盒继续调查?在下一个时间盒中能获得突破吗?对于项目而言,是继续调查还是开始新的测试更有利?”经过评估,他可以决定是继续调查,还是结束调查并提交缺陷报告。

相关文章
|
5月前
|
测试技术
无法复现的bug,如何处理?
无法复现的bug,如何处理?
420 0
|
1月前
|
测试技术 UED
软件测试中的探索性测试:一种有效的缺陷检测方法
探索性测试,作为一种灵活且强大的软件测试技术,越来越受到测试人员的青睐。它不仅依赖于预定义的测试用例,而是依靠测试人员的经验和直觉,动态地探索软件以发现缺陷。本文将深入探讨探索性测试的核心概念、优势以及如何在现代软件测试中有效应用这一方法。通过具体实例和实践技巧,我们将揭示如何利用探索性测试提高软件质量和测试效率。
21 4
|
2月前
|
机器学习/深度学习 机器人 数据库
FoundationPose复现及Realsense应用
文章概述了FoundationPose项目,一个由Nvidia开发的用于新对象6D姿态估计和跟踪的统一模型,支持模型基础和无模型设置,通过合成数据和大型语言模型实现强泛化能力,并提供了复现和应用的详细步骤。
128 0
FoundationPose复现及Realsense应用
|
程序员
缺陷(bug)管理
理论上软件的缺陷是可修复的,不过有的修复成本比较高,不能追求软件的完美,根据风险来确定是否修复缺陷
|
测试技术
测试中的误报和漏报同样的值得反复修正
测试中的误报和漏报同样的值得反复修正
216 0
|
测试技术
如何处理不能复现的bug?软件测试工程师避坑指南
软件测试工作中常常会遇到不能复现的bug,遇到这种情况其实很正常,但是很多测试新手都按照自己的想法处理,没有提交bug,或者匆匆关闭bug。线上出现问题,就只能自己背锅了。
526 0
|
运维 Cloud Native 测试技术
高质量的缺陷分析:让自己少写 bug
缺陷分析做得好,bug 写得少。阿里资深技术专家和你分享如何进行高质量的缺陷分析,总结了 5 个要点,通过缺陷分析消除开发中的各种盲点,打造一个学习型的团队。
高质量的缺陷分析:让自己少写 bug