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). 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...
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 | Exemple |
---|---|---|
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 court 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 | Une métrique est une caractéristique (ou une propriété) d'une application. | Nombre de lignes de code, pourcentage de couverture de code par les tests unitaires, nombre de violations de règles de codage, etc. |
Mesure | Valeur d'une métrique à un moment précis de la vie de l'application. | Au 5 juin, l'application comptait 42.000 lignes de code, 317 violations et avait une couverture de code de 78 %. |
Règle de codage | Définition d'une bonne pratique à respecter dans son code. Cela peut également concerner des mauvaises pratiques à éviter, car souvent source d'erreur. | Ne pas dépasser une complexité cyclomatique de 10 pour une méthode, redéfinir la méthode hashCode lorsque l'on redéfinit equals, etc. |
Violation (d'une règle de codage) | Non-respect, dans une partie du code précise, d'une règle de codage particulière. |
I-C. Description▲
Sonar est un outil open source initialement 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 une analyse complète de la qualité d'une application en fournissant de nombreuses statistiques (ou métriques) sur ses 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 plusieurs couches :
- un exécuteur (basé sur Maven 2/3, Ant ou un exécuteur Java) dont le but sera de lancer un certain nombre d'outils d'analyse, et d'en agréger les résultats ;
- une base de données, qui stocke et historise les informations sur les projets surveillés par Sonar ;
- le serveur web qui permet la navigation et la consultation des analyses réalisées sur les projets ;
- éventuellement un plugin pour Eclipse qui offre une meilleure intégration des données de Sonar dans son outil de développement.
I-D. Principales fonctionnalités▲
Nous listons ici les principales fonctionnalités de l'outil Sonar. Elles seront décrites en détail dans les chapitres suivants de cet article.
- 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é.
- 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 instance de 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 2.9 de Sonar, sortie mi-juillet 2011. De fait, certaines fonctionnalités, ainsi que les processus d'installation et de configuration sont propres à cette version. La plupart des captures d'écran ont été réalisées à partir de l'instance de démonstration Nemo.
I-F. Licence▲
Sonar est un logiciel open source (licence Gnu LGPL) et est donc librement utilisable. Cette licence 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 apportées par chaque version.
Version | Date de sortie | Commentaires |
---|---|---|
2.9 | 18 juillet 2011 | Améliorations des revues manuelles, historisation des profils qualité. |
2.8 | 19 mai 2011 | Revues de code manuelles, comparateur de profils qualité. |
2.7 | 1er avril 2011 | Couverture du nouveau code, meilleure intégration avec les gestionnaires de sources. |
2.6 | 18 février 2011 | Support de Ant. |
2.5 | 14 janvier 2011 | Vues différentielles, suivi temporel des violations, nouvelles règles. |
2.4 | 16 novembre 2010 | Tableaux de bord paramétrables, centre de mise à jour, ajout de règles d'architecture. |
2.3 | 13 octobre 2010 | Exportation / importation des profils qualité. |
2.2 | 15 juillet 2010 | Ajout des favoris et des filtres. |
2.1 | 5 mai 2010 | Analyse des dépendances des projets, nouvelles règles. |
2.0 | 10 mars 2010 | Ajout de métriques de Chidamber et Kemerer, matrice de structure. |
1.12 | 7 décembre 2009 | Gestion des utilisateurs et des groupes, coloration syntaxique du code source |
1.11 | 5 octobre 2009 | Nouvelle page de composants, nouvelles métriques. |
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 | Version de transition, avant la version 1.5. |
1.3 | 17 juin 2008 | Amélioration des performances et de la stabilité de Sonar, déploiement sur Tomcat. |
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", fonctionnalités d'administration. Gestion des extensions PMD et Checkstyle. |
1.0 | 21 novembre 2007 | Première version finale de Sonar. Essentiellement des corrections de bogues de la version bêta. |
La principale nouveauté de la version 2.10 qui devrait sortir pour la rentrée 2011 sera la support de l'internationalisation ("i18n") et pourra ainsi être utilisé en français.
Le site Nemo (voir le chapitre suivant) permet déjà d'avoir un aperçu de cette traduction.
I-H. Démonstration▲
SonarSource met à disposition le site http://nemo.sonar.codehaus.org, qui regroupe un certain nombre de projets open source. Cela permet de voir les différentes fonctionnalités de l'outil, sans nécessairement l'installer soi-même. De plus, cette version publique est toujours mise à jour, ce qui permet également de tester les nouvelles fonctionnalités.