302 votes

Comment trouver le code inutilisé ou mort dans les projets java ?

Quels outils utilisez-vous pour trouver le code inutilisé ou mort dans les grands projets java ? Notre produit est en développement depuis quelques années et il devient très difficile de détecter manuellement le code qui n'est plus utilisé. Nous essayons cependant de supprimer autant de code inutilisé que possible.

Les suggestions de stratégies/techniques générales (autres que des outils spécifiques) sont également appréciées.

Editar: Notez que nous utilisons déjà des outils de couverture de code (Clover, IntelliJ), mais ils ne sont pas d'une grande aide. Le code mort a toujours des tests unitaires, et apparaît comme couvert. Je pense qu'un outil idéal permettrait d'identifier des groupes de code dont très peu d'autres codes dépendent, ce qui permettrait une inspection manuelle des documents.

221voto

Mikezx6r Points 6541

Un plugin Eclipse qui fonctionne raisonnablement bien est le suivant Détecteur de code non utilisé .

Il traite un projet entier ou un fichier spécifique et montre diverses méthodes de code inutilisées/mortes, tout en suggérant des changements de visibilité (c'est-à-dire une méthode publique qui pourrait être protégée ou privée).

64voto

Berlin Brown Points 2880

CodePro a été récemment publié par Google avec le projet Eclipse. Il est gratuit et très efficace.

39voto

akuhn Points 12241

J'instrumenterais le système en cours d'exécution afin de conserver les journaux d'utilisation du code, puis je commencerais à inspecter le code qui n'est pas utilisé pendant des mois ou des années.

Par exemple, si vous êtes intéressé par les classes inutilisées, toutes les classes pourraient être instrumentées pour journaliser la création d'instances. Et ensuite un petit script pourrait comparer ces logs à la liste complète des classes pour trouver les classes inutilisées.

Bien entendu, si vous optez pour la méthode, vous devez garder à l'esprit les performances. Par exemple, les méthodes pourraient n'enregistrer que leur première utilisation. Je ne sais pas quelle est la meilleure façon de procéder en Java. Nous l'avons fait en Smalltalk, qui est un langage dynamique et qui permet donc de modifier le code au moment de l'exécution. Nous instrumentons toutes les méthodes avec un appel de journalisation et désinstallons le code de journalisation après qu'une méthode ait été journalisée pour la première fois, ainsi après un certain temps, il n'y a plus de pénalités de performance. Peut-être qu'une chose similaire peut être faite en Java avec des drapeaux booléens statiques...

30voto

Je suis surpris ProGuard n'a pas été mentionné ici. C'est l'un des produits les plus matures qui existent.

ProGuard est un réducteur, optimiseur, obfuscateur et préverificateur gratuit de fichiers de classes Java, et préverificateur. Il détecte et supprime les classes, champs, méthodes et attributs inutilisés. Il optimise le bytecode et supprime les instructions inutilisées. inutilisées. Il renomme les classes, les champs et les méthodes restants en utilisant des noms courts et sans signification. Enfin, il préverifie le code traité code traité pour Java 6 ou pour Java Micro Edition.

26voto

skiphoppy Points 16563

Une chose que je suis connu pour faire dans Eclipse, sur une seule classe, est de changer toutes ses méthodes en privées et ensuite voir quelles plaintes j'obtiens. Pour les méthodes qui sont utilisées, cela provoquera des erreurs, et je les renvoie au niveau d'accès le plus bas possible. Pour les méthodes qui ne sont pas utilisées, cela provoquera des avertissements sur les méthodes inutilisées, et celles-ci pourront alors être supprimées. Et en bonus, vous trouverez souvent des méthodes publiques qui peuvent et doivent être rendues privées.

Mais c'est très manuel.

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