我想知道是否有一种工具可以识别 JAVA 源代码中的内聚代码块。例如,如果我有一个很长的方法,我想从中提取另一个方法 - 是否有任何工具可以自动告诉我值得提取的大量代码?
5 回答
Google CodePro Analytics有一个 Eclipse 插件,它可以提供一堆统计数据,例如代码行数和圈复杂度,这些数据可以很好地指示方法应该被重构。
我认为您不会找到可以自动将“内聚”代码块重构为方法的工具。这里面有太多的主观性。
我在另一个问题上寻找了一个类似的工具:https ://stackoverflow.com/questions/12016289/tool-for-visualizing-dependencies-inside-a-java-class只是在更高的级别:一个类。
我认为同样的答案也适用:没有那样的东西。虽然有一些工具可以提供信息,您可以从中提取您正在寻找的信息。
我会调查DependencyFinder。它提供对所有代码片段的访问,因此您可以找到访问一组通用变量的代码元素集群。不幸的是,我发现 API 有点混乱并且没有很好的文档记录,所以你需要尝试和错误或与作者联系。我认为它也可能不会让您访问空白。但无论如何,我认为这不是一种有效的方法。
您可能想要研究的另一个工具是JaMoPP 它甚至应该包含有关空格的信息。虽然它是一个 Java 插件,但您可以使用独立于 eclipse 的底层库(我认为)。
查看Sonar它对查找重复代码块有很好的支持。
Sonar 使用 PMD 和 FindBugs 底层。它还生成一些自定义指标,例如类复杂性、方法复杂性,这些指标指向太大的类/方法,并且可能被分解。
控制块(即条件和循环)是“内聚的”,因为您不能轻易地提取跨越控制块边界的代码块。查找可以被方法调用替换的块,这使得原始方法更容易理解。通过提取最深的控制流嵌套区域,您将对复杂性产生最佳影响,因此这是一个很好的起点。你不需要这样的工具——代码本身就有你需要的信息。