【发布时间】:2011-01-28 13:42:07
【问题描述】:
是否有任何开源工具可以计算 Java 源文件的 Halstead 复杂度指标。
【问题讨论】:
-
我不确定原始论文中定义的 Halstead 指标是否适合 Java。
-
@Gabriel 你这么说有什么具体原因吗?我正在开发一种工具,该工具使用 Halstead、Cycomatic 和其他一些 LoC 指标对“代码”进行一些统计分析。我正在寻找一些命令行实用程序,它们可以为我提供编程语言的 Halstead 和 Cyclomatic 指标。真的,我还没有研究过哪种语言适合哪种语言的细节。任何帮助深表感谢。谢谢。
-
@Salman:Halstead 指标基于运算符和操作数的数量。很难用像 Java 这样的语言来计算它,它不是过程式的,而是面向对象的。以体积度量为例,我想这对你来说很有趣,它基本上说,程序随长度线性增长,随词汇量成对数增长。但是在面向对象的编程中,我想这在很大程度上取决于方法(运算符)是新的东西还是接口的实现或被覆盖的方法。例如。添加新的集合接口与添加新的实现非常不同。
-
@Gabriel:为什么方法调用与过程调用根本不同? Halstead 衡量的是计算的复杂性。它不关心任何特定运算符的内部复杂性是什么(无论是“*”还是“foobar(...)”)。
-
@Gabriel - 在工作中,我们使用使用 LCOM2 的商业工具。我更喜欢使用 LCOM3 或 LCOM4(加上这个工具不必要地标记 POJO。)但是,一般来说,LCOM2 可以将凝聚力引导到正确的方向。我们还结合使用 CBO 和改进的圈复杂度度量,将 n-case switch 语句视为计数“1”(而不是“n”)。
标签: complexity-theory metrics code-metrics