Je suis dans un projet où les programmeurs précédents ont copié-collé des codes 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 à refactoriser ces codes manuellement, mais je pense qu'il doit y avoir une meilleure façon. Certaines sont des méthodes statiques très triviales qui auraient pu être déplacées dans une classe ancêtre (mais à la place ont été copiées partout par les 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.
J'utilise les outils suivants:
Les deux outils prennent en charge la détection de duplication de code. Mais les deux n'ont pas la capacité de vous conseiller sur la refonte de votre code.
JetBrains IntelliJ IDEA Ultimate a une bonne analyse de code statique avec prise en charge de la duplication de code, mais ce n'est pas gratuit.
La plupart des outils répertoriés dans l'article de Wikipédia sur Duplicate Code Tools détectera les doublons dans de nombreuses langues différentes, y compris Java.
SonarQube peut détecter les codes dupliqués mais ne donne aucune recommandation sur leur élimination. Il est gratuit et - bien qu'avec la configuration par défaut, il ne peut détecter que des clones lexicalement identiques
http://checkstyle.sourceforge.net/ prend en charge la recherche de doublons
Voir notre SD Java CloneDR , un outil pour détecter le code en double exact et presque manqué dans les grands systèmes Java Java).
Le CloneDR trouvera des clones de code malgré les changements d'espaces, les sauts de ligne, les suppressions d'insertions de commentaires, la modification de constantes ou d'identifiants, et dans un certain nombre de cas, même le remplacement d'une instruction par une autre ou d'un bloc d'instructions.
Il montre où chaque ensemble de clones est trouvé, chaque clone individuel, une abstraction des clones ayant leur communauté commune et le paramétrage de l'abstraction pour montrer comment chaque instance de clone peut être dérivée de l'abstraction.
Il trouve 10 à 20% de clones dans la plupart des systèmes Java.