如果我的单元测试失败,但基础代码确实有效,那么这会被称为误报,还是误判?
(这是上下文。我并行运行了一堆测试,有些测试失败。我按顺序运行它们都通过。所有代码实际上都有效,并行测试运行器只有一个问题。)
我的问题仅在于命名法。我找到了人们称之为的例子。在阅读Wikipedia之后,我会认为这是误报,但值得注意的是Andrew Ng在他的机器学习课上说:
如果测试通过,即使代码被破坏,这也是误报。如果测试失败,当代码没有被破坏时,这是一个假阴性。
答案 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- 负定” strong>“
因此,请记住 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的答案的假阴性
因为测试无法断言代码是否正常工作(存在工作代码)。