【问题标题】:C# :Cyclomatic Complexity of a method with FxCop sdkC#:使用 FxCop sdk 的方法的圈复杂度
【发布时间】:2015-09-11 21:23:06
【问题描述】:

我需要计算C#方法的圈复杂度,需要根据CC值定义规则,在FXcop 12.0中。

我发现Code Metrics 之类的工具提供了计算 CC 值的功能,但我不知道如何在我的代码中使用它。基本上我的要求是通过 Sonar 报告的 CC 值。

如果有人为此编写了自定义规则或知道如何执行此操作,请帮助

【问题讨论】:

    标签: c# sonarqube fxcop code-metrics cyclomatic-complexity


    【解决方案1】:

    在我看来,重要的不是确切的绝对复杂度值,而是您的项目与所有项目的平均值之间的相对差异。确实,您可以通过这种方式发现异常复杂的代码。

    如果您确实需要在 SonarQube 中提供完全相同的 FxCop 复杂度值报告,那么我建议您编写一个 SonarQube 插件将该值存储为指标,并依靠 FxCop 来计算它:不要尝试对 FxCop 的计算方式进行逆向工程。

    仅供参考,我们有一个长期计划来调整 SonarQube、Code Metrics、FxCop 等之间的指标计算并使用相同的公式,但这需要时间。

    【讨论】:

      【解决方案2】:

      也许你可以使用工具NDepend

      integrated with SonarQube

      它带有两个内置代码指标:

      它集成在 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 工作

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多