我正在为我维护的应用程序开发自动回归测试套件。在开发自动回归测试时,我遇到了一些几乎可以肯定是错误的行为。所以,现在,我已经修改了自动回归测试,以不记录失败——我的意思是,它故意允许这种不良行为发生。

因此,我对这个网站上其他人的意见很感兴趣。显然,我将在缺陷跟踪中添加一个错误,以确保此错误行为得到修复。但是,是否有任何令人信服的理由(无论哪种方式)要么改变回归测试以不断指示失败,要么让回归测试被破坏并且在我们能够修复有缺陷的行为之前不会失败?我认为这是其他类型问题中的六分之一,但我在这里问是因为我认为其他人可能会有不同的看法。


@保罗·汤布林,

需要澄清的是——我从未考虑过取消测试;我只是考虑修改通过/失败条件以允许失败,而不会在每次运行测试时都将其抛在我面前。

我有点担心由于已知原因而导致的重复失败最终会像 C++ 中的警告一样被处理。我认识一些开发人员,他们在 C++ 代码中看到警告,但只是忽略它们,因为他们认为这些警告只是无用的噪音。我担心在回归套件中留下已知的故障可能会导致人们开始忽略其他可能更重要的故障。

顺便说一句,为了避免被误解,我认为 C++ 中的警告是编写强大代码的重要帮助,但从我遇到的其他 C++ 开发人员来看,我认为我属于少数。

有帮助吗?

解决方案

我会说“天哪,是的!”。简单的事实是,它失败了吗?是的!那么应该将其记录下来。如果允许失败的测试通过,那么您的测试就会受到严重影响。

我个人担心的一件事是,如果我这样做了,并且在公共汽车下,那么“补丁”可能不会被删除,这意味着即使在“错误修复”之后,错误可能仍然存在。

把它留在里面,更新你的项目笔记,甚至可能降低严重性(如果可能的话),但绝对不要破坏正在检查损坏的东西;)

其他提示

如果你停止测试它,你如何知道它何时被修复,更重要的是,你如何知道它是否再次损坏?我反对删除测试,因为您可能会忘记再次将其添加回来。

我们在单元测试中添加了“暂停”功能。这允许使用一个属性来注释测试,该属性基本上表示“忽略从该日期起 X 周内的故障”。开发人员可以注释他们知道暂时不会修复的测试,但将来不需要任何干预来手动重新启用它,测试只会在指定时间弹回到测试套件中。

如果它没有达到预期的效果,它应该仍然是失败的。

否则,太容易被忽视。让事情变得简单——要么有效,要么无效。失败或成功:)

——凯文·费尔柴尔德

虽然我同意 Paul 所说的大部分内容,但争论的另一面是,严格来说,回归测试应该测试程序行为的变化,而不仅仅是测试任何旧的错误。他们特别应该在你破坏了曾经有用的东西时告诉你。

我认为这可以归结为在此应用程序上运行的其他类型的测试。如果您有某种单元测试系统,也许这将是更适合此测试的地方,而不是回归测试(至少在错误修复之前)。但是,如果回归测试是您唯一的测试,我可能会将测试保留在原处。

虽然最好是在存在错误时让测试失败,但这通常是一个不切实际的选择。当第一次向某个区域添加测试时,特别容易陷入所发现的错误中,从而无法完成主要目标。此外,长期失败的测试会变得非常噪音,越来越容易被忽视。

编写失败的测试是修复错误的一部分,并且只有当修复这些错误很重要时才真正重要。这应该根据您当前的产品和质量优先级来确定。如果您碰巧将测试作为其他工作的副作用而进行,那很好,但不应该让您分散对实际优先事项的注意力。

我建议在改进测试时发现任何错误,并针对它们提交错误。这是一种广度优先的方法,可以帮助您完成当前任务,同时也可以实际运用您所学到的知识。当错误被安排修复时,测试可以很容易地变成真正的失败。

与其他受访者不同,我认为失败和警告一样容易被忽视,并且培训团队忽略失败的成本太高,不能让它发生。如果您在这项工作中产生了失败的测试,那么当任务正在改进它时,您将破坏回归测试套件的实用性。

考试失败是一种令人烦恼的事情。损坏的代码和未完成的代码之间是有区别的,是否应该立即处理测试取决于失败的测试所暴露的情况。

如果它坏了,你应该尽早修复它。如果没有完成,等有时间再处理。

无论哪种情况,显然你都可以忍受它的不良行为(目前),所以只要问题被记录下来,你最好不要让它纠缠你,直到你有时间解决它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top