使用 Microsoft 代码协定检查不变性

checking invariant using Microsoft code contracts

提问人:user1935724 提问时间:4/21/2019 更新时间:4/23/2019 访问量:145

问:

刚刚接触到了 Microsoft Code 合约,用于检查代码 (https://learn.microsoft.com/en-us/dotnet/framework/debug-trace-profile/code-contracts) 中的前置、后置条件和对象不变量,并想尝试一下。我想确认一个关于健全性和完整性的问题,假设检查器不输出任何错误消息,假设不变量不输出任何错误消息,这是否意味着不变量确实是(可证明的)真,或者它仍然可能是误报。

C# 代码协定 验证 不变量 形式方法

评论

0赞 Jeffrey L Whitledge 4/23/2019
您应该知道,Microsoft 不再支持代码协定,并且其工具与最新版本的 Visual Studio 等不兼容。我非常遗憾地说,它已经被放弃了。
0赞 user1935724 4/23/2019
@JeffreyLWhitledge,谢谢你的提醒。

答:

0赞 Jeffrey L Whitledge 4/23/2019 #1

静态检查器可以通过各种方式被愚弄,例如添加错误的假设。在这个答案中,我将假设没有做过类似的事情。

此外,检查器中可能存在错误。但假设没有......

静态检查器旨在不产生误报。所有前置和后置条件以及不变量都将被检查,只有当条件的真实性可以得到肯定验证时,它们才会通过。如果无法验证条件,则将提供错误消息。

系统不会尝试证明可以违反不变量。“未经证实”的错误消息意味着没有找到正确性的证据。不变量可能仍然是正确的,只是未经证实。

因此,没有误报(同样,根据设计,假设没有错误或破坏)。