9.4. Rapports de problèmes de qualité de code avec le plugin Violations

Un des plugins de qualité de code les plus utiles est le plugin Violations. Ce plugin n’analysera pas le code source de votre projet (vous devez configurer le build pour faire cela), mais il fait un excellent travail en élaborant des rapports sur les mesures de la qualité du code pour les builds individuels et les tendances au fil du temps. Le plugin s’adresse aux rapports sur les mesures de qualité de code venant d’une large gamme d’outils d’analyse statique, comprenant :

Pour Java

Checkstyle, CPD, PMD, FindBugs, and jcreport

Pour Groovy

codenarc

Pour JavaScript

jslint

Pour .Net

gendarme and stylecop

Installer ce plugin est d'une simplicité. Il suffit d’aller sur l’écran du Plugin Manager et de sélectionner le plugin Violations de Jenkins. Une fois que vous installé le plugin et redémarré Jenkins, vous serez capable de l’utiliser pour vos projets.

Le plugin Violations ne génère pas de mesures de qualité de code lui-même — vous devez configurer votre build pour faire cela, comme il est montré dans la section précédente. Un exemple pour faire cela pour une tâche de build Maven est illustré dans la Figure 9.3, “Générer les rapports de qualité de code dans un build Maven”. Notez que nous invoquons ici les goals du plugin Maven directement. Nous aurions pu aussi simplement exécuter mvn site, mais si nous sommes uniquement intéressés par les mesures de qualité de code, et pas par les autres éléments du site généré par Maven, appeler le plugin directement se traduira par des builds plus rapides.

Générer les rapports de qualité de code dans un build Maven

Figure 9.3. Générer les rapports de qualité de code dans un build Maven


Une fois que vous l’avez paramétré, vous pouvez configurer le plugin de violations pour générer des rapports, et si besoin est, des notifications de déclenchement, basés sur les résultats de rapport. Il suffit d’aller dans ‘Actions à la suite du build’ et de cocher la case Report Violations. Les détails de la configuration varient en fonction du type de projet. Penchons-nous sur les tâches de build Freestyle dans un premier temps.

9.4.1. Travailler avec des tâches de build free-style

Les tâches de build free-style vous permettent la configuration la plus flexible, et sont votre unique option pour des projets non Java.

Lorsque vous utilisez le plugin Violations avec une tâche de build free-style, vous devez spécifier les chemins de chaque rapport XML généré par les outils d’analyse de code statiques que vous avez utilisé (voir Figure 9.4, “Configurer le plugin violation pour un projet free-style”). Le plugin peut répondre à plusieurs rapports depuis le même outil, ce qui est utile pour des projets Maven multi-module — il suffit alors d’utiliser une expression générique pour identifier les rapports que vous voulez (par exemple, **/target/checkstyle.xml).

Configurer le plugin violation pour un projet free-style

Figure 9.4. Configurer le plugin violation pour un projet free-style


Le plugin Violations génèrera un graphique de suivi pour chaque type de problème au cours du temps (voir Figure 9.5, “Les violations au cours du temps”). Le graphique affiche une ligne de différente couleur pour chaque type de violations que vous suivez, ainsi qu’un résumé des derniers résultats.

Les violations au cours du temps

Figure 9.5. Les violations au cours du temps


Vous pouvez aussi cliquer sur le graphique pour vous rendre à un build particulier. Ici, vous pouvez voir le nombre de problèmes soulevés pour un build particulier (voir Figure 9.6, “Les violations pour un build particulier”), avec diverses ventilations par type de violation, sévérité et fichier.

Les violations pour un build particulier

Figure 9.6. Les violations pour un build particulier


Enfin, vous pouvez descendre vers une classe particulière, pour afficher la liste détaillée des problèmes avec leurs emplacements dans le code source.

Mais le plugin Violations permet aussi une gestion plus proactive de la qualité du code. Vous pouvez utiliser les résultats des rapports d’analyse de la qualité du code pour influencer l’icône météorologique du tableau de bord de Jenkins. Cette icône météorologique est normalement liée au nombre de builds défaillants parmi les cinq derniers, mais Jenkins peut aussi prendre en compte d’autres facteurs, comme les résultats de la qualité du code. Afficher une icône pluvieuse ou orageuse pour un projet sur le tableau de bord est une meilleure façon de sensibiliser sur les problèmes de qualité du code que de simplement s’appuyer sur des graphiques et des rapports sur la page de la tâche de build.

Pour le configurer, vous devez revenir dans la section Report Violations dans Actions à la suite du build. Les trois premières colonnes dans Figure 9.4, “Configurer le plugin violation pour un projet free-style” montre une icône ensoleillée, une icône orageuse et une balle jaune. Celle avec l’icône de temps ensoleillé est le nombre maximum de violations tolérées pour garder l’icône ensoleillée sur la page du tableau de bord. La deuxième colonne, avec l’icône de temps orageux, est le nombre de violations qui causera l’affichage de l’icône orageuse sur le tableau de bord. Si vous avez un nombre de violations entre ces deux extrêmes, vous aurez l’une des icônes nuageuses.

Vous pouvez spécifier différentes valeurs pour différents outils. Les seuils exacts varieront entre les équipes et entre les projets, et aussi entre les outils. Par exemple, Checkstyle soulèvera généralement beaucoup plus de problèmes que FindBugs ou CPD, avec PMD quelque part entre. Vous devez ajuster les valeurs utilisées pour refléter comment ces outils travaillent avec votre code de base, et vos attentes.

Vous pouvez aller encore plus loin avec la troisième colonne (celle avec la balle jaune). Cette colonne vous permet de spécifier le nombre de violations qui déclarera le build comme instable. Souvenez-vous, lorsqu’un build devient instable, Jenkins enverra des messages de notifications, donc c’est une stratégie encore plus proactive.

Par exemple, dans Figure 9.4, “Configurer le plugin violation pour un projet free-style”, nous avons configuré le nombre minimum des violations Checkstyle à 10, ce qui signifie que l’icône du temps ensoleillé apparaîtra uniquement s’il y a au maximum 10 violations Checkstyle. S’il y en a plus de 10, le temps se dégradera progressivement, jusqu’à 200 violations marquées, où il deviendra orageux. Et s’il y a 500 violations Checkstyle ou plus, le projet sera signalé instable.

Maintenant regardez la configuration de CPD, le détecteur de code dupliqué qui vient avec PMD. Dans ce projet, nous avons adopté une politique zéro tolérance pour le code dupliqué, donc l’icône ensoleillée est spécifiée à zéro. L’icône orageuse est spécifiée à 10, donc s’il y a 10 violations de copié/collé ou plus, il sera déclaré instable.

Maintenant, sur la page du tableau de bord, le projet apparaîtra avec à la fois un une icône de temps orageux et comme instable, même s’il n’y pas d’échecs de tests (voir Figure 9.7, “Configurer le plugin de violations pour un projet free-style”). Ce build particulier est instable parce qu’il y a 16 violations CPD. En complément, si vous placez votre souris sur l’icône du temps, Jenkins affichera quelques détails supplémentaires sur comment il a calculé ce statut particulier.

Configurer le plugin de violations pour un projet free-style

Figure 9.7. Configurer le plugin de violations pour un projet free-style


9.4.2. Travailler avec des tâches de build Maven

Les tâches de build Maven dans Jenkins utilisent les conventions de Maven et les informations du fichier pom.xml du projet pour rendre la configuration plus facile et plus légère. Lorsque vous utilisez le plugin Violations avec une tâche de build Maven, Jenkins utilise ces conventions pour réduire la quantité de travail nécessaire pour configurer le plugin. Vous n’avez pas besoin de dire à Jenkins où trouver les rapports XML pour la plupart des outils d’analyse de code statique (par exemple, Checkstyle, PMD, FindBugs, et CPD), puisque Jenkins peut l'interpréter depuis les conventions de Maven et les configurations du plugin (voir Figure 9.8, “Configurer le plugin Violations pour un projet Maven.”). Si vous devez redéfinir ces conventions, vous pouvez choisir l’option Pattern dans la liste déroulante « XML filename pattern », et entrer le chemin comme vous pouvez le faire pour les tâches de build free-style.

Configurer le plugin Violations pour un projet Maven.

Figure 9.8. Configurer le plugin Violations pour un projet Maven.


Le plugin Violations fonctionne bien avec des projets multi-module Maven, mais au moment de la rédaction (de ce livre), il a besoin d’un peu de peaufinage pour obtenir de meilleurs résultats. Les tâches de build Maven comprennent la structure des projets multi-module (voir Figure 9.9, “Les tâches de build Maven de Jenkins comprennent les structures multi-modules de Maven”) ; de plus, vous pouvez descendre dans n’importe quel module et obtenir une vue détaillée des résultats de construction pour cette tâche de build.

Les tâches de build Maven de Jenkins comprennent les structures multi-modules de Maven

Figure 9.9. Les tâches de build Maven de Jenkins comprennent les structures multi-modules de Maven


C’est une fonctionnalité très utile, mais cela signifie que vous devez faire un peu de travail supplémentaire pour obtenir tous les avantages des plugins de violations des modules individuels. Par défaut, le plugin Violations affichera une vue agrégée des mesures de qualité de code comme celle dans Figure 9.5, “Les violations au cours du temps”. Vous pouvez aussi cliquer sur le graphique des violations, et voir les rapports détaillés de chaque module.

Cependant, pour que ceci puisse fonctionner correctement, vous devez activer le plugin Violations individuellement pour chaque module en complément du projet principal. Pour ce faire, cliquez sur le module que vous voulez configurer dans l’écran Modules, et ensuite cliquez sur le menu ‘Configurer’. Ici, vous verrez un petit groupe des options de configuration habituelles (voir Figure 9.10, “Activer le plugin Violations pour un module individuel”). Ici, il vous suffit d’activer l’option Violations, et de configurer les seuils si besoin est. Le côté positif de cela est que vous pouvez définir différentes valeurs de seuils pour des modules différents.

Activer le plugin Violations pour un module individuel

Figure 9.10. Activer le plugin Violations pour un module individuel


Une fois que cela est fait, lorsque vous cliquerez sur le graphique de violations agrégées sur la page d’accueil de la tâche de build du projet, Jenkins listera les graphiques individuels de violations pour chaque module.