Il n'est pas rare de dire que les clones de code copier-coller du code source sont plus fiables, mais dans de nombreux cas, la présence de clones de code nous afflige souvent à la dernière minute.
Après que le responsable s'est enfui, a corrigé le code source jusque tard dans la nuit et l'a publié, en fait, il a dit: "Je le fais avec du copier-coller, alors s'il vous plaît, corrigez tout le reste et testez-le." Est très, très triste.
C'est une humiliation de modifier presque le même code source en le changeant subtilement comme à la recherche d'une erreur.
À la dernière minute, pour éviter de tels jeux de punition, la fréquence de copie doit être surveillée à tout moment et toute fréquence inhabituelle doit être corrigée immédiatement.
Cette section décrit les outils de détection du copier-coller.
PMD-CPD PMD est un outil de détection de problèmes potentiels dans le code source Java implémenté en Java. http://pmd.sourceforge.net/snapshot/
Une partie de cette fonctionnalité est la commande CPD, qui détecte le code en double et peut détecter les doublons dans les langages de programmation suivants: ・ Java ・ JSP ・ C ++ ・ Rubis ・ Fortran ・ PHP ・ C # ・ PLSQL ・ Ecmascript
Téléchargez l'un des fichiers suivants, décompressez-le et extrayez-le dans n'importe quel dossier. 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
Les paramètres sont partagés entre Windows et Linux.
Paramètres | La description |
---|---|
--minimum-tokens | Spécifiez le nombre de jetons pour détecter les doublons. |
--format | text,xml,Vous pouvez sélectionner csv. Si vous le sortez en xml, vous pouvez l'utiliser dans jenkins. |
--language | Spécifie le type de langage de programmation. |
--files | Spécifiez le répertoire du code source à inspecter. Ceci est détecté de manière récursive. |
--encoding | Spécifie le codage du code source à inspecter |
GUI Vous pouvez également travailler avec l'interface graphique en exécutant bin / cpdgui.bat.
Clonedigger Clonedigger est un outil de détection de copier / coller implémenté en Python et Java. http://clonedigger.sourceforge.net/
Les langages de programmation découvrables sont:
・ Python ・ Java ・ Lua ・ Javascript
Voici quelques conseils ci-dessous pour détecter les langages de programmation autres que python.
easy_install clonedigger
__ Si vous spécifiez un fichier __
clonedigger -l python -o ./test.html C:\tool\clonedigger\test\test_utf8.py
__Si vous spécifiez un dossier __
clonedigger -l python -o ./test.html C:\tool\clonedigger\test\test_utf8.py
Si vous spécifiez un dossier, les sous-dossiers sont également détectés. Crée le code HTML suivant dans le fichier spécifié par -o.
Si vous utilisez l'option --cpd-output comme suit, elle sera sortie au format XML. Ce format de sortie est le même que PMD / CPD.
clonedigger -l python --cpd-output -o test.xml C:\tool\clonedigger\test\python\
Lors de la détection de code source autre que Python, cela ne fonctionnera que si java_antlr existe dans le répertoire courant. Pour Windows et Python 2.7, les opérations suivantes sont requises.
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
Lors de la détection de JavaScript, cela ne fonctionnera que si js_antlr existe dans le répertoire courant. Pour Windows et Python 2.7, les opérations suivantes sont requises.
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 qui s'exécute dans le navigateur fonctionne également avec l'implémentation bâclée suivante.
//Dernière virgule supplémentaire
var questions = [
{message: "Ah ah", category: Category.emotionalExhaustion} ,
];
Cependant, dans clonedigger, s'il existe une telle description invalide, l'analyse sera interrompue et une erreur se produira. À ce moment, le message d'erreur suivant s'affichera, ce qui sera un conseil pour la correction.
line 14:2 rule arrayItem failed predicate: { input.LA(1) == COMMA }?
AIST CCFinderX Vous pouvez télécharger AIST CC Finder X, qui a été dit dans les commentaires, à partir de la page suivante. http://www.ccfinder.net/ccfinderxos-j.html
Il nécessite Java 32 bits et Python 2.6 (pas de haut ni de bas) pour fonctionner. Si vous téléchargez le binaire Windows, il ne fonctionnera que si vous l'exécutez sur 32 bits, vous devez donc modifier gemx.bat comme suit.
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
L'image suivante est un exemple de l'écran détecté par gem x.bat.
En outre, vous pouvez également afficher un diagramme de dispersion. Ces interfaces graphiques sont fascinantes.
Lorsqu'il est exécuté à partir de la ligne de commande:
ccfx p java -d c:\dev\java\
La sortie a.ccfxd à ce moment est un fichier binaire qui peut être ouvert avec GemX. Vous pouvez le convertir au format texte avec la commande suivante.
>ccfx p a.ccfxd > test.txt
Visual Basic est rarement pris en charge en tant qu'outil de ce type. Il semble que le code réalisé avec VB6 et VBA soit également analysé. Cependant, il ne reconnaît pas le fichier cls, modifiez donc ccfx_prep_scripts.ini comme suit.
visualbasic=.vb;.bas;.frm;.cls
-Le traitement des sources qui gèrent plusieurs octets peut avoir échoué. ・ Autant que j'ai enquêté, il semble peu probable que la coopération avec Jenkins soit facile. -La page d'historique de mise à jour étant un lien mort, il semble qu'elle ne soit plus maintenue. J'ai le code source, donc je vais devoir le réparer moi-même si nécessaire.
Vous pouvez surveiller les transitions de clonage de code avec le plug-in Jenkins Violations. https://wiki.jenkins-ci.org/display/JENKINS/Violations
Générez du XML sur l'espace de travail sur le script Jenkins.
Dans le processus de post-génération des paramètres du projet, spécifiez le code XML de 1. dans le cpd de Report Violations.
Chaque build créera un rapport comme celui ci-dessous.