我们有几个基于相同代码库构建的 C++ 项目。它们之间有很多相似之处和共同的代码,但它们是独立开发的;来源未以任何方式共享。即使底层代码没有更改,并且个别行将被调整、更改和替换,类和文件也将被重命名。
我希望能够比较不同的代码库并找出有多少代码仍然相同。它可以是相当高的水平——相同的代码的百分比就可以了。我还需要能够自动化这个过程。
是否有一个工具可以在代码库上运行并获得某种报告/评估常见程度?
我对这类事情没有太多经验,但这让我回想起我的学生时代,当时我们的大学会通过一个程序运行每个人的代码来寻找作弊者。 这让我看到了以下链接:
它列出了一些应该满足您的需求的开源和商业软件。
有 java 工具 dude,它是 MOOSE 软件再造工具包的一部分,由 Richard Wettel 开发。它记录在他的(硕士?)论文中。 MOOSE 提供的远不止这些,你可能想看看他的 Codecity。
我已经在 java、c#、delphi、xml 上使用过它。它在 c++ 上也应该可以正常工作。对于大型代码库,不要忘记为其提供足够的堆空间,并从简单的相似性度量开始。
它可能无法完全解决您的问题,但如果您想比较/比较/合并源,我强烈推荐
的BeyondComparehttp://www.scootersoftware.com/
这是迄今为止最好的。据我所知,SO 的制作者也使用它。
请参阅我们的 CloneDR,它可以检测精确和几乎未命中的代码重复。 您可以将其应用于两个系统,看看它们共享什么。 CloneDR 适用于多种编程语言,包括 C++。
不是直接 diff 工具,但您可以使用 scancode-toolkit 进行评估,然后比较两个评估。
示例:
scancode < fullpathtocoderoot > --json-pp results.json