Ich spreche nicht von einem Diff-Tool. Ich bin wirklich gespannt, ob ein Projekt Code enthält, der möglicherweise von einem anderen Projekt "überarbeitet" wurde. Es ist wahrscheinlich, dass Funktionsnamen, Variablennamen und so weiter geändert werden. Bedingungen können umgekehrt werden usw.
tools
comparison
Tamara Wijsman
quelle
quelle
Antworten:
Als ich Software Engineering unterrichtete, nutzte ich den (kostenlosen) Dienst MOSS (Measure of Software Similarity) von Stanford. Dadurch konnte ich sehr leicht Plagiate zwischen Studentenprojekten erkennen. Das System erlaubte mir auch, "bekannt gute" Codebeispiele einzugeben, die ich während des Unterrichts verwendet hatte und die ignoriert werden sollten.
Das Tolle an den Ergebnissen war, dass wir feststellen konnten, welche Schüler zusammengearbeitet hatten - auch wenn sie den Code nicht offen kopierten, diskutierten sie die Probleme so oft, dass ihr Code ähnlich war. Das Traurige war, den einen oder anderen Schüler zu finden, der mit keinem anderen Code vergleichbar war. Sie machten es normalerweise nicht so gut.
quelle
Möglicherweise können Sie das PMD-Tool verwenden , um das Gesuchte zu finden. Es ist dazu gedacht, das Ausschneiden und Einfügen in einer Codebasis zu erkennen. Wenn Sie jedoch die Quelle des vermuteten Ursprungsprojekts angeben, können Sie möglicherweise sehen, wo Code daraus kopiert wurde.
quelle
Das nächste, was ich von dem, was Sie suchen, weiß, ist Clone Detective. Es ist ein Visual Studio-Plug-In.
quelle
Es hört sich so an, als ob Sie den Unterschied zwischen zwei abstrakten Syntaxbäumen (AST) berechnen möchten, sodass Sie möglicherweise an dem Smart Differencer-Tool interessiert sind .
Gefunden unter https://stackoverflow.com/questions/974855/eclipse-abstract-syntax-tree-diff .
quelle
Auch wenn es sich nicht um ein Diff-Tool handelt, können Sie es zumindest in gewissem Umfang verwenden. Wenn ich zum Beispiel zwei Codeabschnitte sehe, die ähnlich aussehen, füge ich häufig beide in BeyondCompare ein, um zu sehen, wie viel Arbeit es bedeuten würde, sie zu vereinfachen, indem die allgemeine Funktionalität überarbeitet wird.
Auf der anderen Seite, wenn Sie nicht wissen, wo sich der ähnliche Code befindet, sich aber fragen, ob es irgendwo einen gibt ... wonach suchen Sie? Ein automatisiertes Tool zur Erkennung von Plagiaten? Ich bin mir nicht sicher, ob es so etwas gibt.
quelle
Dieser Artikel auf Wikipedia zu diesem Thema enthält auch Links zu verschiedenen Tools, mit denen Sie ähnlichen oder doppelten Code finden können. Wir haben ein internes Tool dafür, so dass ich mit den im Artikel erwähnten externen Tools nicht vertraut bin.
quelle
Was Sie wirklich tun möchten, ist zu sehen, ob Code zwischen den beiden Projekten geklont (kopiert) wurde (beide Projekte bestehen aus möglicherweise großen Dateigruppen). Sie können dies tun, indem Sie ein Tool zur Klonerkennung ausführen. Wikipedia listet eine Vielzahl von ihnen auf.
Um grob zu entscheiden, ob viel kopiert wird, müssen Sie nur die Quelllinien abgleichen, und es gibt eine Vielzahl von exakten Quelllinien-Klon-Detektoren. Ich glaube, PMD ist einer von ihnen. Was diese nicht tun, ist, Code zu finden, der durch Kopieren und Einfügen bearbeitet wurde. Sie werden feststellen, dass der Code, der durch Kopieren und Einfügen unverändert bleibt, wahrscheinlich um das kopierte, überarbeitete Material gewickelt ist.
Wenn Sie die Details des Kopierens für Copy-Past-Edit-Code anzeigen möchten, benötigen Sie einen Klondetektor, der "parametrisierte" Klone findet. Token-basierte Detektoren tun dies für Bearbeitungen, die nur Variablennamen oder Konstanten ersetzen.
Auf Abstract-Syntax Tree (AST) basierende Detektoren führen dies für Bearbeitungen durch, die größere Teile wie Ausdrücke, Anweisungen, Einfügungen, Löschungen usw. umfassen. Letztere geben tendenziell bessere Antworten, da sie im Gegensatz zu den Tokendetektoren die Sprachstruktur des Computer-Quellcodes als Leitfaden verwenden können.
Unser CloneDR- Tool ist ein solcher Detektor.
Ich kenne keine Tools, die tatsächlich "äquivalenten" Code finden (umgekehrte Bedingungen) usw. Forscher haben Klondetektoren gebaut, die so etwas tun, aber die Kombinatorik macht die Ausführung sehr teuer, und die Forschungsprototypen sind schlecht skaliert.
quelle
Mir gefällt sehr, wie CCFinderX Ähnlichkeiten visualisiert. Vielleicht möchten Sie auch diese überprüfen. Unterstützt eine ganze Reihe von Sprachen, ist kostenlos und ziemlich einfach einzurichten (Python 2.6).
quelle