To, co naprawdę chcesz zrobić, to sprawdzić, czy kod jest sklonowany (skopiowany) w dwóch projektach (oba projekty składają się z możliwie dużych zestawów plików). Możesz to zrobić, uruchamiając narzędzie do wykrywania klonów. Wikipedia wymienia wiele z nich.
Aby zdecydować rażąco, czy jest dużo kopiowania, wystarczy dopasować linie źródłowe i istnieje wiele dokładnych detektorów klonowania linii źródłowej. Uważam, że PMD jest jednym z nich. Nie zrobią tego, aby znaleźć kod, który jest edytowany i kopiowany i wklejany; odkryją, że niezmieniony kod kopiuj-wklej-niezmieniony prawdopodobnie jest zawinięty wokół edytowanych elementów.
Jeśli chcesz zobaczyć szczegóły kopiowania dla kodu kopiuj i edytuj, potrzebujesz detektora klonowania, który znajdzie klony „sparametryzowane”. Detektory oparte na tokenach robią to dla edycji, które zastępują tylko nazwy zmiennych lub stałe.
Detektory oparte na drzewie składni abstrakcyjnej (AST) robią to w przypadku edycji z udziałem większych fragmentów, takich jak wyrażenia, instrukcje, wstawki, usunięcia itp. Te ostatnie dają lepsze odpowiedzi, ponieważ w przeciwieństwie do detektorów tokenów, mogą wykorzystać jako strukturę strukturę języka kodu źródłowego komputera.
Nasze narzędzie CloneDR jest takim wykrywaczem.
Nie znam narzędzi, które faktycznie znajdą „równoważny” kod (odwrócone warunkowe) itp. Naukowcy zbudowali detektory klonów, które robią coś takiego, ale kombinatoryka sprawia, że wykonanie tego jest bardzo kosztowne, a prototypy badawcze źle skalowane.