Testing 测试失败:假阳性或假阴性

Testing 测试失败:假阳性或假阴性,testing,naming-conventions,Testing,Naming Conventions,如果我的单元测试失败了,但底层代码实际工作,这会被称为假阳性,还是假阴性 (这里是上下文。我并行运行了一系列测试,但有些测试失败。我按顺序运行它们,它们都通过了。所有代码实际上都正常工作,只是并行测试运行程序有一个问题。) 但我的问题只是命名法。我也发现有人这样称呼它。阅读后,我会认为这是一个错误的积极,但特别是Andrew Ng在他的机器学习班说: 如果测试通过,即使代码被破坏,那也是假阳性。如果测试失败,当代码未被破坏时,则为假阴性 单元测试是指代码以某种方式运行。措辞应该反映这一点 如果

如果我的单元测试失败了,但底层代码实际工作,这会被称为假阳性,还是假阴性

(这里是上下文。我并行运行了一系列测试,但有些测试失败。我按顺序运行它们,它们都通过了。所有代码实际上都正常工作,只是并行测试运行程序有一个问题。)

但我的问题只是命名法。我也发现有人这样称呼它。阅读后,我会认为这是一个错误的积极,但特别是Andrew Ng在他的机器学习班说:

如果测试通过,即使代码被破坏,那也是假阳性。如果测试失败,当代码未被破坏时,则为假阴性


单元测试是指代码以某种方式运行。措辞应该反映这一点

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

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

  • 代码是否正确,测试是否通过;这是一个真正的积极因素

  • 如果代码失败,测试失败,则为真负


最后我要补充一点,这并不重要。如果测试未通过,您将向生产部门发送一个bug。如果一个测试在应该通过的时候没有通过,那么您就延迟了交付生产。为假/真阳性/阴性而斗争是在船下沉时重新安排甲板椅。

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

当零假设(H0)为真,但被拒绝时,会发生I型错误它是在断言一些不存在的东西,一个错误的命中

如果代码被破坏,但测试通过,则为;这是一个假阳性。来自船夫的回答

因为测试断言代码正在工作,而不是(缺少工作代码)

当无效假设为假,但错误地未能被拒绝时,就会发生II型错误它无法断言存在的内容,这是一次失误

如果代码正确,但测试失败,则为;从船夫的回答来看,这是一个假阴性


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

同意boatcoder所提到的。此外,单词“肯定”或“否定”指的是预测的内容(在本例中为测试输出),而“真”或“假”指的是相对于实际情况预测的内容(代码是否工作)。 比如说

当代码运行时,测试显示其已损坏,则为假阴性。这里的否定是因为测试结果显示否定,但由于代码实际工作,相对于实际值的预测是错误的。因此是假阴性

当代码不工作时,测试显示其已损坏,则为真负数。在这里,否定是因为测试显示代码被破坏,并且相对于实际值的预测是正确的。因此是真正的否定

当代码工作并且测试显示其工作时,则为真阳性。 当代码不工作且测试显示其工作时,则为假阳性

然而,所有这些都取决于你所说的积极因素。我认为代码是积极的:)
希望这有帮助

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

至少在GerardMeszaros的《XUnit测试模式:重构测试代码》一书中,误报和误报是这样定义的

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

如果你有这种疾病,你就是“疾病-阳性”

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

阳性测试,意味着您对错误呈阳性,即测试失败,因为您是“空引用异常-阳性

阴性测试,表示您对错误呈阴性,即测试通过,因为您是“StackOverflu-阴性

因此,请记住bug=disease和:

FALSE阳性(针对一个bug)表示您的代码被指控有bug。(您的代码没有bug,但测试失败)

FALSE否定(对于bug)意味着您的代码被错误地声明为没有bug。(您的代码有bug,但测试通过)

TRUE肯定表示您的代码被合理地(真实地)指控有bug。(您的代码有bug,测试失败)

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

我希望这有帮助

参考资料:

从那本书中:

如果我们在bug测试或生产bug方面遇到问题,我们可以 降低假阴性的风险(测试通过时 (不应该)

此外:

假阴性

即使被测系统(SUT)工作不正常,测试仍通过的一种情况。这种测试被称为假阴性指示或“假通过” 另见:假阳性

假阳性

即使被测系统(SUT)工作正常,测试仍失败的一种情况


@拉珊:我不同意你的看法。想证实你的说法吗?失败的测试用例==否定,一旦它是假警报-它是假警报negative@Lashane:我的无效假设是我的代码正在工作。我的测试(错误地)显示我的代码不工作(因此,拒绝了我的无效假设)。因此,这是一个I型错误,一个假阳性。@Lashane:“一个假阳性错误,或简言之,假阳性,通常称为“假警报”,