用于查找的Java工具 - 跨项目复制/粘贴代码

时间:2011-09-09 22:01:36

标签: java refactoring copy-paste

我们继承了一些遗留代码,这些代码在项目中有大量代码复制/粘贴。有没有办法找到这些? PMD可以做一个项目

6 个答案:

答案 0 :(得分:6)

摘要

还有CloneDetective,Simian和Simscan。 This paper from the International Conference on Software Engineering 2009比较它们和PMD的CPD。

详细

一种可以处理多种语言的工具是 CloneDetective (基于ConQuat,持续质量评估工具包):ABAP,ADA,Java,C#,C / C ++,Visual Basic,Cobol ,PL1。

另一个工具是 Simian, the Similarity Analyser ,它识别Java,C#,C,C ++,COBOL,Ruby,JSP,ASP,HTML,XML,Visual Basic,Groovy源代码和甚至纯文本文件。它运行在JVM和.NET上。

实际上,如果你看看.NET,有很多复制粘贴检测工具......

SimScan, the SimilarityScanner 是一个Eclipse / IDEA / JBUILDER插件,可在大型Java源代码库中找到重复或类似的代码片段。我不知道,也不知道“类似片段”是什么意思。听起来它可能也只是在单个项目中看起来孤立,但IntelliJ-Screenshots看起来很漂亮。

This paper from the International Conference on Software Engineering 2009比较了CloneDetective,PMD的CPD,Simian和Simscan。

正如PMD的副本&粘贴查找器实际上被称为“复制粘贴检测器”的 CPD ,使用该术语作为谷歌搜索帮助的终端技术。经常使用的另一个术语是“克隆检测”。

答案 1 :(得分:2)

您可以尝试使用PMD CPD的命令行版本:

http://pmd.sourceforge.net/cpd.html

您应该能够指定多个源树来检查。

Simian是另一个突出的复制/粘贴检测器,具有类似的命令行功能。

答案 2 :(得分:1)

请参阅我们的Java CloneDR,这是一种在大型代码集中查找重复代码的工具。

CloneDR使用代码结构(抽象语法树)作为指南查找精确和接近错过的克隆,因此不会被空格或注释更改所混淆。对于检测到的克隆,它会显示克隆实例,以及可用作替换抽象基础的参数化泛化(在Java中,通过制作方法几乎完成了这些操作;其他语言还有其他技术)。

另一张海报参考了比较克隆探测器的技术论文。如果您检查论文,参考编号[1]是CloneDR。该论文的作者没有将他们的探测器与CloneDR进行比较,因为他们的探测器只使用令牌,而不是CloneDR使用语言结构的更复杂的方法。

CloneDR适用于各种语言:Java,C#,C ++,COBOL,JavaScript,PHP等等。

要处理多个项目,只需告诉CloneDR所有项目中的文件集。

答案 3 :(得分:1)

如果您可以将这些项目放入一个Eclipse工作区,Codepro Analytix将很乐意将所有这些项目一起使用:https://code.google.com/javadevtools/codepro/doc/index.html

答案 4 :(得分:1)

Sonar做这种事情非常简洁。我真的很喜欢你能拥有的所有指标......

答案 5 :(得分:0)

如果您正在寻找Eclipse插件,请结帐UCDetector: Unnecessary Code Detector