Générer des rapports sur la qualité d'un projet

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 19 mai 2022 à 13:45

En programmation, faire une application qui fonctionne n'est pas suffisant.
Améliorer la qualité du code est très important pour faciliter le développement des corrections et évolutions.


Sites des projets Maven

Parmi les fonctionnalités de Maven, il est possible de générer un site descriptif des projets.
Cela se fait grâce à la commande
mvn site
(si besoin, voir l'article Débuter avec Maven).

On peut afficher le site généré en ouvrant le fichier
target/site/index.html


Par défaut le site contient principalement des informations techniques sur l'architecture Maven du projet (dépendances, plugins, etc.) nous allons l'enrichir avec des rapports d'analyse du code générés par des plugins Maven.

Rapports d'analyses

Ci-dessous un extrait de pom.xml à intégrer au votre. Chaque plugin étant indépendant vous pouvez supprimer ceux dont les rapports ne vous intéressent pas (ou en ajouter d'autres).

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-site-plugin</artifactId>
            <version>4.0.0-M1</version>
        </plugin>
        <plugin>
            <!-- The Failsafe Plugin is designed to run integration tests while the Surefire Plugin is designed to run unit tests. -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>3.0.0-M6</version>
            <executions>
                <execution>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
<reporting>
    <plugins>
        <plugin>
            <!-- The JXR Plugin generates a cross-reference of the project's sources. -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jxr-plugin</artifactId>
            <version>3.2.0</version>
        </plugin>
        <plugin>
            <!-- The Javadoc Plugin generates javadocs using the Javadoc tool. -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>3.4.0</version>
            <configuration>
                <additionalparam>-Xdoclint:none</additionalparam>
            </configuration>
        </plugin>
        <plugin>
            <!-- The Surefire Report Plugin generates reports for unit and integration tests. -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-report-plugin</artifactId>
            <version>3.0.0-M6</version>
        </plugin>
        <plugin>
            <!-- The Checkstyle Plugin generates a report regarding the code style used by the developers. -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-checkstyle-plugin</artifactId>
            <version>3.1.2</version>
        </plugin>
        <plugin>
            <!-- The PMD plugin generates PMD and CPD reports using the PMD code analysis tool. -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-pmd-plugin</artifactId>
            <version>3.16.0</version>
            <configuration>
                <skipEmptyReport>false</skipEmptyReport>
                <linkXref>true</linkXref>
                <minimumTokens>50</minimumTokens>
            </configuration>
        </plugin>
    </plugins>
</reporting>

Remarque : Les plugins utilisés ici sont donnés à titre d'exemples, il en existe de nombreux autres et il est également possible de créer ses propres rapports.

Pour générer la totalité des rapports ainsi configurés vous devez exécuter les tests unitaires et tests d'intégrations avant de générer le site. Par exemple avec
mvn verify site


Remarque : certains rapports peuvent ne pas apparaître sur le site en fonction de votre projet. Par exemple les résultats des tests unitaires ne sont pas générés si vous n'en avez pas...

Lecture des rapports

Dans le site généré, aller dans la catégorie Project Reports.

Source XRef

Ce rapport permet de visualiser dans le site le code source du projet.
Cette fonctionnalité sera particulièrement intéressante dans les rapports suivants où la détection d'anomalie pour une ligne de code pourra être visualisée dans son contexte.


Test Source Xref

Ce rapport est identique au précédent mais pour les classes de tests.

Rappel : dans un projet Maven par défaut les classes applicatives sont dans "src/main/java" et les classes de tests dans "src/test/java".

JavaDocs

Ce rapport affiche le site de documentation de la même manière que l'outil JavaDoc standard de Java.

Test JavaDocs

Ce rapport est identique au précédent mais pour les classes de tests.

Surefire Report

Ce rapport affiche le résultat des tests unitaires : succès ou échec avec leur temps d'exécution.

Failsafe Report

Ce rapport est identique au précédent mais pour les tests d'intégration.

Rappel : dans un projet Maven par défaut les noms des classes de tests unitaires terminent par "Test" et ceux des tests d'intégrations par "IT" (pour "Integration Test").

Checkstyle

Ce rapport affiche les violations aux règles de syntaxe standards en Java.

Remarque : les règles utilisées pour remonter ces erreurs peuvent être personnalisées :
Using a Custom Checkstyle Checker Configuration

CPD

Ce rapport affiche les morceaux de codes dupliqués dans le projet.

Remarque : dans le pom.xml fourni plus haut c'est le paramètre
<minimumTokens>50</minimumTokens>
qui permet de déterminer à partir de quelle taille de code identique il faut remonter une alerte dans ce rapport.

PMD

Ce rapport affiche des alertes sur une mauvaise construction du code qui peut potentiellement entraîner des erreurs.


Remarque : les règles utilisées pour remonter ces erreurs peuvent être personnalisées. Le fonctionnement détaillé de chaque règle peut se trouver dans la documentation de PMD : https://pmd.github.io/latest/pmd_rules_java.html

Pour aller plus loin

Des outils plus avancés permettent d'agréger ces rapports, les afficher de manière plus synthétique, comparer des projets entre eux et suivre l'historique de ces erreurs.

Exemple : https://www.sonarqube.org/