代码复杂性分析工具超越了圈复杂性

Jim*_*ush 11 java complexity-theory

虽然圈复杂度是一个值得衡量的指标,但我倾向于发现它是识别难以维护的代码的糟糕工具.特别是,我倾向于发现它只是突出显示某些类型的代码(例如解析器)并且错过了难以递归,线程和耦合问题以及许多已经定义的反模式.

还有哪些其他工具可用于识别有问题的Java代码?

注意,我们已经使用了PMD和FindBugs,我认为它们非常适合方法级别的问题识别.

小智 11

我的经验是,在查看代码可维护性时最重要的指标是:

  • Cyclomatic Complexity,用于识别可能难以理解/修改的大块代码.
  • 嵌套深度,找到类似的点(高嵌套深度自动高CC,但不一定相反,所以两者的评分是重要的看).
  • 扇入/缩小,以更好地了解方法/类之间的关系以及各个方法的实际重要性.

在检查由他人编写的代码时,包含动态技术通常很有用.只需通过分析器/代码覆盖工具运行常见的使用场景即可发现:

  • 实际执行的代码很多(分析器对此非常有用,只需忽略时序信息并查看命中计数).
  • 代码覆盖很容易找到(几乎)死代码.为了防止你花时间重构很少执行的代码.

通常的嫌疑人,例如任何分析器,代码覆盖率和度量工具通常可以帮助您获取进行这些评估所需的数据.


Mar*_*cin 7

Google Testability Explorer会检查单例和其他静态内容,例如设计中的难闻气味.Metrics是一个Eclipse插件,可以测量人类已知的几乎所有代码度量.我用过,很容易推荐两者.


Csa*_*a_H 5

声纳试图通过各种开源工具(包括PMD和Findbugs)的结果来识别复杂性和可维护性的"热点".它与Maven和CI服务器(尤其是Hudson)很好地集成.

由extraneon 编辑

有一个Sonar站点可用于分析许多开源项目.我认为这表明应用了多少规则以及深入研究的程度.你当然也可以禁用你没有发现那些有趣的规则.

以下是指标的解释.