• Checkstyle

CheckStyle est le champion de la (mise en) forme. Il va porter principalement ses tests sur la présence de javadoc, la bonne indentation, le respect de la casse, les règles de nommage, etc. Ces aspects peuvent paraître secondaires mais nous sommes tous bien content de mettre le nez dans un code commenté et on peut admettre que l'effort (le mot est fort ici : écrire un commentaire ne représente pas un défi en soi :) ) pour atteindre cet objectif, s'il n'est pas fait au fil de l'eau, sera rarement fait ensuite !

  • PMD

PDM pousse un peu plus loin les tests que CheckStyle et va aussi tenter de débusquer des patterns de bug ou des constructions hasardeuses. L'analyse de la forme est ici épaulée par une analyse du fond plus aboutie.

  • FindBugs

Le nom parle de lui même! Il va traquer le bug potentiel ou l'usage de mauvaises pratiques. Son analyse (statique) va permettre de débusquer pas mal de fautes parmi lesquelles de potentielles NullPointerException, des problèmes de cohérence (une méthode equals() surchargée sans méthode hashcode()), des risques de failles de sécurité (exposition d'attributs mutables pouvant être manipulés par un code malicieux et modifier l'état de l'objet), quelques bugs peu connus (le Math.abs() négatif)... et la liste est longue ! Le principe là aussi repose sur la reconnaissance de patterns répertoriés définissant des risques potentiels, dont la liste est fournie sur le site de FindBugs.

  • Cobertura / Clover

Là, la qualité du code est indirectement estimée puisqu'il s'agit de s'assurer que le code est bien couvert par les tests unitaires. Le principe est simple : instrumenter les classes pour vérifier où sont passés les tests unitaires et identifier les zones d'ombre non couvertes par les tests. Ces deux outils, assez proches, permettent de facilement déceler les parties de code non couvertes par les tests et éviter quelques mauvaises surprises une fois en production par exemple...

Ces outils sont complémentaires et peuvent très bien être utilisés ensemble (c'est même conseillé). CheckStyle et PMD peuvent être configurés pour traquer en "live" tout écart. FindBugs et Cobertura (ou Clover) seront lancés à intervalle régulier, par exemple juste avant une phase de refactoring (vous savez, le concept "Red, Green, Refactor"). Tous ces outils s'inscrivent parfaitement dans la chaîne de build de Maven via des plugins adaptés. Ils peuvent aussi s'inscrire dans l'IDE (Eclipse assurément, pour les autres, je ne saurais trop dire) et permettre une meilleure réactivité du développeur puisqu'il est averti très rapidement de problèmes potentiels. Bien sûr le partage des configurations entre Maven et l'IDE est conseillé pour éviter que l'un voit des erreurs que l'autre n'annonce pas...

Voici les pointeurs vers les plugins pour Eclipse :