2

我有数百组源代码,我知道文件是从一个项目复制到另一个项目的。大多数项目在事实发生很久之后就被检查到颠覆(修订历史将毫无用处)。是否有任何自动化工具可以让我弄清楚哪些项目是最古老的,以及源代码的家族树是什么?

4

1 回答 1

0

如果代码包含日期信息 [例如。某些以前的配置管理工具的签入日期等] 或版本信息,您显然应该将其用作起点。

完成此操作后,您要做的就是将源代码集相互比较,并根据编辑的最小距离形成一个沿袭树。也就是说,对于某些定义,如果 (A,B) 的增量计数小于系统中所有其他 x 和 y 的 (A,x) 和 (y,B) 的增量计数,则 A 可能是从 B 派生的delta 在行更改、行移动、文件重命名、文件移动等方面的差异。此外,如果从 A 到 B 的更改是从 A 到 C 的更改的子集,则 B 可能是中介。

这将您的问题减少到跨系统对检测“增量计数”和/或比较增量集以进行包含。为此,您可能需要一个克隆检测器,它会告诉您代码的哪些部分是相同的;补语是不同的。

我不知道有没有人把它打包成一个简洁的形式以便于使用。您可能最接近的是结构克隆检测器,请参阅http://www.comp.nus.edu.sg/~stan/PAPERS/CMCA%20Summary.pdf 我不认为这会产生细粒度匹配,所以增量计数可能有点粗糙。

如果您想要更精细的克隆检测,并且代码主要使用一种计算机语言,您可以考虑我们的 CloneDR 和/或 SmartDifferencers,它们在从语言精确解析器中提取的抽象语法树级别比较代码。

于 2013-02-26T22:41:39.393 回答