Deriving Cyclomatic Complexity in .NET

后端 未结 4 1651
闹比i
闹比i 2021-01-13 03:09

I know that I can access the cyclomatic complexity to my code in Visual Studio 2008 Team Explorer by right clicking and selecting \"Calculate Code Metrics\". I would like to

相关标签:
4条回答
  • 2021-01-13 03:42

    I don't -- does Visual Studio have any APIs of that sort? -- but computing cyclomatic complexity is reasonably easy. Gendarme might be your answer.

    0 讨论(0)
  • 2021-01-13 03:47

    As described in this answer, one can leverage the API of the Gendarme open source tool to calculate the cyclomatic complexity of a method

    ModuleDefinition module = ModuleDefinition.ReadModule(fullPathToTheAssembly);
    
    foreach (var type in module.Types)
    {
        foreach (var me in type.Methods)
        {
            if (!me.HasBody || me.IsGeneratedCode() || me.IsCompilerControlled)
                continue;
            var r = AvoidComplexMethodsRule.GetCyclomaticComplexity(me);
    
            Console.WriteLine("{0}: {1}", me.ToString(), r);
        }
    }
    0 讨论(0)
  • 2021-01-13 03:51

    I use NDepend for stuff like that. You can create CQL queries in NDepend and execute them.
    Example:

    SELECT METHODS  WHERE CC > 8
    

    returns the methods with a cyclomatic complexity greater than 8.

    0 讨论(0)
  • 2021-01-13 03:56

    There is no API. But you can read an XML file generated by the Code Metrics Power Tool. So you would generate the code metrics XML file by command line like:

    metrics /f:MyAssembly.dll /o:MetricsResults.xml
    

    Then grab the data you want out of MetricsResults.xml.

    More info on the power tool here.

    If you want to run code metrics in your TFS build, see here and here for options.

    0 讨论(0)
提交回复
热议问题