测试失败:误报或漏报

Dav*_*ave 6 testing naming-conventions

如果我的单元测试失败,但底层代码确实有效,那么这会被称为误报还是假阴性

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

我的问题只是与命名法有关.我找到了人们称之为的例子.在阅读维基百科之后,我认为这是一个误报,但值得注意的是,Andrew Ng在他的机器学习课上说:

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

boa*_*der 9

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

  • 如果代码被破坏,但测试通过; 这是假阳性.

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

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

  • 如果代码失败并且测试失败,则这是真正的否定.

  • 这个答案虽然是投票最多的答案,但根据参考书目并不正确。请看我下面的回答。 (5认同)
  • 因此,我认为对此做出回应的最佳方法如下: **误报**(“误报”)是表示已满足给定条件的结果,但尚未满足。**假阴性**是测试结果表明条件失败但成功的情况。即错误地假设没有影响。如果我的代码被破坏并且测试通过,则不会发出警报。没有假设任何影响,因此假阴性。如果代码正确,但测试失败,则会发出警报,因此是误报。所以情况正好相反。 (4认同)

Sha*_*rky 5

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

至少在 Gerard Meszaros 的“XUnit 测试模式:重构测试代码”一书中定义了误报和漏报。

理解这一点的一种简单方法是将其视为医学中的“测试疾病”。

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

在我们的软件世界中,你可以这样想:

一个测试,意味着你是积极的一个bug,即测试失败,因为你是“NullReferenceExceptionitis-积极

一个测试,意味着你是负的错误,即测试通过,因为你是“StackOverflu-

因此,请记住错误 = 疾病和:

一个阳性(一个bug)意味着你的代码错误地指责有一个错误。(您的代码没有错误,但测试失败)

一个阴性(一个bug)意味着你的代码错误地宣布为没有错误。(您的代码有错误,但测试通过)

一个正意味着你的代码是理所当然(真正的)指控有错误。(您的代码有错误,测试失败)

一个TRUE负意味着你的代码是理所当然(真正的)声明没有错误(你的代码有没有bug,测试通过)

我希望这有帮助。

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

从那本书中:

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

还:

假阴性

即使被测系统 (SUT) 未正常工作,测试仍通过的情况。据说这样的测试会给出假阴性指示或“假通过”。另见:误报。

假阳性

即使被测系统 (SUT) 正常工作但测试失败的情况

  • @dancarter 正如您在 https://martinfowler.com/books/meszaros.html 中看到的那样(我相信 Martin Fowler 不需要介绍),我在回答中提到的这本书得到了很多赞扬。该书中的信息也存在于作者的网页上:http://xunitpatterns.com/false%20positive.html “当测试失败时,即使被测系统 (SUT) 正常工作,该测试也会被称为给出假阳性指示或“假故障”。该术语来自统计科学,当我们试图计算发生某些观察错误的概率时。 (2认同)