Un court article pour vous présenter et vous guider vers une première approche de la solution Sonar.
Au fur et à mesure des projets, une besoin pouvant être rencontré assez souvent concernant les développements est celui du “contrôle de la qualité du code“, tâche qui peut s’avérer parfois fastidieuse, surtout lorsqu’elle nécessite d’être répétée régulièrement dans le cycle de vie d’intégration de nombreuses actions correctives et évolutions sur divers projets.
Afin de favoriser cela, l’outil Sonar s’avère être un excellent compagnon de combat pour la chasse aux divers bugs et autres erreurs/failles de programmation.
Qu’est-ce que Sonar ?
Sonar (Version actuelle : 2.8 ) est un utilitaire open-source, édité par la société suisse SonarSource.
Le logiciel est entièrement conçu en java, et devient rapidement une référence parmi les outils d’audit de code existants sur le marché.
Son côté open-source et facile d’accès le rend particulièrement intéressant, rapide à mettre en œuvre et à incorporer dans un contexte de développement en mode projet. Nous allons voir dans la suite de cet article comment mettre en place rapidement cet outil et le tester sur une source.
Prérequis
Pour une utilisation optimale de l’outil Sonar, il est conseillé de disposer au préalable d’une version de Maven (version 2.0 au minimum).
En effet , pour un projet “mavenisé” il suffira d’exécuter une simple commande pour déployer le projet sous le serveur Sonar. Dans la suite de cet article nous traiterons le cas d’un projet déjà passé sous contexte Maven, mais il est toutefois possible de migrer ses projets sous Sonar sans passer par Maven.
Un moyen simple de vérifier que Maven est installé est d’ouvrir un invité de commande et taper la commande mvn –version
Si le message “mvn n’est pas une commande reconnue” apparaît, il faudra installer une version de maven avant de passer à la suite de cet article.
Comment installer Sonar
Une fois Maven installé, le package Sonar est disponible en téléchargement via le lien suivant :
http://www.sonarsource.org/downloads/
Suite à cela il faut exécuter le StartSonar.bat présent dans le répertroire bin/ du package récupéré. Par défaut le port d’accès au serveur Sonar est 9000. Après quelques secondes vous pouvez donc consulter la page d’accueil de Sonar sur le lien par défaut :
http://localhost:9000
L’IHM proposée est assez claire et facile d’accès, proposant les diverses options d’intégration des informations provenant des audits. L’environnement Sonar est prêt. Nous pouvons à présent passer à la suite et “tester” notre code via l’outil 🙂
Configuration
A noter que l’on peut paramétrer plusieurs éléments spécifiques à l’audit du code à inspecter ( projet ou projets à vérifier, sévérité des erreurs/remarques remontées, utilisateur etc..)
Au niveau des sources, vous pouvez à présent « envoyer » les informations de votre code vers le repository ciblé par Sonar.
Pour cela, se placer dans le répertoire de votre projet (au niveau du fichier pom.xml parent du projet) et exécuter la commande suivante :
mvn clean install sonar:sonar
Le projet ciblé par l’installation apparaît à présent sur le serveur Sonar sur le localhost:9000 , avec toutes les statistiques récupérées après inspection du code.
Cas concret avec le projet YouGO
Pour illustrer l’utilisation de Sonar, nous allons l’appliquer aux sources du projet YouGO récupérées depuis le repository svn :
Après un clean install sur tous les pom.xml de ce projet, voici ce que nous obtenons :
Bien entendu, il en ressort que le retour d’audit s’interprète comme positif. Il est intéressant de découvrir la façon dont les différents résultats de l’audit sont présentés :
- La partie Tableau de Bord (Dashboard) présente sous forme de chiffres et statistiques les informations sur le projet investigué (dans cet exemple : la partie Data Transfert Object de Yougo ). On y retrouve le nombre de lignes de code, le nombre éventuel de violations relevées, de duplication, le niveau de complexité du code etc :
- La section Composants (Components) quant à elle dresse la liste des packages composants applicatifs de l’application concernée, avec à droite un graphe modélisant leur proportion selon la quantité de lignes de code, ainsi que la criticité relevée suite à l’audit :
- Une autre section Violations Drilldown ( que nous pouvons traduire « investigation des violations » ) va expliciter plus amplement la nature des violations mineures ou majeures relevées. A noter que certaines erreurs remontées peuvent parfois être sujettes à discussion, comme c’est le cas pour l’erreur illustrée ci-dessous :
- La partie Time Machine peut par la suite s’avérer très intéressante, car elle met en perspective l’évolution de la qualité du code source avec le temps :
- Une autre fonctionnalité intéressante est celle appelée Hotspots ( traduire .. « Points chauds » ) :
Cette fonction met en relief la ou les failles ou remarques relevées qui s’observent le plus souvent, comme dans cet exemple où Sonar nous indique que la règle du « Magic Number » n’est pas respectée lors de 12 occurrences dans la partie Business Objects de YouGO.
Si comme moi vous ne savez pas à quoi fait allusion cette fameuse règle du nombre magique … nous avons la réponse en ouvrant le détail de la remarque :
Ha il ne s’agissait donc que de cela … 🙂
…. A noter que la façon d’investiguer le code peut totalement être configurée dans la partie propriétés : paramétrer le niveau de sévérité des erreurs remontées, la nature de ces erreurs etc..
En conclusion
Comme nous l’avons vu, l’outil Sonar offre donc de nombreuses fonctionnalités, très instructives pour assurer un bon suivi qualitatif de code des différents projets. Il saura supplanter dans la majorité des cas les campagnes d’audits de codes manuels, ce qui implique un gain de temps assez conséquent pour une équipe.
Cet utilitaire est une solution à la demande sans cesse croissante de qualité, et pourra demain devenir un des incontournables de la bonne gestion du cycle de vie d’un projet.
6 Comments
Camille Vaucelle
Sonar 2.11 est disponible !
Camille Vaucelle
Outil indispensable pour tout projet de plus de 10000 lignes, car il permet de repérer rapidement le code dupliqué ou la méthode qui va poser problème lors d’une future évolution (l’évolution qu’on ne prévoit jamais faute de moyen mais qui arrive toujours faute d’étude préalable ou d’expression du besoin).
J’ai eu par exemple l’occasion d’utiliser Sonar dans un projet bancaire développé durant 3 mois, en nearshore. Pour avoir conçu puis recetté fonctionnellement & techniquement ce projet, je peux vous assurer que chacune des 30000 lignes est unique, expliquée, modifiable ou surchargeable sans le moindre effet de bord indésirable non detecté.
Attention Eric, Sonar n’est pas la solution miracle, il ne faut pas oublier de se baser sur une méthode de gestion de projet solide (ici cycle en V, conception cyclique en UML et TDD) et cultiver un esprit Devops au sein de l’équipe. Mais il est clair que Sonar permet d’atteindre un suivi des développements synonyme de perfection, et je ne saurai plus faire sans, dans un contexte offshore ou non.
Comme je le répète régulièrement à mes directeurs de projet : “Faire de la qualité, c’est investir dans l’absence de problème. Le budget initial est certe plus élevé, mais les gains finaux sont incomparables (délais, réactivité, maintenabilité, …). Votre compte client fera rapidement la différence entre vous et vos concurrents”.
Je vous ai selectionné les métriques classiques récoltées sur Sonar à l’issu du projet présenté :
– 0% de lignes de codes dupliquées,
– 40% de lignes de codes commentées,
– 2.8 de complexité par méthode sur le coeur métier de l’application (213 classes de RG), 2.1 sur l’ensemble du projet (factories, inputs/outputs,…)
– Le délais de livraison a été divisé par 2 par rapport au planning.
Et vous, avez vous d’autres retours d’expériences ou métriques issus de projets gérés à l’aide de Sonar ?
Karim Ait Gherghert
Merci Manu 😉
Effectivement de plus en plus de groupes utilisent cet outil en amont de leurs développements, je m’en rends encore compte dans ma nouvelle mission.
N’hésite pas dès que tu as des retours, @bientôt
Karim Ait Gherghert
Bonjour Eric, merci.
J’ai eu l’occasion d’utiliser sonar en entreprise, mais pas dans le cadre d’un projet Agile.
Mais il me semble également adéquat pour s’intégrer dans un process projet en méthode Agile, pour optimiser la phase de test.
Emmanuel
Super article Karim ! D’autant plus intéressant si l’outil monte en puissance dans les entreprises.
je vais essayer de l’installer et je ferai un petit retour pour dire si j’ai trouvé la mise en place fastidieuse ou pas.
Eric Phongsavanh
Article très clair!
Utilises-tu sonar en entreprise? Est-ce un projet “agile”?
Comments are closed.