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.