IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Contrôler la qualité de ses projets avec Sonar

Date de publication : 13/09/2008 , Date de mise à jour : 13/08/2009


I. Introduction
I-A. De l'intérêt de la qualité d'un logiciel, et de son contrôle
I-B. Glossaire
I-C. Description
I-D. Principales fonctionnalités
I-E. Version utilisée
I-F. Licence
I-G. Historique
I-H. Démonstration


I. Introduction


I-A. De l'intérêt de la qualité d'un logiciel, et de son contrôle

Sonar offre une solution performante du contrôle de la qualité du logiciel. Mais qu'est-ce que la qualité d'un logiciel, et en quoi est-il important de la contrôler ?

En paraphrasant Wikipédia, la gestion de la qualité est l'ensemble des activités qui concourent à l'obtention de la qualité dans un cadre de production de biens ou de services (dans notre cas, d'un logiciel informatique). Plus largement, c'est aussi un moyen que se donnent certaines organisations, dans des buts tels que la mise en conformité par rapport aux standards du marché.

Dans le monde informatique en général, et en Java en particulier, la qualité d'une application va être directement liée à la qualité du code. De nombreux outils s'affairent à contrôler certains aspects de cette qualité du code : exécution de tests unitaires, analyse de la couverture du code par ces tests, vérifications du respect des règles de codage, etc. Il est donc possible de contrôler la qualité de son code grâce à ces outils, et d'avoir une confiance accrue en son application !

Le contrôle de la qualité va donc pousser l'équipe de développement à adopter et à respecter certains standards de développement. Le but de tout cela étant bien entendu de rendre le code plus sûr, mais de permettre d'y déceler les erreurs le plus rapidement possible... et donc de les corriger !

Le "Toyota Way" correspond à une méthodologie extrêmement appréciée aujourd'hui, aussi appelée le "Lean". Celle-ci est basée sur 14 principes dont l'un d'eux est le "Build a culture of stopping to fix problems, to get quality right the first time". Ce principe est là pour nous rappeler qu'il est impossible d'accélérer et de soutenir une fréquence de production sans que la qualité soit au coeur de toutes les actions. Autrement dit, il n'est pas possible d'aller vite sans qualité, mais qu'il n'est pas possible non plus de faire de la qualité sans vitesse. C'est aussi pour cela qu'il est aujourd'hui primordial de disposer d'une intégration continue et d'un processus itératif et incrémental.

L'un des intérêts de la surveillance de la qualité est la détection précoce des éventuels problèmes. Or lorsque l'on sait que le coût de la correction d'une erreur augmente considérablement avec le temps (voir image ci-dessous), on comprend très vite l'importance de la détection rapide des erreurs...

Le coût de correction d'une erreur croît exponentiellement avec le temps...
Comme le rappelle Tom DeMarco, "You can't control what you can't measure", "On ne peut contrôler ce que l'on ne mesure pas"... D'où l'importance d'utiliser un outil tel que Sonar !


I-B. Glossaire

Dans cet article, certains termes seront utilisés, et pour aider à leur compréhension, voici un petit glossaire.

Mot Définition
Complexité cyclomatique Métrique destinée à mesurer la complexité d'un code informatique, en comptabilisant le nombre de "chemins" possibles au sein de ce code. Ainsi, l'utilisation de boucles (while, for...) ou encore d'instructions de branchements conditionnels (if, else) augmentent cette complexité. (Définition de Wikipédia)
Dette technique La dette technique est une dette que vous encourez à chaque fois que vous faites quelque chose de la mauvaise façon en laissant la qualité du code se détériorer. Tout comme les dettes financières, agir ainsi est plus facile sur le cours terme. Mais au fil du temps, les "intérêts" que vous payez sur cette dette deviennent énormes, jusqu'à atteindre un point où une réécriture complète de l'application devient plus facile que de maintenir ou de modifier le code existant (Explications de Martin Fowler en anglais).
Métrique Autre terme utilisé pour définir une mesure.

I-C. Description

Sonar est un outil open-source initiallement développé par la société suisse Hortis. Depuis novembre 2008, c'est la société suisse SonarSource qui se charge du développement et du support de Sonar. Le but principal de cet outil est de fournir de nombreuses statistiques (ou "metrics") sur des projets. Ces données permettent ainsi d'évaluer la qualité du code, et d'en connaître l'évolution au cours du développement.

D'un point de vue architectural, Sonar est composé de 3 couches principales :

  • Les plugins Maven 2, qui exécutent les plugins de rapports (Checkstyle, PMD, etc.) et en récoltent les résultats.
  • La base de données, qui stocke et historise les informations sur les projets "surveillés" par Sonar.
  • Le serveur web qui agrège les résultats et affiche des dashboards pour les projets.

Comme le montre le schéma précédent, l'exécution de la commande mvn sonar:sonar se divise en six étapes, dont voici les détails :

  1. Le plugin Sonar va lancer les différents plugins Maven 2 (Checkstyle, Cobertura, Surefire, PMD, etc.) nécessaires à l'analyse du projet.
  2. Le serveur Sonar est également un mini-repository utilisé par Maven 2 pour récupérer les différents artifacts, ainsi que les configurations Checkstyle, PMD, Cobertura.
  3. L'exécution des plugins d'analyse va générer des fichiers XML que le plugin Sonar va regrouper...
  4. ... puis envoyer dans la base de données de Sonar.
  5. Là, au niveau du serveur Sonar, les données fraîchement glanées vont être aggrégées puis analysées.
  6. Le tout sera finalement consultable via l'interface web de Sonar.

I-D. Principales fonctionnalités

Nous listons ici les principales fonctionnalités de l'outil Sonar. Elles sont décrites plus tard, dans les chapitres correspondants.

  • Tableau de bord complet des différents projets suivis.
  • Détection rapide du code à risque.
  • Mesures quantitatives : nombre de classes, duplication de code, etc...
  • Mesures qualitatives : couverture et taux de réussite des tests, complexité du code, respect des règles de codage...
  • Historiques des statistiques, pour en voir l'évolution au cours du temps.
  • Support de plus de 600 règles de qualité (suivant la norme ISO 9126-3).
  • Gestion de profils pour les règles de codage.
  • Visualisation du code source, surlignant les violations des règles de codage qui s'y trouvent.
  • Fonction "Time machine" permettant de comparer plusieurs versions d'une même application.
  • Identification des points faibles d'un projet.
  • Support des plugins.

I-E. Version utilisée

Dans cet article, nous utiliserons la version de démonstration en ligne, appelée Nemo. L'accès à cette démonstration permet de tester Sonar sans pour autant l'installer sur sa machine, mais également de voir directement les nouveautés des dernières versions, puisque Nemo est régulièrement mis-à-jour.

Nous nous baserons ici sur la version 1.10 de Sonar, sortie mi-août 2009. De fait, certaines fonctionnalités, ainsi que les processus d'installation et de configuration sont propres à cette version. Certaines captures d'écran ont été prises avec des versions un peu plus anciennes de Sonar, mais elles ne concernent que des fonctionnalités qui n'ont pas ou peu évoluées depuis.


I-F. Licence

Sonar est un logiciel open-source (licence Gnu LGPL) et est donc librement utilisable. Elle est visible ici. Le code source est disponible et consultable ici.


I-G. Historique

Sonar est un produit relativement jeune, bien que déjà très apprécié. En effet, la toute première version ne date que de la fin de l'année 2007. Le tableau ci-dessous montre succinctement l'historique de l'outil, en mettant en avant les principales nouveautés qu'ont apportées chaque version.

Version Date de sortie Commentaires
1.10 mi-août 2009 De nombreux problèmes ont été corrigés.
1.9 25 mai 2009 Intégration du moteur Sonar-Squid (remplaçant JavaNCSS).
1.8 17 avril 2009 Introduction des "Hotspots", support de Maven 2.1.
1.7 18 mars 2009 Possibilité d'ignorer certaines classes ou packages d'un projet, affichage du détail des erreurs des tests unitaires, "nuage de couverture" pour les packages et modules.
1.6 9 février 2009 Intégration des seuils d'alerte, amélioration de la gestion des profils de qualité.
1.5 16 décembre 2008 Début du support des plugins, gestion de Findbugs.
1.4 8 août 2008 La version 1.4 est une version de transition, avant la version 1.5 qui devrait permettre de gérer les plugins, afin d'apporter de nouvelles fonctionnalités à l'outil.
1.3 17 juin 2008 Un effort tout particulier a été apporté à la stabilité et à l'amélioration des performances de Sonar. Ce dernier peut désormais se déployer sur un serveur Tomcat. De nouvelles statistiques ont été ajoutées. Un effort tout particulier a également été apporté afin que Sonar puisse gérer un volume important de données : Sonar peut ainsi suivre plus de 200 projets avec une analyse qualimétrique journalière pour un total de 6 millions de lignes de code...
1.2.1 30 avril 2008 Essentiellement des corrections de bugs de la version 1.2.
1.2 27 mars 2008 Refonte importante de l'aspect graphique et de l'affichage des rapports.
1.1 29 février 2008 Gestion de la "time machine", nouveaux indicateurs, fonctionnalités d'administration. Gère désormais les extensions PMD et Checkstyle. Enfin, de nombreux bugs ont été corrigés.
1.0.2 14 décembre 2007 Gestion des projets non Maven, nouvelles statistiques et nouveaux diagrammes.
1.0 21 novembre 2007 Première version finale de Sonar. Essentiellement des bug fixes de la version bêta.
1.0 bêta 5 octobre 2007 Première version (bêta) de la nouvelle version de Sonar.

I-H. Démonstration

Depuis le début du mois de juin 2008, Hortis a mis en place un site de démonstration de leur outil Sonar. Ce site, accessible depuis l'URL http://nemo.sonar.codehaus.org, regroupe un certain nombre de projets open-sources, comme par exemple des projets Apache Commons...

 

Valid XHTML 1.0 TransitionalValid CSS!

Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.