【发布时间】:2015-09-11 21:23:06
【问题描述】:
我需要计算C#方法的圈复杂度,需要根据CC值定义规则,在FXcop 12.0中。
我发现Code Metrics 之类的工具提供了计算 CC 值的功能,但我不知道如何在我的代码中使用它。基本上我的要求是通过 Sonar 报告的 CC 值。
如果有人为此编写了自定义规则或知道如何执行此操作,请帮助
【问题讨论】:
标签: c# sonarqube fxcop code-metrics cyclomatic-complexity
我需要计算C#方法的圈复杂度,需要根据CC值定义规则,在FXcop 12.0中。
我发现Code Metrics 之类的工具提供了计算 CC 值的功能,但我不知道如何在我的代码中使用它。基本上我的要求是通过 Sonar 报告的 CC 值。
如果有人为此编写了自定义规则或知道如何执行此操作,请帮助
【问题讨论】:
标签: c# sonarqube fxcop code-metrics cyclomatic-complexity
在我看来,重要的不是确切的绝对复杂度值,而是您的项目与所有项目的平均值之间的相对差异。确实,您可以通过这种方式发现异常复杂的代码。
如果您确实需要在 SonarQube 中提供完全相同的 FxCop 复杂度值报告,那么我建议您编写一个 SonarQube 插件将该值存储为指标,并依靠 FxCop 来计算它:不要尝试对 FxCop 的计算方式进行逆向工程。
仅供参考,我们有一个长期计划来调整 SonarQube、Code Metrics、FxCop 等之间的指标计算并使用相同的公式,但这需要时间。
【讨论】:
也许你可以使用工具NDepend。
它带有两个内置代码指标:
它集成在 Visual Studio 中,可以轻松编写自定义代码规则。这样的rule is actually a C# LINQ query。
例如,如果您想编写代码规则来匹配既复杂又难以被测试覆盖的方法,只需编写:
// <Name>Complex methods poorly covered by tests</Name>
warnif count > 0
from m in Application.Methods
where m.CyclomaticComplexity > 10 &&
m.PercentageCoverage < 20
select new {
m,
m.CyclomaticComplexity,
m.PercentageCoverage,
m.NbLinesOfCode
}
免责声明:我为 NDepend 工作
【讨论】: