首先是一些术语(借鉴here,第14页):
正面程序是一个有错误的程序。
否定程序是一个没有错误的程序。
所以有四种类型的程序:
积极的计划,分析为阳性 - >真阳性(TP)。
正面计划,分析为否定 - >假阴性(FN)。
阴性程序,分析为阳性 - >假阳性(FP)。
否定程序,分析为否定 - >真阴性(TN)。
如果系统从不接受正面节目,则系统声音。
系统完成,如果它从不拒绝否定程序。
所以根据我上面所写的内容来判断:
A complete system accepts FN and TN programms.
A sound system also accepts FN and TN programms.
一位同事告诉我声音系统也接受FP程序。有人可以证实这一点并解释他们为什么这样做吗?
答案 0 :(得分:12)
这本书解释如下:
健全性可防止误报和完整性,防止误报。
因此,为了使系统声音,它不需要防止误报,而只能防止误报。为防止误报,必须完成。
本书以类型系统为例进一步解释:
在现代语言中,类型系统是声音(它们阻止了他们声称的内容)但不是完整(他们 拒绝他们不需要拒绝的程序)。健全性很重要,因为它允许语言用户和语言 实施者依赖X永远不会发生。完整性会很好,但希望它在实践中很少见 一个程序被不必要地拒绝,在这种情况下,希望程序员很容易修改 该程序使其进行类型检查。
类型系统不完整,因为几乎任何你想静态检查的东西都是不可能的 实现一个静态检查器,给你的语言任何程序(a)总是终止,(b)是健全的, (c)完成。既然我们不得不放弃一个,(c)似乎是最好的选择(程序员不喜欢 可能不会终止的编译器。)
答案 1 :(得分:3)
让我们说房主设置警报系统来侦测小偷。由于其他原因而不是非法入侵而不喜欢误报的所有者使得系统不太敏感,在这种情况下,当警报响起时,这意味着“警报意味着有入侵者”存在不能检测到熟练小偷的危险。谨慎而谨慎的主人可以忍受误报但从不想要入侵可能会使系统更加敏感。在这种情况下,“没有警报意味着没有入侵”。
第一个从不接受误报的系统(在本例中为误报)称为声音系统,这意味着没有类型1错误。永远不会错过入侵的第二个系统,换句话说,从不接受假阴性,称为完整系统,这意味着没有类型2错误。健全性并不能保证完整性,反之亦然。由于报警系统具有完美的灵敏度,因此不会出现误报或缺少入侵,从而使系统完好无损。
此页面(http://ubccpsc311.blogspot.jp/2010/11/7-ways-to-approach-soundness-and.html)提供了关于健全性和完整性的七个视角。另请参阅Soundness and Completeness of a algorithm,其中说完整算法总是在声音算法永远不会给出错误答案时找到答案(永远不会返回错误结果)。这https://softwareengineering.stackexchange.com/questions/140705/what-does-it-mean-to-say-an-algorithm-is-sound-and-complete也可能会有所帮助。
来自An Integrated approach to software engineering的内容显示了静态分析器示例的另一个视角。
在书中soundness captures the occurrence of false positives
,换句话说,使用完美的音响系统,当它们实际上是警告时,没有错误报告:less soundness implies more false positives
。
话虽如此,我认为作者的评论可能是一个错字,它应该写成“健全防止误报......”。可能,在作者的领域中,健全性意味着通常不同于使用,但我不确定。
理解这些定义的一个好方法是健全性可以防止 假阴性和完整性可以防止误报。
此外,我认为OP的评论也令人困惑:
A system is sound, if it never accepts a positive program.
A system is complete, if it never rejects a negative program.
更好/正确的描述可能是
A system is sound, if it never accepts a false positive program.
A system is complete, if it never accepts a false negative program.