如何比较类似的代码基? 我们有几个C++项目,它们是由同一个代码库构建的。它们之间有很多相似之处和共同的代码,但它们是独立开发的;未以任何方式共享源。类和文件将被重命名,即使底层代码没有更改,并且单个行将被调整、更改和替换

如何比较类似的代码基? 我们有几个C++项目,它们是由同一个代码库构建的。它们之间有很多相似之处和共同的代码,但它们是独立开发的;未以任何方式共享源。类和文件将被重命名,即使底层代码没有更改,并且单个行将被调整、更改和替换,c++,code-analysis,C++,Code Analysis,我希望能够比较不同的代码库,并找出有多少代码仍然是相同的。它可以是相当高的级别-%相同的代码就可以了。我还需要能够自动化这个过程 有没有一个工具可以让我在代码库上运行,并得到一些关于多少是常见的报告/评估?我对这类事情没有太多经验,但它让我回想起我的学校时代,那时我们大学会通过一个程序运行每个人的代码来寻找作弊者。这让我想到了以下链接: 它列出了一些应该满足您需求的开源和商业软件。它可能无法完全解决您的问题,但如果您想比较/diff/merge源代码,我强烈建议您使用BeyondCompare

我希望能够比较不同的代码库,并找出有多少代码仍然是相同的。它可以是相当高的级别-%相同的代码就可以了。我还需要能够自动化这个过程


有没有一个工具可以让我在代码库上运行,并得到一些关于多少是常见的报告/评估?

我对这类事情没有太多经验,但它让我回想起我的学校时代,那时我们大学会通过一个程序运行每个人的代码来寻找作弊者。这让我想到了以下链接:


它列出了一些应该满足您需求的开源和商业软件。

它可能无法完全解决您的问题,但如果您想比较/diff/merge源代码,我强烈建议您使用BeyondCompare

这是目前为止最好的。据我所知,SO的制造商也在使用java工具。

有Richard Wettel的java工具,它是MOOSE软件再工程工具包的一部分。这在他的(硕士?)论文中有记载。MOOSE提供的远不止这些,你可能想看看他的编码能力


我在java、c#、delphi和xml上使用过它。它也可以在C++上运行。对于大型代码库,不要忘记给它足够的堆空间,并从一个简单的相似性度量开始

请参阅我们的,它可以检测精确的和几乎未命中的代码复制。您可以在两个系统中应用此功能,以查看它们共享的内容。C克隆OnDoc为各种编程语言工作,包括C++。

@ MedokuSai:没有使用CMS。是的,我们使用PrimCE,尽管项目遍布不同的库。相关问题-学生代码的抄袭测试在微小文件上运行。他们也很单纯;他们只寻找精确的匹配。如果你想在非常大的系统中检测类似的代码,你需要可扩展的克隆检测工具,如果它们能够匹配未遂事件而不是精确的副本,这将非常有用,因为范例不是“复制粘贴”,而是“复制/粘贴/*编辑*”。我同意这些小文件,但至少在我的大学,他们有剽窃工具,检测的不仅仅是精确的匹配。大多数大学水平的学生都足够聪明,知道他们需要在一定程度上编辑他们复制的内容,以掩盖他们作弊的事实。有相当多的人尝试了这一点,但最终被抓到,并向b/c法庭表示敬意。还请注意,我提供的链接上的所有解决方案都表明检测远远超出了简单的复制和粘贴以及处理大型文件集的能力。他们这样做是基于指纹和分析代码结构。这难道不是反对票的理由吗?