- PMD : c’est un outil qui parcours le code source Java et recherche des problèmes potentiels.

PMD possède une liste de règles à vérifier, ces règles sont regroupées comme suit :

- Règles dédiées au Finalizers : Ce groupe contient les règles en rapport avec le codage des « Finalizers ».

- Règles dédiées au code non utilisé : Ce groupe contient une collection de règles qui ont pour but de trouver le code non utilisé.

- Règles controversées : Contient les règles qui ne jouissent pas d’une unanimité sur l’intérêt de leur application, elles sont séparées des autres règles pour pouvoir donner à l’utilisateurs de PMD la possibilité des les appliquer ou pas.

Parmi les règles contenus dans ce groupe :

- AtLeastOneConstructor : cette règle vérifie si la classe possède un constructeur au minimum.

- SingularField : un champs de classe utilisé uniquement par une seule méthode peut être remplacé par une variable locale à la méthode.

- Règles d’optimisation : Ce groupe de règles à pour but d’imposer les bonnes pratiques de codage qui ont pour but d’optimiser les performances du code, par exemple :

- AvoidInstantiatingObjectsInLoops : Détecte les endroits où il existe des instanciation d’objets dans une boucle.

- UseStringBufferForStringAppends : Détecte les endroit du code où il y a une concaténation de chaînes de caractère et conseille d’utiliser des StringBuffers pour faire cette opération car c’est plus rapide à l’exécution.

- Règles basiques : Ce groupe contient un ensemble de bonnes pratiques que chaque un se doit de respecter.

- Règles de conception : Ce groupe contient un certain nombre de règles qui détectent les zones floues de la conception du code audité.

- Règles relatives aux exceptions : Ce groupe contient les règles relatives à la capture et au renvoi d’exceptions.

- Règles relatives aux JavaBeans : Ce groupe contient les règles qui détectent les JavaBeans qui ne respectent pas les règles de codage de ce type de classes.

- Règles relatives aux java.lang.String : Ce groupe contient les règles qui démontrent les différents problèmes qui peuvent apparaître lors de la manipulation des objets de type java.lang.String.

- Règles relatives à la taille du code : Ce groupe contient les règles qui contrôlent la taille des différentes composantes du code.

- Règles relatives au imports : Ce groupe contient les règles relatives à l’optimisation des imports.

- Règles relative à l’utilisation de la méthode Clone() : Ce groupe contient les règles qui détectent les éventuels problèmes qui peuvent être rencontrés lors d’une mauvaise utilisation de la méthode Clone().

- Règles de nommage : Ce groupe contient les règles qui s’occupent de vérifier les différentes règles de nommage des composantes du code.

- Règles relatives aux logs : Ce groupe contient les règles qui régissent les logs de l’application.

- Règles relatives aux accolades : Contient un groupe de règles relatives à la disposition des accolades.