用于识别(JAVA)代码的内聚块的工具

时间:2012-10-11 18:34:20

标签: java methods refactoring extract cohesion

我想知道是否有一个工具可以识别JAVA源代码中的内聚代码块。 例如,如果我有一个很长的方法,我想从中提取另一个方法 - 是否有任何工具可以自动告诉我大量的代码值得提取?

5 个答案:

答案 0 :(得分:1)

有一些插件,如PMD(对于eclipse)& FindBugs等,进行静态代码审查,根据您配置的规则标记代码。

答案 1 :(得分:1)

Google CodePro Analytics有一个Eclipse插件,可以提供一系列统计信息,如代码行和圈复杂度,可以作为重构方法的好指标。

我认为您不会找到能够自动将“内聚”代码块重构为方法的工具。这有太多的主观性。

答案 2 :(得分:1)

我在另一个问题上寻找了一个类似的工具:https://stackoverflow.com/questions/12016289/tool-for-visualizing-dependencies-inside-a-java-class只是略高一些:单个班级。

我认为同样的答案适用:没有类似的东西。有些工具可以提供您可能从中提取所需信息的信息。

我会调查DependencyFinder。它提供了对代码的所有部分和部分的访问,因此您可以找到访问一组公共变量的代码元素集群。不幸的是,我发现API有点令人困惑,没有很好的文档,所以你需要一些尝试和错误或与作者联系。它也可能不会让你访问我认为的空白。但我不认为这是一种有效的方法。

您可能想要研究的另一个工具是JaMoPP它甚至应该有关于空白的信息。虽然它是一个Java插件,但您可以使用独立于eclipse的底层库(我认为)。

答案 3 :(得分:0)

签出Sonar它非常支持查找重复的代码块。

Sonar使用PMD和FindBugs底层。它还会生成一些自定义指标,例如类复杂性,方法复杂性,这些指标指向太大的类/方法,并且可以用于分解。

答案 4 :(得分:0)

控制块(即条件和循环)是“内聚的”,因为您无法轻松提取跨越控制块边界的代码块。查找可以通过方法调用替换的块,这使得原始方法更容易理解。通过提取最深控制流嵌套的区域,您将对复杂性产生最佳影响,因此这是一个很好的起点。您不需要这样的工具 - 代码本身具有您需要的信息。