它是否存在:重复代码查找器?

时间:2009-07-09 15:14:50

标签: language-agnostic refactoring dry code-reuse

在不久的将来,我将继承一个有点大的项目。我最近对它进行了一些小的更新,并注意到它的一部分可能会使用一些重构,因为有些方法执行相同的操作,但差别很小。

我想知道是否有一个工具可以获取大量源代码并找到类似的代码块,以便可以识别它们以进行可能的重构。如果存在模糊搜索,那将是很好的,因此它可以识别类似的操作(除了只是逐字重复的代码)。

我不希望程序重构代码本身,只是确定潜在的重复。

我的平台是C#,但任何解决方案都会有所帮助

7 个答案:

答案 0 :(得分:8)

http://www.codeplex.com/CloneDetectiveVS

“Clone Detective是一个Visual Studio集成,允许您分析C#项目以获取在其他地方重复的源代码。”

当你将它扔到一个包含大量代码重复的项目时,视觉上会有很多事情发生。如果它第一次与你使用克隆侦探结合,起初可能有点压倒性。

我真的推荐这个工具。非常好。

答案 1 :(得分:5)

CPD在令牌级别工作,因此C#应该没问题。它也有一些机制来分解变量名和其他标识符。

答案 2 :(得分:5)

我从未使用它,但Simian可能适合你

  

Simian(相似性分析器)   识别Java,C#,C中的重复,   C ++,COBOL,Ruby,JSP,ASP,HTML,XML,   Visual Basic,Groovy源代码和   甚至纯文本文件。实际上,猿猴   可用于任何人类可读的   文件,如ini文件,部署   描述符,你的名字。

答案 3 :(得分:4)

我目前正在使用Duplicate Finder。它适用于任何文本文件,我一直在我的C​​#项目中使用它,非常成功。它是命令行,所以我将它集成到我的构建过程中。

答案 4 :(得分:2)

Simian是一种声称能够分析各种语言(包括C#)的源代码的产品。我从来没有用过它,所以我根本不能保证它。它可以免费用于非商业用途,并且会将它出售给您进行商业项目。

答案 5 :(得分:2)

我已经多次使用过Simian来对抗java和ruby代码库,它运行得很好。似乎它也支持c#。 http://www.redhillconsulting.com.au/products/simian/overview.html

答案 6 :(得分:1)

如果您正在考虑在项目中找到重复的代码,那么您也应该考虑调查使用更广泛的static code analysis工具。

Sonar之类的东西检查重复代码,编码标准,单元测试,代码覆盖率,复杂代码,潜在错误,注释以及设计和架构。

您可以找到list of static code analysis tools on Wikipedia