在存在违规的现有代码库上实施 FxCop / 静态分析时使用了哪些策略?如何最有效地减少静态分析违规?
4 回答
自由使用 [SuppressMessage] 属性开始。至少在开始时。通过属性将计数设为 0 后,您就可以设置新签入不得引入 FxCop 违规的规则。
Visual Studio 2008 有一个很好的代码分析功能,它允许您确保代码分析在每次构建时运行,并且您可以将警告视为错误。这可能会减慢速度,因此我建议设置一个持续集成服务器(如 CruiseControl.NET)并让它在每次签入时运行代码分析。
一旦你控制住它并且没有在每次签入时引入新的违规行为,就开始一次处理整个类的 FxCop 违规行为,目标是删除你使用的 SuppressMessageAttributes。
跟踪您真正想要保留的内容的方法是始终为您真正想要抑制的内容添加一个对齐值。
以一种传递的方式重写你的代码!
说真的,一个旧的代码库会有数百个错误——但这就是我们有新手/实习程序员的原因。纠正 FxCop 违规是了解代码库并了解如何编写符合标准的 .NET 代码的好方法。
所以,咬紧牙关,喝大量的咖啡因,然后在几天内度过难关!
NDepend看起来可以满足您的需求,但我不确定它是否可以集成到 CruiseControl.Net 自动构建中,如果代码不符合要求(这就是我的要求),则构建失败我希望发生)。
还有其他想法吗?
FxCop 的替代方法是使用工具NDepend。该工具允许在 C# LINQ 查询(我们称之为CQLinq)上编写代码规则。免责声明:我是该工具的开发人员之一
默认提出超过200 条代码规则。借助众所周知的C# LINQ 语法,自定义现有规则或创建自己的规则非常简单。
为了保持低误报的数量,CQLinq 提供了独特的功能,通过以 notmycode 为前缀的特殊代码查询来定义JustMyCode集合。有关此功能的更多说明,请参见此处。例如,这里有两个notmycode默认查询:
为了保持低误报的数量,使用 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 报告中进行验证。