测试失败:误报或漏报

时间:2017-05-01 21:42:55

标签: testing naming-conventions

如果我的单元测试失败,但基础代码确实有效,那么这会被称为误报,还是误判

(这是上下文。我并行运行了一堆测试,有些测试失败。我按顺序运行它们都通过。所有代码实际上都有效,并行测试运行器只有一个问题。)

我的问题仅在于命名法。我找到了人们称之为的例子。在阅读Wikipedia之后,我会认为这是误报,但值得注意的是Andrew Ng在他的机器学习课上说:

  

如果测试通过,即使代码被破坏,这也是误报。如果测试失败,当代码没有被破坏时,这是一个假阴性。

4 个答案:

答案 0 :(得分:6)

单元测试表明代码表现得某种程度。 verbage应该反映出来。

  • 如果代码被破坏,但测试通过;这是误报。

  • 如果代码正确,但测试失败;这是假阴性。

  • 如果代码正确且测试通过;这是一个真正的积极因素。

  • 如果代码失败且测试失败,那就是真正的否定。

答案 1 :(得分:0)

同意boatcoder提到的内容。要添加它,POSITIVE或NEGATIVE一词指的是PREDICTED(在这种情况下是测试输出),TRUE或FALSE指的是关于ACTUAL(代码是否工作)的预测。 例如

当代码工作且测试显示其损坏时,它为FALSE NEGATIVE。这里NEGATIVE是因为测试结果显示为NEGATIVE,但是当代码实际工作时,关于实际的预测是FALSE。因此它的假负面。

当代码不工作且测试显示其损坏时,其为TRUE NEGATIVE。这里,NEGATIVE是因为测试显示代码被破坏并且关于实际的预测是真的。因此真正的负面。

当代码工作且测试显示其工作时,则其为TRUE POSITIVE。 当代码不工作且测试显示其工作时,则其为FALSE POSITIVE。

但是,所有这些都取决于你所谓的积极性。我认为代码工作为POSITIVE :) 希望这有帮助

答案 2 :(得分:0)

我相信这与其他答案所说的相反。

至少那是Gerard Meszaros撰写的“ XUnit测试模式:重构测试代码”一书中定义误报和误报的方式。

一种易于理解的方法是像在医学中那样思考,即测试是“测试疾病”。

如果您患有这种疾病,您就是“疾病-阳性”。

在我们的软件世界中,您可以这样认为:

积极测试,表示您积极发现错误,即测试失败,因为您是“ NullReferenceExceptionitis- 积极

否定测试,表示您对错误负定,即测试通过,因为您是“ StackOverflu- 负定

因此,请记住 bug =疾病,并且:

对错误的 FALSE 肯定表示您的代码被错误指控为错误。 (您的代码没有错误,但测试失败)

对错误的 FALSE 否定(表示错误)表示您的代码被错误声明没有错误。 (您的代码有错误,但测试通过)

肯定的 TRUE 表示您的代码正确(确实)被指控存在错误。 (您的代码中有错误,测试失败)

否定 TRUE 表示您的代码正确(确实)声明没有错误(您的代码没有错误,测试通过)

我希望这会有所帮助。

参考: http://xunitpatterns.com/false%20positive.html

那本书:

  

如果我们在Buggy测试或生产错误方面遇到问题,我们可以   降低误报的风险(当测试通过时通过   不应该)

还:

  

假阴性

     

即使被测系统(SUT)无法正常运行,测试仍通过的情况。据说这样的测试会给出假阴性指示或“假通过”。   另请参阅:误报。

     

误报

     

即使被测系统(SUT)正常运行,测试仍然失败的情况

答案 3 :(得分:-1)

我同意@boatcoder,只是另一种措辞,可能更容易理解:

https://en.wikipedia.org/wiki/Type_I_and_type_II_errors#Type_I_error

  

当零假设(H0)为真时,会发生类型I错误,但会被拒绝。 它声称缺少某种东西,这是一种错误的打击。

这是如果代码被破坏,但测试通过;这是假阳性。来自boatcoder的回答

因为test断言代码正在工作,而不是(工作代码不存在)。

  

当零假设为假时,会发生类型II错误,但错误地无法拒绝。 未能断言现在的内容,一个小姐

这是如果代码正确,但测试失败;这是来自boatcoder的答案的假阴性

因为测试无法断言代码是否正常工作(存在工作代码)。