Analyse de la qualité du code source Java avec JavaNCSS 21.41

Hugo ETIEVANT

Analyse de la qualité du code source Java avec JavaNCSS 21.41

- Titre : Analyse de la qualité du code source Java avec JavaNCSS 21.41

- Auteur : Hugo ETIEVANT

- Parution : 20 juin 2004

- Licence : Copyright ® 2004 Hugo ETIEVANT. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Qu'est-ce que la qualité ?

- II. Comment se mesure la qualité ?

- III. Présentation de JavaNCSS

- IV. Installation sous Windows

- V. Mise en œuvre

- VI. Métriques

- VII. Exécution avec Ant

- VII-A. Format texte

- VII-B. Format XML

- VII-C. Format HTML

- VIII. Sortie HTML

- IX. Détails sur les métriques

- X. Conclusion

- XI. Historique

- XII. Note et remerciement du gabarisateur

I - Qu'est-ce que la qualité ?

La réussite d'un projet de développement nécessite une organisation rigoureuse tant dans la gestion des ressources et des tâches que dans l'organisation technique. Cette dernière implique la définition et le respect de normes de développement qui assurent une uniformité du code source en vue d'une maintenance et d'une documentation aisée.

Un code de qualité assure la pérennité, la diffusion et la maintenabilité du projet.

La réussite d'un projet dépend de la qualité du code.

II - Comment se mesure la qualité ?

Sur quels critères peut-on se baser pour analyser la qualité du code :

- lisibilité du code ;

- uniformité des conventions :

- de nommage (variables, méthodes, classes, packages),

- d'indentation,

- d'organisation (répertoires du projet),

- de documentation (commentaires, JavaDoc) ;

- couplage minimum (modules indépendants) ;

- complexité cyclomatique miminum ;

- taux de commentaires JavaDoc.

III - Présentation de JavaNCSS

JavaNCSS est un outil développé en Java qui analyse le code source d'un projet Java et calcule des métriques de qualité.

Il est développé par Chr. Clemens Lee

Il est sous licence « GNU General Public License ».

IV - Installation sous Windows

Téléchargement à l'adresse suivante : http://www.kclee.de/clemens/java/javancss/ ou https://cyberzoide.developpez.com/java/javancss/javancss21.41.zip

Décompression dans un répertoire : javancss21.41/

Rajout en variable d'environnement de ce répertoire et des archives JAR contenant les classes :

set JAVANCSS_HOME=D:\javancss21.41
set CLASSPATH=%CLASSPATH%;
%JAVANCSS_HOME%\lib\javancss.jar;
%JAVANCSS_HOME%\lib\ccl.jar;
%JAVANCSS_HOME%\lib\jhbasic.jar

V - Mise en œuvre

Une interface graphique permet de visualiser les métriques calculées sur les sources d'un projet.

Syntaxe :

javancss [–<option>] <sources>

Le chemin des sources à analyser est défini par <sources>. Les options peuvent être les suivantes : gui pour lancer l'interface graphique, xml pour une sortie XML (texte par défaut), out <fichier> spécifie le chemin du fichier de sortie, recursive pour un parcours récursif des sous-répertoires, package pour une analyse agrégée sur les packages, object pour une analyse des classes, function pour une analyse des méthodes.

Exemple :

javancss-gui -recursive D:\projet\src

VI - Métriques

Métriques sur les packages :

- nombre de classes ;

- nombre de méthodes ;

- nombre d'instructions sans commentaire (NonCommentingSource Statements : NCSS) ;

- nombre de commentaires JavaDoc.

Métriques générales :

- nombre de packages ;

- nombre de classes ;

- nombre de méthodes ;

- nombre d'instructions sans commentaire ;

- nombre de commentaires JavaDoc par projet, package, classe et méthode.

VII - Exécution avec Ant

Le fichier de déploiement build.xml peut être modifié afin de produire automatiquement une analyse de la qualité du code source.

Extraction de la variable d'environnement JAVANCSS_HOME :

<property name="javancss.home"
value="${myenv.JAVANCSS_HOME}"/>

Les variables suivantes sont nécessaires :

<property name="docs.dir" value="docs" />
<property name="src.dir" value="src" />

VII-A - Format texte

Définition de la tâche :

<taskdef name="javancss"
classname="javancss.JavancssAntTask"
classpath="${javancss.home}"/>

Description de la tâche :

<target name="javancss" depends="init">
<javancss srcdir="${src.dir}"
abortOnFail="false" includes="**/*.java" generateReport="true"
outputfile="${docs.dir}/javancss_metrics.txt" format="plain"/>
</target>

Cette tâche génère un fichier texte contenant les métriques résultant de l'analyse récursive des fichiers sources « **/*.java » contenus dans le répertoire « srcdir ». La génération n'est pas stoppée en cas d'erreur (« abortOnFail »). Le fichier destination est défini par « outputfile » et le format par « outputfile ». Elle dépend de la tâche « init » qui crée les répertoires de destination, dont celui défini par « ${docs.dir} ».

VII-B - Format XML

Pour générer le rapport au format XML, il suffit de modifier le format de sortie pour « xml ».

Description de la tâche :

<target name="javancss" depends="init">
<javancss
srcdir="${src.dir}"
abortOnFail="false"
includes="**/*.java"
generateReport="true"
outputfile="${docs.dir}/javancss_metrics.xml"
format="xml"/>
</target>

VII-C - Format HTML

Pour générer le rapport au format HTML, il faut d'abord le généré au format XML puis rajouter une sous-tâche de traduction en HTML via une feuille de style XSLT fournie dans le répertoire xslt/ de JavaNCSS.

Description de la tâche :

<target name="javancss"depends="init">
<javancsssrcdir="${src.dir}" abortOnFail="false"
includes="**/*.java" generateReport="true"
outputfile="${docs.dir}/javancss_metrics.xml" format="xml"/>
<stylebasedir="${docs.dir}"destdir="${docs.dir}"
includes="javancss_metrics.xml"
style="${javancss.home}/xslt/javancss2html.xsl" />
</target>

VIII - Sortie HTML

Les trois volets de l'interface graphiques sont reproduits en HTML. La première partie montre les statistiques par packages et celles générales du projet. Les deux autres sont consacrées aux métriques par classes et par méthodes.

IX - Détails sur les métriques

Le nombre d'instructions sans commentaire (Non CommentingSourceStatements : NCSS) correspond aux commentaires qui auraient dû logiquement se trouver dans le code source, mais qui font défaut. Il doit être réduit au maximum.

Le nombre de commentaires JavaDoc (JVDC) est le nombre de tag JavaDoc trouvés dans le source. Il doit être maximisé.

La complexité cyclomatique (Cyclomatic Complexity Numbers : CCN) correspond au degré d'imbrication des structures de contrôle. Il doit être raisonnable (<3), car il n'est jamais bon d'avoir trop de if imbriqués, par exemple (valable aussi pour les while, etc.).

X - Conclusion

Cet outil permet d'obtenir des statistiques détaillées sur le nombre de packages, classes, méthodes par projet. Il met également l'accent sur le taux de commentaires. Il est un bon indicateur des classes non maintenables : celles possédant les plus grands NCSS et CCN.

XI - Historique

20 juin 2004 : corrections mineures.

18 avril 2004 : création du document (18 diapos).

Agissez sur la qualité de ce document en envoyant vos critiques et suggestions à l'auteur.

Remerciements à Vincent Brabant pour ses remarques.

Pour toute question technique, se reporter au forum Java de Developpez.com.

Reproduction autorisée uniquement pour un usage non commercial.

XII - Note et remerciement du gabarisateur

Cet article a été mis au gabarit de developpez.com. Voici le lien vers le PDF d'origine : javancss.pdf.

Le gabarisateur remercie Claude Leloup pour sa correction orthographique.