Zoom sur… Sonar, pour automatiser la vérification de la qualité du code Java

Publié le Mis à jour le

La qualité du code est souvent le parent pauvre des projets en entreprise et, pourtant, celle-ci a un impact sur la productivité. Sonar est le tableau de bord permettant de suivre l’évolution de la qualité des sources au fur et à mesure de la vie d’un projet.

Vous en avez marre de côtoyer des projets Java contenant du code dupliqué, des classes avec une seule méthode de 2500 lignes et sans aucun commentaire ?
Sonar est la solution a tout vos soucis ! (je sais, c’est une accroche commerciale mais parler qualité n’est pas toujours très attractif :)).

Sonar est un outil qui va mettre votre code à rude épreuve à l’aide d’un batterie de tests éprouvés.

La qualité de code

Parlons d’abord de la qualité du code. Sonar embarque différents outils permettant l’analyse suivant 6 axes :

  • identification des duplications
  • * recensement du nombre total de ligne de code (avec et sans les espaces ou commentaires)
  • * recensement du nombre de classes et méthodes
  • * calcul du taux de duplication, du nombre de méthodes/classes/fichiers dupliqués
  • mesure du niveau de documentation
  • * calcul du pourcentage de commentaire par rapport au code
  • * mesure du nombre d’API commentées / non commentées
  • * mesure du nombre de blocs de code commentés
  • respect des règles de programmation
  • détection des bugs potentiels
  • évaluation de la couverture de code par les tests unitaires
  • analyse de la répartition de la complexité

Sonar se base sur des projets existants pour faire les analyses suivantes :
– Duplication de code : [CPD – PMD->http://pmd.sourceforge.net/cpd.html]
– Test unitaires et couverture de code : Cobertura, Clover, Emma, JUnit, Surefire
– Règles de programmation : Checkstyle, PMD
– Bugs potentiels : FindBugs

La complexité

Petit point sur le calcul de la complexité :

Sonar effectue un calcul de complexité du code permettant de déterminer la bonne disposition des instructions dans les classes Java. Cela permet de détecter les méthodes / les classes ayant une complexité forte aggravant la maintenance de l’application.

L’algorithme de calcul de la complexité est celui défini par Thomas McCabe, appelé complexité cyclomatique. Cet algorithme génère un graphe qui décrit tous les chemins possibles que peut prendre l’exécution du code. Plus le nombre de chemins est élevé, plus la complexité augmente.

Des méthodes ayant une mesure de complexité trop élevé seront susceptibles de réduire la possibilité de les maintenir et les comprendre correctement. La diminution de la complexité s’effectue alors en déportant des parties d’instructions dans de nouvelles méthodes ou classes.

Installer Sonar

Une fois les bases de la qualité de code évoquées, passons à l’installation du produit. L’installation de Sonar est relativement aisée. Il suffit soit de déposer Sonar dans un serveur d’applications en tant que WAR, soit de le démarrer en standalone. Par défaut, il embarque une base de données HSQL, il est possible d’utiliser un SGBD externe.

Une fois démarré, l’ajout de nouveaux projets se fait via Maven. Il faut donc au préalable que le projet soit configuré avec Maven et la commande mvn clean install sonar:sonar fera l’affaire. Il est possible d’ajouter des projets non-configurés avec Maven, mais cela requiert un peu plus de configuration (généralement, il suffit de créer un fichier pom.xml).

Sonar en action

Ceci est le tableau de bord de votre projet, qui synthétise toutes les métriques liées à l’analyse, ainsi que leurs tendances par rapport à la précédente analyse. Le plus compliqué ici consiste à bien maitriser les métriques, qui sont consultables plus en détails avec des liens vers le code source. Par exemple, il est possible de consulter la partie de code qui engendre une violation critique en regard à une règle de conformité.

Intégration continue

Sonar trouve logiquement sa place dans une logique d’intégration continue à coté d’un serveur Hudson par exemple. Grâce à la fonctionnalité des trends et de la time machine, la visualisation de l’évolution des métriques est aisée.

Et pour PHP ?

Sonar est aussi disponible pour PHP, cela reste de l’ordre de l’alpha, plus d’informations sont disponibles sur le site de codehaus.

Pour conclure

Sonar est un outil puissant, pouvant être utilisé à des fins de suivi de la qualité du code sur un projet, ou encore pour en réaliser l’audit. La seule difficulté consiste à bien comprendre les métriques utilisées et les actions à mener en cas d’alerte. Nous considérons que la mise en place de Sonar dans le cadre de projets de développement est bienvenue, et nous la conseillons naturellement.


  • Développement

  • Java, JEE

  • Outil