JDepend - Analyse de la qualité du code Java - Guillon Denis - IR3 Groupe 2 - Exposé Système
Déroulement de l’exposé Programmation et qualité Présentation de JDepend Critères de qualité Installation et mise en œuvre Intégrations diverses Améliorations de la qualité du code Intérêts et limitations 14/01/2019
Programmation et qualité Pourquoi écrire du code de qualité ? La réussite du projet en dépend Le respect de normes de développement permet : d’assurer la pérennité et de la diffusion du projet une maintenance et documentation aisée Mesure de la qualité Lisibilité du code Uniformité des conventions Couplage minimum (modules indépendants) 14/01/2019
Présentation de JDepend Outil développé en Java par Mark Clark Parcourt les répertoires contenant les classes d’un projet Java Calcule des métriques de qualité pour chaque package Sensible à l’extensibilité, la réutilisabilité et la maintenabilité des sources Soumis à la licence « BSD License » 14/01/2019
Critères de qualité - Métriques 1/2 - Nombre de classes et d’interfaces (CC et AC) Critère d’extensibilité des packages Couplage par dépendance ascendante (Ca) Indicateur de mauvaise gestion des dépendances Indicateur d’un package au centre de l’application Couplage par dépendance descendante (Ce) Indicateur d’indépendance du code 14/01/2019
Critères de qualité - Métriques 2/2 - Degré d’abstraction (A) (0<A<1) % de classes concrètes Degré de stabilité (I) ( I = Ce / (Ce + Ca) ) Propriété de stabilité par rapport à la mise à jour d’autres packages Distance normale (D) à la droite A + I = 1 Indicateur de l’équilibre d’un package Volatilité (V) Propension d’un package à évoluer dans le temps Dépendance cyclique 14/01/2019
Distance normale 14/01/2019
Dépendances - Exemples - A = 0, I =1, D = 0 Package dont les autres packages ne doivent pas dépendre A = 0,85, I = 0, D = 0,15 A l’inverse, package réutilisable car très stable 14/01/2019
Installation et mise en œuvre - Installation sous Unix - Téléchargement des sources http://www.clarkware.com/software/JDepend.html jdepend-2.9.zip Décompression de l’archive dans un répertoire Ajout en variable d’environnement : du répertoire : JDEPEND_HOME=~/chemin/jdepend-2.9 chmod -R a+x $JDEPEND_HOME de l’archive jar contenant les classes : export CLASSPATH=$CLASSPATH:$JDEPEND_HOME/lib/jdepend.jar Recompilation cd $JDEPEND_HOME ant jar 14/01/2019
Installation et mise en œuvre - Mise en oeuvre - Interfaces de visualisation des métriques : 1 interface graphique Affichage d’un arbre hiérarchique de chaque package par les dépendances ascendantes et descendantes 2 interfaces en ligne de commande (texte et xml) Affichage dans un fichier des métriques détaillées et des cycles pour chaque package Calculs de métriques pour des packages spécifiques ligne de commande : option -components Configuration du fichier jdepends.properties 14/01/2019
Intégrations diverses Utilisation avec Ant ajout d’une tâche dans le build.xml pour la génération automatique de l’analyse de la qualité du code Utilisation avec JUnit vérification l’existence de dépendances vérification de l’existence de cycles de dépendances vérification de valeurs « acceptables » de métriques 14/01/2019
Amélioration de la qualité du code Objectif : Suppression de dépendances entre classes applicatives et implémentation Méthode : Injection de code pour manipuler des objets indépendamment de leur stockage Les différents types d’injection de code Injection par constructeur Passage d’un objet au constructeur d’une classe Injection par mutateur Passage d’un objet par setter Injection par interface Passage d’un objet suivant une méthode déclarée dans une interface 14/01/2019
Conclusion Un package faiblement couplé, abstrait et stable est de qualité Intérêts Mesure automatique de la qualité du code en terme d’extensibilité, de réutilisabilité et de maintenabilité. Révèle des problèmes d’organisation des classes Outil Open source Limitations Ne fournit pas d’interprétation des métriques Ne collecte pas de métriques sur le code source 14/01/2019
Ressources http://www.clarkware.com/software/JDepend.html http://cyberzoide.developpez.com/java/jdepend/ http://zer0.free.fr/blog/index.php/2005/01/13/21-analyse-de-la-qualite-du-code-source-java 14/01/2019