首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >代码克隆检测软件

代码克隆检测软件
EN

Software Recommendation用户
提问于 2015-07-20 18:08:18
回答 4查看 1.1K关注 0票数 8

我正在寻找一个简单的工具,可以识别一个或多个文件相似的部分。

我正在开发一个相当古老的代码库,开发人员过去经常使用复制粘贴。最终,我们得到了大约10k行长的C文件。

我想用一个不太复杂的工具来识别类似的代码。

我能用什么软件或工具来完成这项工作?

第一种方法是考虑一个包含C函数的10,000行文件。在这些长函数中,我可以手动识别与其他函数非常相似的块。区别有时是变量foo_m0foo_m1的名称,或者表foo[0]foo[1]的索引。

指出这些类似代码的区域在如此长的文件中并不总是容易的。使用一个可以识别最长冗余块和文件中重复次数最多的工具对于计划重构操作非常有用。

EN

回答 4

Software Recommendation用户

发布于 2016-03-15 18:17:42

我用过四叠纪,它

标识在Java、C#、C、C++、COBOL、Ruby、JSP、ASP、HTML、XML、Visual、Groovy源代码甚至纯文本文件中的复制

这是一个带有不同许可证的商业软件。在比较过程中,它可以找到忽略标识符、大括号等,这样不仅可以找到精确的重复,还可以找到结构上的重复。

它运行得很好,但在我使用它的时候,它似乎总是落后于技术水平(例如,支持C#中的LINQ查询)。因此,如果您使用最新的C++标准,我怀疑它是否会很好地工作。尽管如此,它还是会做得很好。

我不知道它是如何集成到IDE中的。可以在C#中使用它,并使用名为拉尔夫探员的ReSharper插件。也许C++也存在类似的情况。

票数 3
EN

Software Recommendation用户

发布于 2015-07-21 06:24:39

让我推荐这3种工具,它们可以解决您的问题:

http://www.solidsourceit.com/products/SolidSDD-code-duplication-cloning-analysis.html --最好,但不是免费的(实际上有点贵)

http://www.harukizaemon.com/simian/

http://duplo.sourceforge.net/

票数 2
EN

Software Recommendation用户

发布于 2015-07-21 06:13:36

有许多工具可以帮助在C/CPP代码中找到直接副本/重复代码,正如堆栈溢出问题的答案所指出的那样。正如所指出的,许多检测机制仅仅因为简单的缩进变化而失效。

就我个人而言,我发现代码重复检测的最佳机制之一是将大文件重构为按目的分组并给出有意义的名称的小文件,从维护和编译时间的角度来看,这几乎总是值得做的。您很快就会发现您需要的名称已经存在,然后可以只使用一个版本,或者泛化/抽象代码。我已经看到了一些例子,代码应该做的事情与某些索引的值是相同的,实际上,在我正在考虑的情况下,有几个副本,在不同的时间,一些缺失的bug修复已经找到,泛化可以通过传递一个枚举来指定哪个用例,并使用它来选择索引(Es),或者在使用之前直接传递索引和范围检查。

票数 1
EN
页面原文内容由Software Recommendation提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwarerecs.stackexchange.com/questions/21318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档