Analyse de la qualité du code Java avec JDepend

Implémentation

JDepend 2.9 est à ce jour la derniè version de JDepend.

Cette distribution contient un fichier jar, le code source de l'outil, son API et un exemple d'application.

Télécharger JDepend

La dernière version de JDepend est téléchargeable ici

Installer JDepend

Windows

Pour installer JDepend sous Windows, il suffit de suivre les étapes suivantes :

Unix

Pour installer JDepend sous Unix, il suffit de suivre les étapes suivantes :

Lancer JDepend

JDepend fournit des interfaces utilisateur graphique, textuelle et XML

Interface graphique

L'interface graphique affiche un arbre hiérachique des dépendances ascendantes et descendantes de chacun des packages java analysés.

Pour lancer JDepend avec la présentation des métriques sous forme d'interface graphique, il faut utiliser la syntaxe suivante :

Par exemple, pour analyser tous les fichiers .class du répertoire $JDEPEND_HOME/build, on lancera la commande:

Interface textuelle

L'interface textuelle affiche les métriques, les dépendances et les cycles pour chaque package java analysé. Pour faciliter l'import de ces métriques dans d'autres applications par CSV, l'interface propose une zone de résumé regroupant ces informations séparées par des points-virgules.

Pour lancer JDepend avec la présentation des métriques sous forme textuelle, il faut utiliser la syntaxe suivante :

Par exemple, pour analyser tous les fichiers .class du répertoire $JDEPEND_HOME/build, on lancera la commande:

Interface xml

Cette interface contient les mêmes informations que l'interface textuelle, mais permettra une meilleure intégration avec d'autres outils.

Pour lancer JDepend avec la présentation des métriques sous forme XML, il faut utiliser la syntaxe suivante :

Par exemple, pour analyser tous les fichiers .class du répertoire $JDEPEND_HOME/build, on lancera la commande:

Configuration de JDepend

JDepend peut être configuré en utilisants des options en ligne de commande et/ou par la création d'un fichier jdepend.properties dans le répertoire racine de l'utilisateur ou dans n'importe quel répertoire contenu dans le classpath.

Composants

JDepend peut calculer des métriques et des dépendances pour les composants d'une arborescence de packages, un package pouvant contenir un ou plusieurs sous-packages.

Par exemple si on consid&eagrave;re la hierarchie de packages suivante :

On imagine vouloir uniquement collecter les métriques et dépendances pour les packages com.xyz.package_a et com.xyz.package_b, sans calculer celles de leurs sous-packages. Par exemple, si il y a une dépendance entre les packages com.xyz.package_a.subpackage_a et com.xyz.package_b.subpackage_b, et qu'on veut la faire figurer en tant qu'une dépendance entre le packages com.xyz.package_a et com.xyz.package_b.subpackage_b, on utilisera l'option -components en ligne de commande suivante:

Filtrages des packages

JDepend ignorera tous les noms de packages spécifiés en tant que valeur "ignore" dans le fichier jdepend.properties. Par défaut, aucun package n'est filtré.

L'exemple suivant montre comment configurer le fichier jdepend.properties pour ignorer les noms de packages préfixés par java,javax,sun,com.sun ainsi que le package com.xyz.tests :

Les packages peuvent aussi être ignorés par la création d'une instance de la classe PackageFilter définissant les filtres puis en la passant au constructeur de JDepend :

On peut aussi créer une ArryList de filtres :

Volatilité

Les packages qui ne sont pas susceptibles d'être modifiés peuvent être spécifiquement configurés avec une valeur de volatilité (métrique V) imposée dans le fichier jdepend.properties. Si V=0, cela signifiera que le package n'est sujet ˆ aucun changement. Dans ce cas la métrique prendra la valeur 0. Si V=1, cela signifiera que le package va encore évolué. Dans ce cas la métrique D ne sera pas affectée. (configuration par défaut).

Exemple : Positionnement de la volatilité du package java.lang ˆ 0

ou

Inner classes

Par défaut les inner classes sont analysées. Pour ne pas les analyser, il suffit d'ajouter la ligne suivante dans le fichier jdepend.properties :


analyzeInnerClasses=false