13

虽然圈复杂度是一个有价值的指标,但我倾向于发现它不是识别难以维护的代码的糟糕工具。特别是,我倾向于发现它只是突出了某些类型的代码(例如解析器),而忽略了困难的递归、线程和耦合问题以及许多已定义的反模式。

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

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

4

6 回答 6

12

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

  • 圈复杂度,用于识别可能难以理解/修改的大块代码。
  • 嵌套深度,以找到相似的点(嵌套深度越高,CC 越高,但不一定相反,因此对两者进行评分很重要)。
  • 扇入/扇出,以更好地了解方法/类之间的关系以及各个方法的实际重要性。

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

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

任何分析器、代码覆盖率和度量工具等常见的嫌疑人通常会帮助您获取进行这些评估所需的数据。

于 2009-07-17T19:35:29.790 回答
8

谷歌可测试性资源管理器检查例如单例和其他在设计中难闻的静态事物。Metrics是一个 Eclipse 插件,可以测量人类已知的几乎所有代码指标。我使用并且可以轻松地推荐两者。

于 2009-07-17T14:11:04.873 回答
5

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

来电编辑

有一个可用的 Sonar 站点,其中分析了许多开源项目。我认为这很好地表明了应用了多少规则,以及深入研究的程度。当然,您也可以禁用您不感兴趣的规则。

是对指标的解释。

于 2009-07-17T19:21:25.483 回答
1

我从未使用过它,但我发现这相当有趣和有希望:

http://erik.doernenburg.com/2008/11/how-toxic-is-your-code/

我使用了这个,发现它非常有用,因为依赖关系的良好可视化

http://www.headwaysoftware.com/products/structure101/index.php

于 2009-07-17T15:28:06.980 回答
0

您已经使用的静态分析工具非常标准。如果您使用的是 Eclipse,请尝试在此处查找更多代码分析工具。

Emma提供代码覆盖率分析,尽管这确实是为了测试。

于 2009-07-17T12:59:36.580 回答
0

用于 .NET 代码的NDepend工具可让您分析代码复杂性的多个维度,包括代码指标,例如:圈复杂性、嵌套深度、方法缺乏凝聚力、测试覆盖率......

...包括依赖关系分析和包括LINQ 查询上的代码规则 (CQLinq),专门用于询问我的代码中的复杂性以及编写规则。提供了大约200 条默认代码规则他们关注像Singleton这样的反模式、线程问题的检测、UI 层等耦合问题的检测不应该直接使用 DB 类型......

前段时间,我写了一篇文章总结了代码复杂度的几个维度: Fighting Fabricated Complexity

于 2010-08-28T08:37:28.273 回答