49 votes

Outils pour détecter le code dupliqué (Java)

Je suis dans un projet où les programmeurs précédents ont copié-collé des codes un peu partout. Ces codes sont en fait identiques (ou très similaires) et ils auraient pu être refactorisés en un seul.

J'ai passé d'innombrables heures à remanier ces codes manuellement, mais je pense qu'il doit y avoir un meilleur moyen. Certaines sont des méthodes statiques très triviales qui auraient pu être déplacées dans une classe ancêtre (mais qui ont été copiées-collées partout par des programmeurs juniors précédents).

Existe-t-il un outil d'analyse de code qui peut détecter cela et fournir des rapports/recommandations ? Je préfère un outil gratuit/open source si possible.

12 votes

Il est regrettable que certaines des discussions les plus utiles soient fermées en raison de leur caractère "hors sujet". La discussion ci-dessous contenait-elle "des réponses subjectives et du spam" ? Pourquoi, dès que les gens ont un peu de pouvoir, ils éprouvent ce besoin constant de contrôler quelque chose qui n'en a pas besoin ?

26voto

uthark Points 3507

J'utilise les outils suivants :

Les deux outils ont un support de détection de duplication de code. Mais tous deux n'ont pas la capacité de vous conseiller sur la façon de remanier votre code.

JetBrains IntelliJ IDEA Ultimate possède une bonne analyse statique du code avec prise en charge de la duplication du code, mais il n'est pas gratuit.

3 votes

Checkstyle - non plus

5voto

pepe Points 71

SonarQube peut détecter les codes dupliqués mais ne donne pas de recommandation pour les éliminer. Il est gratuit et, bien qu'avec la configuration par défaut, il ne peut détecter que les clones lexicalement identiques.

5voto

wsanville Points 22066

La plupart des outils répertoriés dans l'article de Wikipédia sur les Outils de duplication de code détectera les doublons dans de nombreux langages différents, y compris Java.

3 votes

Puisque quelqu'un a supprimé les liens unencyclopédiques de wikipedia, voici le lien vers l'ancienne version de la page : fr.wikipedia.org/w/

2voto

Pascal Thivent Points 295221

Soit Simian ou de PMD CPD . Le premier supporte un plus grand nombre de langages mais n'est pas gratuit pour les projets commerciaux.

1 votes

Une caractéristique de simian qui est assez bonne est sa capacité à trouver du code qui n'a pas été copié, mais développé indépendamment. Ainsi, il peut faire la même chose, mais avoir des noms de variables et même des sous-types complètement différents. Dans la configuration de simian, vous pouvez spécifier d'ignorer les noms de variables et de considérer les sous-types comme le même type parent, etc.

0 votes

Il est extrêmement rare que les détecteurs de clones trouvent du code qui "n'a pas été copié mais développé de manière indépendante", à moins que les fragments de code soient microscopiques (a b est un clone de x y et est développé indépendamment mais personne ne s'en soucie). Ayant construit un détecteur de clones puissant, mon expérience est que ce qu'ils trouvent est du code qui a été cloné ; les meilleurs peuvent trouver du code cloné avec des noms de variables modifiés et des constantes différentes. Simian est l'un d'entre eux. Les détecteurs forts (le mien en est un) peuvent détecter quand des sous-expressions et des instructions arbitraires ont été remplacées.

0 votes

Simian ne semble plus exister sous sa forme originale. En tout cas, le lien est mort. Voici un lien vers un outil Simian, mais je ne suis pas sûr qu'il s'agisse du même produit : harukizaemon.com/simian

0voto

Nikolaus Gradwohl Points 8296

http://checkstyle.sourceforge.net/ permet de trouver les doublons

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X