免费的C#度量计算库(DLL)

13

我想问一下你是否知道一些免费的C#库(dll)可以计算CK指标(主要是圈复杂度)。

我需要在我的项目中使用它。我知道已经有一些完成的解决方案可以计算CK指标并以各种形式显示给您,但我需要的是一个可以从我的应用程序中使用的解决方案。因此,在开始编写自己的解决方案之前,我首先想询问您。

谢谢


你是否曾经找到过一个库?或者你是如何解决这个问题的? - RoflcoptrException
不,这是我曾经想过的一个程序点子,但很遗憾,我现在的时间不允许我继续并创建这个应用。因此,我也没有进一步调查寻找合适的库。 - Juri
好的,谢谢。那我还需要进一步搜索 ;) - RoflcoptrException
你想要针对C#代码还是其他语言的度量衡?无论该库执行什么操作,它至少都需要将目标语言文本分解为词元。 - Ira Baxter
我想要C#的度量标准。如果可能的话,也想要C++的度量标准。 - RoflcoptrException
也许你还应该看一下 ccm(http://www.blunck.info/ccm.html)。 - nulltoken
5个回答

16

DrivenMetrics是一个开源的C#命令行工具。核心功能被单独提取为库(Core项目可以在这里找到),与命令行控制台客户端分离。

尽管它非常简单,但它可能适合您的需要:它免费、计算代码行数并计算方法的圈复杂度(潜在代码路径数量)。

这是通过直接分析IL实现的,感谢Mono.Cecil(NDepend依赖的同一库)。这允许对使用C#、VB.Net等编写的代码构建的程序集进行分析。

  • 该项目已在此处发布
  • 代码源可在github上获取。
  • 打包的版本也可以在此处获得。
  • 它可以在Windows和Mono上运行。

更新:

另一个选择是来自Mono项目的静态分析工具Gendarme

以下代码展示了对程序集中每个方法的圈复杂度进行计算的用法示例:

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);
    }
}
  • 该项目的介绍在这里
  • 代码源可在github上获取
  • 已经有打包好的版本可以下载
  • 它可以在Windows和Mono上运行

谢谢!这看起来真的很棒!但是你能运行它吗?我检出了核心源代码,构建了它,然后得到了3个DDL。然后我在我的项目中引用了这3个DDL。但接下来该怎么办呢?我找不到任何文档说明。 - RoflcoptrException
@Roflcoptr:看一下DrivenMetrics.Tests项目中的Driven.Metrics.Tests.Core.Metrics.ILCyclomicComplexityTests类。这个测试类将向您展示如何在Setup()方法中加载程序集,如何选择要分析的方法,以及如何应用ILCyclomicComplextityCalculator来计算该方法的CC(例如,请参见ShouldDetermineCyclomicComplexityForFooSecond()方法)。 - nulltoken
抱歉,我之前的问题表述有误 :D 我想知道如何使用它。我已经在项目的引用中包含了文件DrivenMetrics.dll。这样应该可以完成任务了吧? - RoflcoptrException
根据构建文件(http://www.github.com/garrensmith/DrivenMetrics/blob/master/RakeFile.rb)和提交历史记录(http://github.com/garrensmith/DrivenMetrics/commit/742f3e6893d71d55c22ad7629820d21c87fe8f87),您需要这5个dll文件:DrivenMetrics.dll,Mono.Cecil.Extensions.dll,Mono.Cecil.dll,Mono.Cecil.Pdb.dll和Mono.Cecil.Mdb.dll。 - nulltoken
@Roflcoptr:库的作者Garren Smith刚刚上传了一个打包的DrivenMetrics版本,其中包含您需要的二进制文件。您可以在http://github.com/garrensmith/DrivenMetrics/downloads上下载它。 - nulltoken
显示剩余2条评论

3
我正在使用SourceMonitor,这是一个不错的免费应用程序,可测量包括C#在内的多种语言的代码复杂度和其他指标。我们通过命令行驱动它以产生XML输出,然后我们使用LINQ to XML提取和排序我们感兴趣的数据。然后我们使用NVelocity来创建HTML报告。
我知道它不是一个托管库,但你可能会发现它能做你需要的事情。

谢谢提供信息。但问题在于,我的应用程序不仅仅是为个人使用考虑的,而且可能面向其他人,如果他们必须安装它才能使用我的应用程序,这有点不方便。但我会考虑这个建议,谢谢。 - Juri

1

0

这个并不是免费的,但我在这方面使用NCover时有很好的经验。他们也与许多CI工具很好地集成。


-1

支持82个代码度量,NDepend是.NET开发人员的代码度量Roll's Royce工具(但它是商业工具)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接