下限(通过测试)与上限(通过证明)的正确性

时间:2015-06-25 23:32:01

标签: testing types theory

Chris Smith's article"在讨论类型系统之前要了解什么"包含以下无法解释的声明:

    测试:确定正确性的上限     证明:确定正确性的下限

上下文比较了证明程序正确性(例如使用类型检查程序)与测试程序行为(例如使用动态类型语言中的TDD)的好处。

什么是"鞋帮"并且"降低"在这种背景下对正确性的界限?

1 个答案:

答案 0 :(得分:3)

想象一下,你有一个程序,你基本上不知道它是如何工作的。它应该有一堆属性(比如X,Y和Z),但你不确定它是否确实如此。你能做些什么来解决这个问题?

一种选择是尝试使用程序验证工具来正式证明程序具有属性X,Y和Z.不幸的是,通常,不可能自动验证程序是否具有任何有趣的属性(谢谢,停止问题!),所以即使程序实际上有这些属性,你可能永远不会确定这一点。但是,如果程序检查程序报告该程序确实具有属性X,则可以说至少,程序执行X.从这个意义上讲,您是“下限”程序的正确性:它肯定具有属性X,并且可能具有更多属性。

另一个选择是运行程序,看看会发生什么。假设在测试期间你发现一个导致程序行为异常的测试用例,因此肯定没有属性Z.但是你的测试用例没有暴露任何其他错误。在这种情况下,因为你看到程序行为不端,你肯定知道它没有属性Z.因此,你已经“上限”程序是多么正确 - 它肯定没有属性Z,但是你不能排除其他任何东西。

如果你把这两个放在一起,你就得到了一个证据,证明你的程序有X属性,你有直接的证据证明它没有属性Z.你不知道它是否有属性Y因为那不是两种方式都解决了。

希望这有帮助!