2009-10-08 6 views
8

In einem Projekt habe ich einige CSS-Dateien gefunden, die "riechen", als wären darin kopierte Regeln eingefügt.Tipps zum Anzeigen von Ähnlichkeiten in Dateien

Ich frage mich, was sind Ihre Strategien zum Erkennen von Copy-Paste Zeug in Dateien.

Nur aus Neugier möchte ich Ihre Tipps und Tricks zum Anzeigen von Dateiähnlichkeiten hören!

+0

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

+0

mögliche Duplikate von [Wie finden Sie ein ähnliches Codefragment?] (Http: //stackoverflow.com/questions/709744/how-to-find-a-similar-code-fragment) –

Antwort

4

Versuchen Sie Simian.

Es ist für die Copy-Paste-Erkennung im Quellcode (Java, C#, C, C++, COBOL, Ruby, JSP, ASP, HTML, XML, Visual Basic, Groovy) verwendet, aber Sie können dies auf Ebene ausführen Textdateien auch.

+0

gibt es eine Möglichkeit, Simian die tatsächlichen Ähnlichkeiten zu zeigen? In meinem Testlauf zeigt es nur eine Zusammenfassung, dass "Zeilen a bis b in Datei X den Zeilen c bis d in Datei Y ähnlich sind" ??? Das Anzeigen der tatsächlichen Zeilen wird helfen, eine Menge zu klären –

+0

Oder noch besser: gibt es eine Möglichkeit, es diffs für die Zeilen, die ähnlich sind, zu zeigen? –

+0

Ich fürchte, Sie müssen die Ergebnisse manuell überprüfen oder ein Tool schreiben, das Simian-Ergebnisse auswertet und sie an einen Dateibetrachter anhängt. Vielleicht könnten Sie zu diesem Zweck ein kostenloses Diff-Tool (z. B. WinMerge, http://winmerge.org/) verwenden. Wenn Sie sich für Letzteres entscheiden: Ich würde mich auch für eine solche Lösung interessieren ... –

3

Es gibt ein Copy-Paste Detection (CPD) -Projekt auf Sourceforge; http://pmd.sourceforge.net/cpd.html

Aber selbst in großen Projekten finde ich meine eigenen Kenntnisse des Codes als einen zuverlässigen (wenn auch nicht idiotensicheren) Erkennungsmechanismus.

Weitere Vorschläge finden Sie unter this question.

+1

Das CPD-Tool scheint in den Sprachen sehr begrenzt zu sein. Und hat kein Javascript oder CSS –

+0

Danke für das Zeigen auf "diese Frage". Sehr ähnlich, btw :) –

1

Unsere Semantic Designs CloneDR ist ein Werkzeug, das Copy-Paste-edit Codeblöcke, für viele Sprachen erfasst: C, C++, Java, C++, COBOL, ECMAScript, PHP, VB6, VB.net, ...

Es verwendet Sprach-genaue Parser, um abstrakte Syntaxbäume zu erstellen, die genauen Programmstrukturen entsprechen, die dann auf Ähnlichkeit verglichen werden. Dies bedeutet, dass es in keiner Weise durch Whitespace, Formmatting, Kommentare oder sogar unterschiedliche "Schreibweisen" von Literalen (z. B. 3.14159 ist das gleiche wie .00314150E3) verwechselt wird.

Es generiert einen Bericht, der zeigt genau wie die Blöcke des Codes ähnlich sind, und genau, wie sie variieren. Sie können Beispielberichte über den Link sehen.

+0

Ihr Link funktioniert nicht? Könnten Sie bitte Ihre Antwort aktualisieren? –

+0

... oops ... behoben. –