2009-10-08 15 views
8

Dans un projet, j'ai trouvé des fichiers CSS qui "sentent" qu'il y a des règles copiées-collées.Conseils pour afficher les similitudes dans les fichiers

Je me demande quelles sont vos stratégies pour détecter des trucs de copier-coller dans les fichiers.

Juste par curiosité j'aimerais entendre vos trucs et astuces pour montrer des similitudes de fichier!

+0

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

+0

duplication possible de [Comment trouver un fragment de code similaire?] (Http: //stackoverflow.com/questions/709744/how-to-find-a-similar-code-fragment) –

Répondre

4

Essayez Simian.

Il est utilisé pour la copie-coller-détection dans le code source (Java, C#, C, C++, COBOL, Ruby, JSP, ASP, HTML, XML, Visual Basic, Groovy), mais vous pouvez exécuter cela fichiers texte aussi.

+0

est-il un moyen de faire simien montrer les similitudes réelles? Sur mon test, il ne montre qu'un résumé que "les lignes a à b dans le fichier X sont similaires aux lignes c à d dans le fichier Y" ??? Montrer les lignes réelles aidera à clarifier beaucoup –

+0

Ou mieux encore: existe-t-il un moyen de rendre diffs les lignes similaires? –

+0

Je crains que vous deviez vérifier les résultats manuellement ou écrire un outil qui évalue les résultats Simian et les attache à un visualiseur de fichiers. Peut-être pourriez-vous utiliser un outil de comparaison gratuit (par exemple WinMerge, http://winmerge.org/) à cette fin. Si vous décidez pour le dernier: je serais intéressé par une telle solution aussi ... –

3

Il existe un projet de Copier-Coller la détection (CPD) sur sourceforge; Mais même dans les grands projets, je trouve que ma propre connaissance du code est un mécanisme de détection fiable (bien que non infaillible). Pour plus d'informations, voir aussi this question.

+1

L'outil CPD semble très limité dans les langues. Et n'a pas javascript ou CSS –

+0

Merci de pointer vers "cette question". Très similaire à cela, btw :) –

1

Notre Semantic Designs CloneDR est un outil qui détecte des blocs-édition de copier-coller de code, pour de nombreuses langues: C, C++, Java, C++, COBOL, ECMAScript, PHP, VB6, VB.net, ...

Il utilise des analyseurs syntaxiques précis pour construire des arbres syntaxiques abstraits, correspondant à des structures de programme exactes, qui sont ensuite comparées pour la similarité. Cela signifie qu'il n'est pas du tout confondu par l'espace, le formatage, les commentaires, ou même l'orthographe différente des littéraux (par exemple, 3.14159 est le même que .00314150E3).

Il génère un rapport qui montre exactement comment les blocs de code sont similaires, et précisément comment ils varient. Vous pouvez voir des exemples de rapports sur le lien.

+0

Votre lien ne fonctionne pas? Pourriez-vous s'il vous plaît mettre à jour votre réponse? –

+0

... oops ... corrigé. –