Es ist nicht ungewöhnlich zu sagen, dass das Kopieren und Einfügen von Codeklonen des Quellcodes zuverlässiger ist, aber in vielen Fällen sind wir häufig in letzter Minute von Codeklonen betroffen.
Nachdem die verantwortliche Person weggelaufen war, den Quellcode bis spät in die Nacht korrigiert und veröffentlicht hatte, sagte er: "Ich mache es mit Kopieren und Einfügen, also bitte alles andere reparieren und testen." Ist sehr sehr traurig.
Es ist eine Demütigung, fast denselben Quellcode zu ändern, indem man ihn subtil ändert, als würde man nach einem Fehler suchen.
Um solche Bestrafungsspiele zu vermeiden, sollte in letzter Minute die Häufigkeit des Kopierens jederzeit überwacht und ungewöhnliche Häufigkeit sofort korrigiert werden.
In diesem Abschnitt werden die Tools zum Erkennen von Kopieren und Einfügen beschrieben.
PMD-CPD PMD ist ein Tool zum Erkennen potenzieller Probleme im in Java implementierten Java-Quellcode. http://pmd.sourceforge.net/snapshot/
Teil dieser Funktion ist der CPD-Befehl, der doppelten Code erkennt und doppelte Codes in den folgenden Programmiersprachen erkennen kann: ・ Java ・ JSP ・ C ++ ・ Ruby ・ Fortran ・ PHP ・ C # ・ PLSQL ・ Ecmascript
Laden Sie eine der folgenden Dateien herunter, entpacken Sie sie und extrahieren Sie sie in einen beliebigen Ordner. http://sourceforge.net/projects/pmd/files/pmd/
cpd --minimum-tokens 50 --language ecmascript --format text --encoding utf8 --files C:\tool\clonedigger\test\ > result.txt
bin/run.sh cpd --minimum-tokens 35 --format xml --language ruby --files /var/lib/redmine/app/ > result.xml
Die Parameter werden von Windows und Linux gemeinsam genutzt.
Parameter | Erläuterung |
---|---|
--minimum-tokens | Geben Sie die Anzahl der Token an, um Duplikate zu erkennen. |
--format | text,xml,Sie können csv auswählen. Wenn Sie es in XML ausgeben, können Sie es in Jenkins verwenden. |
--language | Gibt den Typ der Programmiersprache an. |
--files | Geben Sie das Verzeichnis des zu überprüfenden Quellcodes an. Dies wird rekursiv erkannt. |
--encoding | Gibt die Codierung des zu prüfenden Quellcodes an |
GUI Sie können auch mit der GUI arbeiten, indem Sie bin / cpdgui.bat ausführen.
Clonedigger Clonedigger ist ein in Python und Java implementiertes Tool zum Erkennen von Kopieren / Einfügen. http://clonedigger.sourceforge.net/
Die auffindbaren Programmiersprachen sind:
・ Python ・ Java ・ Lua ・ Javascript
Im Folgenden finden Sie einige Tipps zum Erkennen anderer Programmiersprachen als Python.
easy_install clonedigger
__ Wenn Sie eine Datei angeben __
clonedigger -l python -o ./test.html C:\tool\clonedigger\test\test_utf8.py
__Wenn Sie einen Ordner angeben __
clonedigger -l python -o ./test.html C:\tool\clonedigger\test\test_utf8.py
Wenn Sie einen Ordner angeben, werden auch Unterordner erkannt. Erstellt den folgenden HTML-Code in der durch -o angegebenen Datei.
Wenn Sie die Option --cpd-output wie folgt verwenden, wird sie im XML-Format ausgegeben. Dieses Ausgabeformat entspricht PMD / CPD.
clonedigger -l python --cpd-output -o test.xml C:\tool\clonedigger\test\python\
Wenn Sie anderen Quellcode als Python erkennen, funktioniert dies nur, wenn java_antlr im aktuellen Verzeichnis vorhanden ist. Für Windows und Python 2.7 sind die folgenden Vorgänge erforderlich.
cd C:\Python27\Lib\site-packages\clonedigger-1.1.0-py2.7.egg\clonedigger
clonedigger -l java --cpd-output -o test.xml C:\tool\clonedigger\test\test.java
Wenn JavaScript erkannt wird, funktioniert es nur, wenn js_antlr im aktuellen Verzeichnis vorhanden ist. Für Windows und Python 2.7 sind die folgenden Vorgänge erforderlich.
cd C:\Python27\Lib\site-packages\clonedigger-1.1.0-py2.7.egg\clonedigger
clonedigger -l js --cpd-output -o test.xml C:\tool\clonedigger\test\test.js
JavaScript, das im Browser ausgeführt wird, funktioniert auch mit der folgenden schlampigen Implementierung.
//Extra letztes Komma
var questions = [
{message: "ah ah", category: Category.emotionalExhaustion} ,
];
Wenn bei Clonedigger eine solche ungültige Beschreibung vorliegt, wird die Analyse unterbrochen und ein Fehler auftritt. Zu diesem Zeitpunkt wird die folgende Fehlermeldung angezeigt, die einen Hinweis zur Korrektur darstellt.
line 14:2 rule arrayItem failed predicate: { input.LA(1) == COMMA }?
AIST CCFinderX Sie können den in den Kommentaren gelehrten AIST CC Finder X von der folgenden Seite herunterladen. http://www.ccfinder.net/ccfinderxos-j.html
Es erfordert 32-Bit-Java und Python 2.6 (weder oben noch unten), um zu funktionieren. Wenn Sie die Windows-Binärdatei herunterladen, funktioniert sie nur, wenn Sie sie auf 32 Bit ausführen. Daher müssen Sie gemx.bat wie folgt ändern.
gemx.bat
set PATH=C:\Windows\SysWOW64;C:\TracLight\python;C:\TracLight\python\python\Scripts\;%~dp0\scripts
set CCFINDERX_PYTHON_INTERPRETER_PATH=C:\TracLight\python\python.exe
Das folgende Bild ist ein Beispiel für den Bildschirm, der von gem x.bat erkannt wurde.
Darüber hinaus können Sie auch ein Streudiagramm anzeigen. Diese GUIs sind faszinierend.
Bei Ausführung über die Befehlszeile:
ccfx p java -d c:\dev\java\
Die a.ccfxd-Ausgabe zu diesem Zeitpunkt ist eine Binärdatei, die mit GemX geöffnet werden kann. Sie können es mit dem folgenden Befehl in das Textformat konvertieren.
>ccfx p a.ccfxd > test.txt
Visual Basic wird als solches Tool selten unterstützt. Es scheint, dass der mit VB6 und VBA erstellte Code ebenfalls analysiert wird. Die cls-Datei wird jedoch nicht erkannt. Ändern Sie daher ccfx_prep_scripts.ini wie folgt.
visualbasic=.vb;.bas;.frm;.cls
Sie können Code-Klonübergänge mit dem Jenkins Violations-Plug-In überwachen. https://wiki.jenkins-ci.org/display/JENKINS/Violations
Generieren Sie XML im Arbeitsbereich des Jenkins-Skripts.
Geben Sie im Post-Build-Prozess der Projekteinstellungen das XML von 1. im cpd von Berichtsverletzungen an.
Jeder Build erstellt einen Bericht wie den folgenden.
Recommended Posts