Continuous Integration Game

jenkins_logo

De nombreux outils permettent d’analyser la qualité du code produit (Jenkins, Sonar, PMD, Checkstyle, etc.) mais comment motiver son équipe à être régulière dans l’effort ? Comment savoir qui joue le jeu ?

Le CI Game (pour Continuous Integration Game) est un plugin Jenkins très rapide à mettre en place qui permet d’attribuer une note à chaque commit et à chaque développeur.

 

CI Game

Le Continuous Integration Game est un plugin Jenkins créé par Clint Shank. Il permet de valoriser chaque construction d’un projet donné en fonction de sa qualité. Chaque utilisateur gagne ou perd des points à chaque analyse Jenkins, ce qui lui donne un score pour se comparer aux autres membres de l’équipe. Il va alors permettre de limiter le nombre de fois où la build du projet échoue, le tout, dans un esprit ludique.

Pour être en tête du classement, le développeur devra donc garantir la qualité de ses développements (validité de la build, écriture de tests unitaires, syntaxe du code, etc.) dans un cercle vertueux pour l’équipe et le projet.

Critères pris en compte

A chaque analyse Jenkins, le plugin permet d’attribuer une note en fonction de la qualité :

  • -10 points pour avoir cassé la buildScore ci game
  • -1 point pour un test échouant pour la première fois
  • 0 point pour ne pas avoir réparé une build déjà cassée
  • +1 point pour un commit sans échec et pour chaque nouveau test en succès

Chaque plugin procède sur le même principe, par exemple pour PMD :

  • -5, -3, -1 pour avoir respectivement ajouté un avertissement d’une erreur grave, moyenne ou basse
  • +5, +3, +1 pour avoir respectivement retiré un avertissement d’une erreur grave, moyenne ou basse

Ces règles sont identiques pour les autres plugins comme Checkstyle, FindBugs, Task Scanner, Violations ou Warnings.

Si le CI Game s’intéresse à la validité de la build et au nombre de tests unitaires en succès, PMD est dédié à la qualité du code Java, Checkstyle pour le style du code ou FindBugs pour souligner les parties de code dangereuses. Chaque plugin est complémentaire et utilisés ensemble, ils permettent d’avoir une note globale qui reflète les différents aspects de la qualité d’une construction.

Tableaux des scores

Les points fournis aux développeurs par chaque analyse, permettent alors d’établir un classement.

 classement ci game

Bénéfices

Ce « jeu » permet à toute l’équipe de suivre les progrès réalisés à chaque analyse du projet en toute transparence. Plus l’équipe gagne des points, plus le projet en bénéficie. Le côté ludique peut permettre une émulation positive dans la recherche de la qualité sur le projet.

Habituellement, il faut attendre l’analyse Sonar pour avoir une idée de l’évolution de certains points du projet. Ici, l’évolution est régulière et sans avoir à comparer des points de valeur. Le score est global, calculé directement pour un nouveau moyen de suivre la qualité dans le temps.

L’analyse des variables Sonar est complémentaire du score du CI Game qui peut permettre de visualiser rapidement une dérive.

Attention

L’utilisation de ce plugin ne doit pas être vu comme une méthode de « flicage » qui peut stigmatiser un développeur ou éloigner toute l’équipe du but principal de ce jeu : améliorer ou garantir la qualité.

De plus, ce plugin n’est pas parfait dans sa méthode de calcul. Par exemple, un test (dont dépend un autre test) échoue et ce deuxième test ne sera alors pas lancé. Le développeur perd donc un point pour l’échec du premier test. En corrigeant ce test, le deuxième test sera alors lancé et le développeur gagnera deux points. Au final, il gagnera un point alors qu’il n’a créé aucun test. Dans le cas de correction de configuration, un développeur peut gagner une centaine de points sans création de tests. Un autre cas se produit quand deux développeurs commitent en un temps rapproché et se retrouvent dans la même analyse Jenkins[i]. Si un des commits fait échouer la build, les deux perdront des points. Une solution peut être d’augmenter la fréquence des analyses.

Bilan et retour d’expérience

Après avoir utilisé ce jeu sur notre projet, je peux en faire un rapide retour d’expérience. Ce plugin prend peu de temps à être intégré. Il ne modifie pas les habitudes de développement et permet des statistiques rapides sur qui « joue le jeu » dans l’équipe concernant la qualité du code.

Le développeur a ainsi un retour régulier sur la qualité du code qu’il produit et peut donc savoir quels points améliorer à tout moment. L’intégration d’un nouveau collaborateur est ainsi facilitée. Après avoir été formé sur les règles en vigueur sur le projet, un contrôle automatique et complet est mené sur chaque commits. Il peut donc progresser très rapidement.

Couplé à Sonar qui permet une analyse de la qualité du code du projet, l’équipe entière peut donc mesurer les progrès effectués collectivement et grâce à chacun.

Documentation

https://wiki.jenkins-ci.org/display/JENKINS/The+Continuous+Integration+Game+plugin

 

[i] Voir le lien suivant : http://stackoverflow.com/questions/16485554/how-does-the-continuous-integration-game-ci-game-plug-in-in-hudson-jenkins-wit

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.