我知道某些合同,静态分析仪无法证明。我可以从整个函数中排除某些类型的合同违规错误,但这太宽泛了。我可以使用baseline.xml功能排除某些违规错误,但这在团队环境中基本上无法进行审核或记录。
简而言之,是否可以执行类似
的操作 Contract.Requires(DoesHalt() == true, ExcludeFromStaticAnalysis=true);
在第三方库中也有某些合同似乎是静态分析器的死胡同。我想禁用它们进行静态分析。一个最喜欢的例子是为.NET图形库构建的合同。深度优先搜索函数的参数指定图中开始搜索的顶点具有Contract.Requires
,其要求顶点是图的成员。明智的合同,甚至可能值得在调试版本中执行,但距离静态可证明还有很长的路要走。然而,每次我使用深度优先搜索时,我都必须找到一种方法来忽略静态违规。 (它也不能用Contract.Assume
来解决)
如果没有从可证明的东西中划分可证明的东西的能力,我发现静态分析只是太吵了,即使是一个小的干净的代码库。
答案 0 :(得分:0)
对于静态分析,我知道无法做到这一点。运行时检查程序有一个自定义运行时,可以使用它,但不能用于静态检查程序。
您可以做的是使用“基线功能”。这使您可以隐藏静态检查器在特定时间给您的所有警告。这些警告收集在XML文件中,直到您关闭基线功能。
这可以大大降低现有代码库的静态检查程序噪音。