我将编写一个算法来检测源代码中的克隆。例如,如果存在以下块:
for(int i = o; i <5; i++){
doSomething(abc);
}
如果这个代码块在源代码的其他地方被重复使用,它将被检测为克隆。目前我使用的方法是为每行/每个块创建哈希值,并将其与同一源代码中其他行/块的哈希值进行比较,以查看是否存在匹配项。
现在,如果上面的相同块在某个地方重复出现,只有doSomething参数不同,它将不会被检测为克隆,即使它看起来非常像克隆。我的算法只能检测精确匹配,无法检测仅参数不同的匹配块。
有没有人能提出解决这个问题的方法?谢谢!