计算代码指标


87

是否有可用的工具来为您的项目计算代码量度(例如,代码行数,圈复杂度,耦合,内聚性),并随时间产生显示趋势的图形?


取决于语言,您使用哪种语言?
Valentin Rocher

Answers:


67

在我的最新项目中,我使用了SourceMonitor。这是一个用于代码指标分析的不错的免费工具。
这是SourceMonitor官方网站的摘录:

  • 快速,单次通过源文件收集指标。
  • 测量以C ++,C,C#,VB.NET,Java,Delphi,Visual Basic(VB6)或HTML编写的源代码的度量。
  • 包括C ++,C,C#,VB.NET,Java和Delphi的方法和功能级别指标。
  • 将指标保存在检查点中,以便在软件开发项目期间进行比较。
  • 在表格和图表中显示和打印指标。
  • 在标准Windows GUI或使用XML命令文件的脚本中运行。
  • 将指标导出到XML或CSV(逗号分隔值)文件,以供其他工具进一步处理。

对于仅是最佳工具NDepend之外的.NET ,我可以推荐vil

以下工具可以执行趋势分析:


SourceMonitor似乎是仅Windows工具。是否存在与其他操作系统(Linux,BSD,Mac)类似的东西?
Mnementh's

Mnementh,我是Windows开发人员,对于FOSS家伙,我不知道任何此类工具。也许您可以尝试在Wine模拟器下运行SourceMonitor?
aku

2
现在有一个用于C ++的NDepend-type工具,CppDepend
Goosey

SourceMonitor仅非商业用途。
斯科特混合理论2013年

2
@Kevin混合理论仔细阅读了许可证-您可以在无法出售的任何环境中使用它。“也就是说,您可以将此可执行文件用作自己的软件开发工作(商业或其他方式)的一部分,但您可以不出售它……”
Natalie Adams

12

Sonar绝对是您必须考虑的工具,尤其是对于Java项目。但是,它也可以处理PHP或C / C ++,Flex和Cobol代码。

这是显示项目中一些指标的屏幕截图:

替代文字http://sonar.codehaus.org/wp-content/uploads/2009/05/squid-metrics.png

请注意,您可以通过使用其演示站点(位于http://nemo.sonarsource.org)来试用该工具。


显然,这样不会让我修复该链接-链接应为:nemo.sonarsource.org
Natalie Adams


8

我也在寻找适用于我的IDE的代码度量工具/插件,但据我所知,没有一个(对于Eclipse而言)也没有显示指定时间段内的复杂性图表。但是,我确实找到了eclipse指标插件,它可以处理:

  • 麦凯布的环复杂性
  • 传出联轴器
  • 方法缺乏凝聚力
  • 方法中的代码行
  • 场数
  • 等级数
  • 范围内的本地人数
  • 参数数量
  • 陈述数
  • 每类加权方法

在使用它时,我也不会错过您正在寻找的图形选项。
我认为,如果找不到任何可以随时间推移处理图形的插件/工具,则应查看最适合您并为您提供所需全部信息的工具。即使给定的信息仅适用于项目的当前版本。

附带说明,eclipse指标插件允许您将数据导出到外部文件(链接转到示例),因此,如果您使用源控制工具,并且应该这样做,则始终可以导出特定对象的数据。构建和存储文件以及源代码,这样您仍然有一种(基本)方式可以追溯到过去并检查差异。


4

请记住,您衡量的是您得到的。loc没有提及生产力或效率。

通过代码行给程序员评分,您将获得..代码行。其他指标也使用相同的论点。

otoh .. http://www.crap4j.org/是一个非常保守和有用的指标。它设置了覆盖范围的复杂性。


2
通过注释行给程序员评分,您将获得...注释行。
EML


3

关于工具NDepend它具有82种不同的代码度量标准,从代码行数到方法排名(受欢迎程度),循环复杂性,方法缺乏内聚性,覆盖率百分比(从NCover或VSTS中提取),继承深度。 。

通过其规则系统,NDepend还可以发现问题并估算技术债务,这是一个有趣的代码度量标准(用于解决问题的开发工作量每年用于解决问题的开发时间所花费的时间)。

所有这些指标在此处详细介绍。


2

如果您在.NET空间中,则Developer Express的CodeRush提供LOC,环复杂性和(相当出色的IMHO)维护复杂性实时分析。

(很抱歉,维护复杂性链接;它将进入Google的缓存。原始链接似乎是离线ATM)。


2

Atlassian FishEye是另一个出色的工具。它与您的源代码控制系统集成(当前支持CVS,SVN和Perforce),并以此方式分析所有文件。但是,分析是相当基础的,产品本身是商业产品(但价格很合理,IMO)。

您还可以为其获取一个名为Crucible的附加程序,以方便同行代码审查。







0

在PHP方面,我认为例如phpUnderControl包含通过phpUnit的指标(如果我没有记错的话)。

请记住,指标通常存在缺陷。例如,与解决复杂问题的编码器相比,从事琐碎问题的编码器将产生更多的代码,并且在那里看起来更好。


0

如果您正在进行一些趋势分析,那么除了SLOC之外,它真的意味着还有什么需要衡量的吗?

即使您只是为尾随的分号做一个grep并计算返回的行数,您所追求的还是SLOC测量技术的一致性。这样,就可以将今天的测量结果与上个月的测量结果进行有意义的比较。

我真的看不出McCabe循环复杂性的趋势如何?我认为CC应该更多地用于质量快照,以向开发人员提供反馈。

编辑:哦。只是想到了其他一些可能有用的度量。注释占SLOC和测试覆盖率的百分比。您都不希望滑倒。回到这两个方面,再没有比在“当下的热潮中”做它们更像上帝了。

HTH。

干杯,




0

对于Java,您可以尝试使用我们的工具QualityGate,该工具可以计算60多个源代码指标,跟踪所有时间的变化,还可以对源代码的可维护性进行总体评估。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.