【发布时间】:2009-07-17 12:54:43
【问题描述】:
虽然圈复杂度是一个值得衡量的指标,但我倾向于发现它不是识别难以维护的代码的糟糕工具。特别是,我倾向于发现它只是突出了某些类型的代码(例如解析器),而忽略了困难的递归、线程和耦合问题以及许多已定义的反模式。
还有哪些其他工具可用于识别有问题的 Java 代码?
请注意,我们已经使用 PMD 和 FindBugs,我认为它们非常适合用于方法级别的问题识别。
【问题讨论】:
虽然圈复杂度是一个值得衡量的指标,但我倾向于发现它不是识别难以维护的代码的糟糕工具。特别是,我倾向于发现它只是突出了某些类型的代码(例如解析器),而忽略了困难的递归、线程和耦合问题以及许多已定义的反模式。
还有哪些其他工具可用于识别有问题的 Java 代码?
请注意,我们已经使用 PMD 和 FindBugs,我认为它们非常适合用于方法级别的问题识别。
【问题讨论】:
我的经验是,在查看代码可维护性时最重要的指标是:
在检查其他人编写的代码时,包含动态技术通常很有用。只需通过分析器/代码覆盖工具运行常见使用场景即可发现:
任何分析器、代码覆盖率和指标工具等常用工具通常会帮助您获取进行这些评估所需的数据。
【讨论】:
Google Testability Explorer 例如检查单例和其他静态的东西,这些东西在设计中是难闻的。 Metrics 是一个 Eclipse 插件,可以测量人类已知的几乎所有代码指标。我用过并且可以轻松推荐两者。
【讨论】:
我从未使用过它,但我觉得这很有趣且很有前途:
http://erik.doernenburg.com/2008/11/how-toxic-is-your-code/
我使用了这个,发现它非常有用,因为很好的依赖关系可视化
http://www.headwaysoftware.com/products/structure101/index.php
【讨论】:
用于 .NET 代码的工具 NDepend 可让您分析代码复杂性的多个维度,包括代码指标,例如: 圈复杂度、嵌套深度、方法缺乏凝聚力、测试覆盖率……
...包括依赖分析,包括Code Rules over LINQ Queries (CQLinq)专门问,我的代码有什么复杂的,写规则。提供了大约200 default Code Rules。他们关注像Singleton这样的反模式,threading problems的检测,像UI layer shouldn't use directly DB types这样的耦合问题的检测......
前段时间,我写了一篇文章,总结了代码复杂度的几个维度: Fighting Fabricated Complexity
【讨论】: