如何在现有代码库上实现FxCop /静态分析

时间:2008-08-25 22:04:40

标签: static-analysis fxcop metrics

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

4 个答案:

答案 0 :(得分:13)

首先自由使用[SuppressMessage]属性。至少在开始时。一旦通过属性将计数变为0,您就会制定新的签入可能不会引入FxCop违规的规则。

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

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

跟踪你真正想要保留哪些内容的方法是始终将“对齐”值添加到您想要抑制的值。

答案 1 :(得分:2)

以传递方式重写代码!

说真的,旧的代码库会有数百个错误 - 但这就是为什么我们有新手/实习程序员。纠正FxCop违规是获取代码库概述以及学习如何编写符合.NET代码的好方法。

所以只需咬紧牙关,喝大量的咖啡因,并在几天内完成它!

答案 2 :(得分:0)

NDepend looks like它可以完成你所追求的目标,但我不确定它是否可以集成到CruiseControl.Net自动构建中,如果代码不符合要求,则无法构建(这就是我想要发生的事情)。

还有其他想法吗?

答案 3 :(得分:-1)

FxCop的替代方法是使用工具NDepend。这个工具允许在C#LINQ查询上编写代码规则(我们称之为CQLinq)。 免责声明:我是该工具的开发人员之一

默认情况下会提出超过200 code rules的内容。由于众所周知的 C#LINQ语法,自定义现有规则或创建自己的规则非常简单。

为了保持较低的误报率,CQLinq提供了独特的功能,可以通过前缀为 notmycode 的特殊代码查询来定义集合 JustMyCode 的内容。有关此功能的更多说明可以在here找到。以下是两个 notmycode 默认查询:

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

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

最后,请注意,使用NDepend代码规则可以live in Visual Studio验证generated HTML+javascript report并在构建处理时验证{{3}}。