mik*_*esl 4 diff compare codebase
我有两个项目,每个项目都有大量的代码库。我想运行一个工具来浏览每个项目中的所有文件,并显示项目中的哪些文件具有相似的代码。我什至不确定是否存在这样的东西,但我记得在学校时,老师们有一个工具,他们在多个学生的所有代码上运行,以识别他们的代码有多相似(以抓住作弊者)。
你想要的是一个克隆检测工具。这些工具可以查找任何文件集中重复的代码。对于您的任务,您将获取两个项目的文件,并在该集合中进行克隆检测。
[编辑 2019 基于真实经验,完全按照 OP 想做的事情]。
如果在一个项目的文件中找到一个克隆,该克隆与在另一个项目的文件中找到的克隆相对应,那么您就发现了它们的共同点。
对两个项目的所有文件进行直接克隆检测的一个缺陷是,您会发现一个项目中的许多克隆到同一个项目中。根据您的问题,这些并不有趣,例如误报。
我的公司提供了一种名为CloneDR的商业克隆检测器。它(恕我直言)是一个非常好的检测器,并且会找到其他检测器无法找到的克隆(例如,它不会被注释更改、代码布局、数字基数、变量重命名、甚至代码片段的插入或删除所欺骗)。但它还有另一个非常好的特性:它可以选择仅跨两个项目代码库检测克隆。您不会得到将这两个项目视为一个项目所得到的误报。