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 http://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 :

 
Sélectionnez
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 :

 
Sélectionnez
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 :

 
Sélectionnez
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.
Image non disponible
Image non disponible
Image non disponible

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 :

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

Les variables suivantes sont nécessaires :

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

VII-A. Format texte

Définition de la tâche :

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

Description de la tâche :

 
Sélectionnez
<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 :

 
Sélectionnez
<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 :

 
Sélectionnez
<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.

Image non disponible

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.