我可以轻松地从静态分析中排除一些合同吗?

时间:2010-11-18 23:42:23

标签: static-analysis code-contracts

我知道某些合同,静态分析仪无法证明。我可以从整个函数中排除某些类型的合同违规错误,但这太宽泛了。我可以使用baseline.xml功能排除某些违规错误,但这在团队环境中基本上无法进行审核或记录。

简而言之,是否可以执行类似

的操作

Contract.Requires(DoesHalt() == true, ExcludeFromStaticAnalysis=true);

在第三方库中也有某些合同似乎是静态分析器的死胡同。我想禁用它们进行静态分析。一个最喜欢的例子是为.NET图形库构建的合同。深度优先搜索函数的参数指定图中开始搜索的顶点具有Contract.Requires,其要求顶点是图的成员。明智的合同,甚至可能值得在调试版本中执行,但距离静态可证明还有很长的路要走。然而,每次我使用深度优先搜索时,我都必须找到一种方法来忽略静态违规。 (它也不能用Contract.Assume来解决)

如果没有从可证明的东西中划分可证明的东西的能力,我发现静态分析只是太吵了,即使是一个小的干净的代码库。

1 个答案:

答案 0 :(得分:0)

对于静态分析,我知道无法做到这一点。运行时检查程序有一个自定义运行时,可以使用它,但不能用于静态检查程序。

您可以做的是使用“基线功能”。这使您可以隐藏静态检查器在特定时间给您的所有警告。这些警告收集在XML文件中,直到您关闭基线功能。

这可以大大降低现有代码库的静态检查程序噪音。