【问题标题】:.net - Howto analyze how many different code paths are in a method.net - 如何分析方法中有多少不同的代码路径
【发布时间】:2011-03-01 17:30:30
【问题描述】:

是否有(首选免费)工具可以分析方法中可能有多少种不同的组合?我目前正在重构一个有很多 if/switch 语句的方法,我很好奇这个方法有多少种可能的不同执行方式。

假设我有一个简单的方法:

public void DoSomething(bool flag1, int value)
{

    if (flag1)
    {
        if (value > 0)
        {
            Console.WriteLine("Flag1 & value > 0");
            return;
        }
        else
        {
            Console.WriteLine("Flag1 & value <= 0");
            return;
        }
    }
    elseif (value > 0 and value < 10)
    {
        Console.WriteLine("Flag1 is false and value between 0 & 10");
        return;
    }

    if (value < 0)
    {
        Console.WriteLine("Flag1 = false & value <= 0");
        return;
    }
    elseif(value = 0)
    {
        Console.WriteLine("Flag1 = false & value >= 10");
        return;
    }

    Console.WriteLine("nothing else matched");

}

应该有 6 种可能的方式可以执行此方法。 我知道有一些工具可以为我计算这个数字(我相信 Visual Studio Ultimate 可以做到这一点,但不幸的是我只有专业版)。

也许有人知道可以做到这一点的好工具。

【问题讨论】:

标签: c# .net code-coverage code-analysis


【解决方案1】:

你的意思是Cyclomatic Complexity,这个计算已经包含在VS 2010中,请查看MSDN上的here。

【讨论】:

  • 你确定它包含在专业版中,我如何使用它?
【解决方案2】:

我一直在使用一个可以集成到VS2008和VS2010的工具。可以从http://www.blunck.info/ccm.html找到。

【讨论】:

    【解决方案3】:

    您正在寻找的指标是“圈复杂度”。有一些免费工具,但我只使用了 VS 2008 pro 的内置指标,所以我无法判断它们,但它应该更容易找到它们。

    例如http://www.codeproject.com/KB/architecture/Cyclomatic_Complexity.aspx

    【讨论】:

      【解决方案4】:

      Code Metrics for Visual Studio

      你需要圈复杂度。

      【讨论】:

        【解决方案5】:

        您还可以使用工具 NDepend(集成在 Visual Studio 2010、2008、2005 中)来计算 .NET 代码的圈复杂度:

        • 来自源代码定义here
        • 来自 IL 代码定义here

        如果您在没有相应源代码的情况下反编译程序集,则 IL 代码的圈复杂度很有用。

        【讨论】:

          【解决方案6】:

          CodeMetrics 是一个免费插件,适用于即将不再免费的 Reflector。不知道它有多好,我得到了正确的 VS 版本。

          【讨论】:

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