对存在违规的现有代码库实施 FxCop/静态分析时使用哪些策略?如何最有效地减少静态分析违规?

有帮助吗?

解决方案

首先充分利用 [SuppressMessage] 属性。至少在一开始是这样。一旦通过该属性将计数设为 0,您就可以设置一条规则,即新的签入不得引入 FxCop 违规。

Visual Studio 2008 有一个很好的代码分析功能,允许您确保代码分析在每个构建上运行,并且您可以将警告视为错误。这可能会减慢速度,因此我建议设置一个持续集成服务器(如 CruiseControl.NET)并让它在每次签入时运行代码分析。

一旦您控制住了它,并且不会在每次签入时引入新的违规行为,就开始一次处理整类 FxCop 违规行为,目标是删除您使用的 SuppressMessageAttributes。

跟踪您真正想要保留哪些内容的方法是始终为您真正想要抑制的内容添加合理性值。

其他提示

以传递的方式重写你的代码!

说真的,旧的代码库会有数百个错误 - 但这就是我们有新手/实习程序员的原因。纠正 FxCop 违规是了解代码库概览并了解如何编写符合要求的 .NET 代码的好方法。

所以,咬紧牙关,喝大量的咖啡因,几天之内就可以克服它!

依赖型 好像 它可以做你想要的事情,但我不确定它是否可以集成到 CruiseControl.Net 自动构建中,如果代码不满足要求,则构建失败(这就是我想要的)发生)。

还有其他想法吗?

FxCop 的替代方法是使用该工具 依赖型. 。这个工具可以让你写 C# LINQ 查询的代码规则 (我们称之为 CQLinq). 免责声明:我是该工具的开发人员之一

多于 200条代码规则 默认建议。自定义现有规则或创建自己的规则非常简单,这要归功于 知名 C# LINQ 语法。

为了保持较低的误报数量,CQLinq 提供了独特的功能来定义集合是什么 只是我的代码 通过前缀为的特殊代码查询 不是我的代码. 。有关此功能的更多说明可以找到 这里. 。这里有两个例子 不是我的代码 默认查询:

为了保持较低的误报数量,使用 CQLinq,您还可以将规则结果仅集中在添加的代码或重构的代码上,因为 过去定义的基线. 。请参阅以下规则,检测自基线以来添加或重构过于复杂的方法:

warnif count > 0 
from m in Methods
where m.CyclomaticComplexity > 20 &&
      m.WasAdded() || m.CodeWasChanged()
select new { m, m.CyclomaticComplexity }

最后,请注意,使用 NDepend 可以验证代码规则 住在 Visual Studio 中 并在构建过程中,在 生成 HTML+javascript 报告.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top