Vérifier automatiquement la qualité d'un code java
Par Benoît COURTINE le lundi 23 juin 2008, 12:07 - Technique - Lien permanent
Il existe de nombreuses règles de "bonnes pratiques" en programmation objet, dont certaines sont spécifiques au langage java. Il existe des formations et des ouvrages entiers consacrés à ce sujet: je n'ai donc absolument pas la prétention d'en faire la liste ici. En revanche, j'aimerais attirer l'attention sur le fait qu'il existe maintenant des outils faciles à mettre en oeuvre, et permettant de vérifier automatiquement un certain nombre de ces règles de "bonnes pratiques". Ils permettent d'améliorer significativement la qualité du code, pour un faible coup (à condition qu'ils soient déployés le plus tôt possible dans le processus de développement).
Les trois outils les plus aboutis dans ce domaine, sont CheckStyle, PMD, et FindBugs.
CheckStyle et fait principalement des vérifications formelles sur le code source
- présence de javadoc
- présence de blocs vide (catch dans lesquels on ne fait rien, etc.)
- variables, imports ou méthodes inutilisées
- méthodes trop complexes (imbrication de blocs) ou trop longues
- indentation, aération du code, lignes de code trop longues
- etc.
FindBugs, quant à lui, se concentre plus sur la sémantique du code, en détectant des "patterns de mauvaise programmation":
- flux ouverts qui ne sont pas fermés dans tous les cas (lorsqu'une exception survient, par exemple)
- risques de NullPointerException
- tests redondants
- failles de sécurité
- etc.
PMD enfin, se situe à la limite entre les deux outils précédents: il effectue à la fois des vérifications formelles et fonctionnelles. Par rapport à CheckStyle, PMD est capable de faire des vérifications globales sur le code (là où CheckStyle fait de la vérification fichier par fichier). Il dispose ainsi par exemple d'un module très appréciable permettant de détecter globalement les codes copiés-collés.
Ces outils ont maintenant atteint un stade de maturité avancé, et ils s'intègrent très bien dans les environnements de développement professionnels:
- ils sont entièrement paramétrables: on peut choisir les règles applicables au projet, paramétrer celles qui existent (taille limite des méthodes), voire développer des règles personnalisées si celles fournies par défaut ne suffisent pas. Cela permet au chef de projet de fixer le niveau de qualité qu'il souhaite pour son application.
- il existe des plugins permettant d'intégrer directement ces outils dans les IDE du marché. Le code est ainsi vérifié "en temps réel", au moment où il est écrit: il peut donc être corrigé au plus tôt dans le processus de développement (donc pour le coût le plus faible).
- ils s'intègrent automatiquement dans les processus de déploiement (avec les outils Ant ou Maven), afin de générer automatiquement des rapports sur le code remonté sur le gestionnaire de configuration.
Je noterai également JDepend, qui permet de détecter les dépendances cycliques entre classes.
J'ai présenté ici les outils qui me paraissent les plus importants. Mais on peut aller plus loin, et il existe de nombreux autres outils qu'on peut mettre en place sur un projet. Une liste plus complète des outils qui peuvent être intégrés automatiquement sur un projet géré par Maven est disponible sur Agile Swiss.