lundi 8 octobre 2012

L'assurance qualitée avec Sonar

Sonar est un outil pour gérer la qualité du code source pour différents langages tels que Java, PHP, vb. Il utilise plusieurs logiciels tels que pmd, findbug, covertura... pour y parvenir.

Ce logiciel permet de détecter la duplication de code, de déceler le manque de documentation, les anomalies potentielles, règle de programmation, ce que couvrent les tests unitaires et la complexité du code.
Sonar peut s'intégrer à différents outils d'intégration continue tel que Hudson.

Il intègre sa propre base de données, H2 mais il est recommandé d'utiliser une autre base de données ne serait que pour avoir de meilleure performance.

Pour la présentation du produit, H2 sera utilisé. De plus aucun serveur d'intégration continue n'est utilisé.
Télécharger sonar et décompressé l'archive.

La particularité de ce système est qu'il est très visuel. Il peut aider à mieux identifier où doit être mis du temps afin d'accroître la qualité du projet.

Démarrage

Dans le répertoire bin de sonar, sélectionner le répertoire correspondant à votre environnement.

Cliquer sur le fichier sonar.bat si vous utilisez Windows, sinon sur sonar.sh.

Le système est alors accessible via un navigateur web: http://localhost:9000

Projets

Pour chacun des projets que vous désirez importer, si vous utiliser maven lancez la commande
mvn sonar:sonar

La liste des projets importés sera alors affichée dans l'écran de démarrage de Sonar.

Treemap

La treemap est une vue 2D. La taille de chaque carrée est une mesure quantitative selon différents critères des catégories: complexité, design, documentation, duplication, test d'intégration, gestion, revue...

La couleur représentante une mesure qualitative.


Dashboard

C'est la vue par défaut d'un projet. Les différentes mesures quantitatives présentées plutôt y sont affichées.

Hotspot

La vue hotspot présente les éléments à corriger d'un projet.

  • classes ayant le plus de violations
  • règles avec le plus de violations
  • classes ayant une forte complexité
  • classes ayant le plus de code dupliqué
  • classes le moins documentées


Time machine

La vue time machine permet de voir l'évolution du projet. Il est possible de comparer différentes versions du projet. Cette vue est particulièrement importante afin de savoir si le projet s'améliore ou part à la dérive.



Component

La vue component donne des informations similaires au dashboard, cependant elles sont données par  module.


Violations drilldowns

La vue Violations drilldowns indique les violations du projet en plus d'indiquer leur importance. Il est possible de modifier le degré d'importance des violations. Le nombre d'anomalies par type, le nombre de classes par importance, ainsi que le nombre d'anomalies par classe sont affichés.



Cloud

La vue cloud spécifie l'importance à accorder à une classe. La taille du nom de la classe varie en fonction de son importance.

Le cloud Quick wins affiche les classes qui augmenteront la qualité du code tout en demande peu d'effort. La taille du nom de la classe varie en fonction de sa complexité alors que sa couleur indique sa couverture

Le cloud Top risk affiche les classes ayant un risque d'erreur. La taille du nom indique la complexité par méthode alors que sa couleur indique le respect des règles.



Design

La vue design indique les dépendances entre les différents modules d'un projet. Certaines dépendances sont jugées inappropriées.


Des plugins gratuit et payant avec plus de fonctionnalités aussi disponibles. Le plugin Refactoring Assessment est par exemple disponible sous ces modes.




Dans sa version gratuite, des données sont fournies afin de montrer les possibilités de la version payante.  La version payante effectue automatiquement certains traitements.

Autres plugins

La puissance de Sonar est en partie due au nombreux plugins existant. Ils permettent d'étendre les fonctionnalités de l'outil. Voici quelques plugins très intéressants que je vous conseille.


SCM Stats Plugin

Technical Debt Plugin

Quality Index Plugin

SIG Maintainability Model Plugin

Useless Code Plugin

Timeline Plugin