2009-10-08 9 views
8

W projekcie znalazłem kilka plików css, które "pachną" tak, jak są w nich wklejane reguły kopiowania.Wskazówki do pokazania podobieństw w plikach

Zastanawiam się, jakie są twoje strategie wykrywania elementów kopiowania i wklejania w plikach.

Po prostu z ciekawości Chciałbym usłyszeć wasze porady i wskazówki dotyczące pokazywania podobieństw plików!

+0

Podobne pytanie - http://stackoverflow.com/questions/2490884/why-is-copy-and-paste-of-code-dangerous – Oded

+0

możliwy duplikat [Jak znaleźć podobny fragment kodu?] (Http: //stackoverflow.com/questions/709744/how-to-find-a-similar-code-fragment) –

Odpowiedz

4

Wypróbuj Simian.

Służy do wykrywania kopiuj-wklej w kodzie źródłowym (Java, C#, C, C++, COBOL, Ruby, JSP, ASP, HTML, XML, Visual Basic, Groovy), ale możesz uruchomić to na zwykłym również pliki tekstowe.

+0

czy istnieje sposób, aby małpa pokazała rzeczywiste podobieństwa? W moim uruchomieniu testowym pokazuje tylko podsumowanie, że "linie a do b w pliku X są podobne do linii c do d w pliku Y" ?? Pokazywanie aktualnych linii pomoże wyjaśnić wiele. –

+0

Albo jeszcze lepiej: czy istnieje sposób na pokazanie różnic dla linii, które są podobne? –

+0

Obawiam się, że musisz ręcznie sprawdzić wyniki lub napisać narzędzie, które oceni wyniki Simian i dołącza je do przeglądarki plików. Być może w tym celu można użyć bezpłatnego narzędzia do porównywania (np. WinMerge, http://winmerge.org/). Jeśli zdecydujesz się na drugie: ja też byłbym zainteresowany takim rozwiązaniem ... –

3

Istnieje projekt wykrywający kopiowanie-wklejanie (CPD) na sourceforge; http://pmd.sourceforge.net/cpd.html

Ale nawet w dużych projektach uważam, że moja znajomość tego kodu jest niezawodny (choć niezawodny) mechanizm wykrywania.

Zobacz także inne sugestie na stronie this question.

+1

Narzędzie CPD wydaje się bardzo ograniczone w językach. I nie ma javascript lub CSS –

+0

Dziękuję za wskazanie "tego pytania". Bardzo podobne do tego, btw :) –

1

Nasz Semantic Designs CloneDR to narzędzie, które wykrywa copy-paste-Edit bloki kodu, dla wielu języków: C, C++, Java, C++, COBOL, ECMAScript, PHP, VB6, VB.net ...

Używa parserów o dokładności językowej do budowania abstrakcyjnych drzew składniowych, odpowiadających dokładnym strukturom programu, które są następnie porównywane pod względem podobieństwa. Oznacza to, że nie jest on w żaden sposób pomieszany z białymi znakami, formmattingiem, komentarzami, a nawet różnymi "pisowniami" literałów (np. 3.14159 jest taki sam jak .00314150E3).

Generuje raport, który pokazuje dokładnie, w jaki sposób bloki kodu są podobne i jak dokładnie się różnią. Możesz zobaczyć przykładowe raporty pod linkiem.

+0

Twój link nie działa? Czy mógłbyś zaktualizować swoją odpowiedź? –

+0

... oops ... naprawione. –