我有一个测试,而测试将会有错误发生(确定迄今为止),但后来,他经常报道它的时候了。我们(开发)后来发现那个测试还没有试图再现的问题,(当要求)无法找到一种方法来让它再次发生。

现在,这些仍然是错误的,我不想忽略他们。但没有重现的步骤,我卡住了.有时候,有一个堆栈(虽然经常是没有用的,因为这是紧凑的框架,也没有线数)。但是当有一个我可以带堆跟踪和裂开放的代码并开始猜测,但是,这并不会导致可检验"修正".

你是做什么的情况下这样吗?

有帮助吗?

解决方案

没有上下文的错误不是错误,而是flu虫。问题可能是您的代码,它可能是第三方库,它可能是硬件,也可能是太阳辐射,导致单个位置自行翻转。如果您至少不能复制 一些 规律性(即使“我只发生一次或20次我做X”一次),它并不比您的测试人员告诉您“某处出现某种问题 - 以某种方式解决了”。

您可能必须向您的测试人员解释说,他的工作不仅要生成输入,直到某些东西破裂。如果是这样,您可以用随机数生成器代替他。他的工作的一部分是识别错误,这需要确定如何生产它们。

其他提示

最后,如果既没有开发,也没有测试可以重现错误应该关闭,但标记。

然而,需要多长时间你要得到这一点是值得商榷的。

一些人会争辩说,如果不是立即可重复随后应当立即关闭.

我通常努力试图获得更多的信息从始发的问题。有可能是他们忘记了在原始报告。有一对话有关的必要的步骤往往能揭示的丢失的信息。

一个最后的想法-闭为"没有重现" 不不 意思是固定的。如果有一个真正的问题,它将显露自己迟早和具有所有的信息可以将帮助当你终于可以重现的问题。

还有一些建议:

  1. 将记录(而不仅仅是键盘记录器:})添加到您的产品代码中。 “没有repro”的错误可能是漏洞,但它们可能是记忆或状态损坏,仅在以意外的方式使用的肮脏系统上发生(即像客户计算机一样)。记录或跟踪信息可以帮助您弄清楚什么 可能 当测试人员发现fluke时,已经错了。

  2. 扫描数据库中的其余“无repro”错误(或用于错误跟踪的任何内容)。通常,Flukes在产品的一个区域中汇合在一起。如果一个组件看起来像是故障,请查看组件是否可能存在片段,请在该组件或两者中添加其他日志记录。

  3. 花半小时左右观看测试器测试。他们的方法可能会使您了解出了什么问题(例如,“有趣 - 我不知道您可以这样进行对话”)。您可能还会发现他们无意间跳过对话框或配置步骤。值得花时间投资,让他们陷入困境。

我在大型商业代码上做质量检查,这种令人讨厌的场景确实经常出现。通常,这表明没有在我们支持的所有平台上构建二进制文件的铁克经验。因此,如果开发人员构建了自己的代码(他必须进行调试和修复),并且不遵循同一构建程序与信件的相同构建程序,那么有可能系统依赖的错误似乎会神奇地消失(或出现) 。当然,这些事情通常会在错误数据库中使用“为我工作”而被关闭,如果下一次问题在运行时,可以重新打开该错误。每当我怀疑一个错误可能与系统有关时,我都会尝试在各种平台上对其进行测试,并报告在哪些情况下发生的情况。通常,如果损坏的数据足够大以造成崩溃,则记忆损坏问题会出现。某些平台(HW和OS组合)可能会更接近腐败的实际来源,这对于必须调试它的可怜人来说非常有价值。

测试人员还需要做一些增值,不仅报告他的系统显示出失败。我花了很多时间来筛选误报 - 也许该平台被超载,或者网络有一个小故障。是的,有时您会得到真正受随机定时事件影响的东西,硬件错误通常就像触发示例:如果两个数据请求返回完全相同的时钟周期,并且处理潜在冲突的硬件逻辑是错误的,则然后,该错误只会间歇性出现。同样,通过并行处理,除非通过仔细设计,否则您将解决方案限制为独立于哪个处理器碰巧更快,您可以得到只有一次在蓝色月亮中发生的错误,而他们的统计知名度使调试使调试成为一场噩梦。

另外,我们的代码正在更新(通常每天很多次),跟踪一个确切的Sourcecode修订号,因为它何时向南进行,这对于调试工作而言是非常有用的信息。测试人员不应与辩论者和开发人员建立对抗性关系,他是团队中提高产品质量的一部分。

有两种不可再现的错误:

1)那些测试仪(或用户)已经看到过一次但无法或未尝试复制的人。

在这些情况下,您应该:

  • 非常简短地检查基本的动作过程,该过程表明缺陷以确保其不可再现。

  • 与测试人员 /用户交谈以查看是否还有其他信息可能有帮助。

  • 将它们与可能与您是否有足够信息有关的任何其他缺陷进行交叉引用。您可能会发现,这个问题没有给您足够的信息来继续,但是当与其他许多问题相结合时,可能会向您建议一些不正确的事物。

  • 如果您仍然没有足够的时间,那么您需要向用户 /测试人员解释您没有足够的信息。礼貌地概述他们的信息会是什么样,以及为什么需要它。

2)那些无法可靠地再现的人,但是有足够的证据(就重复发生的情况而言)表明确实存在缺陷,然后我倾向于看到这些是开发人员问题,而开发人员 - 由测试人员支持的开发人员/用户 - 需要调查。

这可能会缓慢而痛苦,您可能不得不漫步代码,添加更多记录,查看数据并深入与测试人员 /用户交谈,但是如果有足够的证据表明它可能有可能在那里您确实需要拥有它的所有权,并尽一切努力解决它。

听起来这是相对频率发生的 - 这让我感到奇怪,是因为大多数错误确实很难重复,还是出于某些其他原因,他没有尝试?你知道吗 为什么 他不是试图重现这个问题吗?是因为他没有意识到这对您有多重要吗?还是他还有其他压力 - 例如,一位只想让他快速通过分配的测试并将虫子扔到墙上的测试经理?也许他只是不确定该怎么做?

我同意其他人的观点,即优先考虑更好的伐木。同时,如果您怀疑缺乏测试人员的技能/信心可能是一个问题,那么我真的很喜欢 丹尼(Danny - 您可以将他指向这一点。

如果事实证明问题是由于管理压力所致 - 您有我的同情,因为这很难破解,尤其是如果测试人员和程序员向不同的经理报告,并且管理人员不愿意“帮助”另一个团队。

通常,我注意到它是不可再现的,但是在完成一批测试或迭代之前,将其打开。

如果没有在这一点之前再现它已关闭,但是如果再次遇到,则可以重新打开。

在此测试仪的工作站上贴一个钥匙记录员!

好吧,第一个任务是拥有可重现的测试系统。您的测试仪 必须 有一个定义明确的过程 - 如果可能的话,请自动。

有这三个条件:

  • 同一二进制
  • 相同的步骤
  • 同一机器

如果该错误偶发出现在上述3个条件下,请开始进一步隔离。考虑系统堆栈的每个级别及其配置。

检测内存管理错误的一种方法是使用多个编译器在多个OSS上运行该程序。 Valgrind也可以提供帮助。

但是,通常并行系统有责任诱导非Repro错误。诸如缓冲尺寸和处理速度,异步IO,数据库锁,可变内存写入交织之类的东西;所有这些都可以产生问题。等等,等等。

首先,您应该有一个严格的测试程序(但我了解您,在我的公司中,您所描述的内容经常发生)。

根据错误的严重性,您可以在其中投入一些时间,或者(更好)忽略它,直到提供Repro步骤为止。

许可以下: CC-BY-SA归因
scroll top