L'extensibilité est une qualité essentielle pour un logiciel open source qui a l'ambition d'être adopté massivement. En effet, cela permet à la communauté de contribuer en ajoutant de nouvelles fonctionnalités ou bien en améliorant l'existant et par conséquent de bénéficier d'un effet levier : c'est la magie de l'open source !
Sonar s'appuie sur un cœur qui est un mécanisme d'extension. Autour de ce cœur viennent se greffer des plugins qui contiennent les fonctionnalités de l'outil. Mais le fait d'avoir un tel mécanisme en place n'est pas suffisant pour se déclarer extensible. Il faut également répondre aux 4 points suivants :
- Une API simple d'utilisation ;
- Une forge ;
- Une communauté active ;
- Une documentation et des exemples permettant de mettre le pied à l'étrier.
Ces 4 conditions étant maintenant remplies par Sonar, tout un chacun peut se lancer dans l'écriture de plugins pour étendre l'outil.
NdM : la version 1.8 de Sonar est sortie il a 3 jours. Parmi les nouvelles fonctionnalités, on trouvera un récapitulatif des points chauds sur un projet, l'import/export des profils Findbugs et un changement concernant la publication des mesures sur les catégories ISO ; plus une ribambelle d'améliorations et de corrections par ailleurs. Une API simple d'utilisation
Un plugin Sonar est un simple fichier jar contenant plusieurs POJO (Plain Old Java Objects). Une fois packagé, ce jar sera déposé dans le répertoire /extensions/plugins de Sonar afin d'être chargé à la volée lors du prochain démarrage de l'application.
Ce jar doit posséder un conteneur d'extensions "MyOwnPlugin" qui implémente l'interface org.sonar.plugins.api.Plugin. Ensuite, il est possible de définir de manière optionnelle d'autres extensions en fonction de ses besoins :
1. Nouvelle métrique comme par exemple le nombre de bugs ouverts pour l'application, le nombre de tests Greenpepper, les dépendances de classe…
2. Nouveau jeu de règles de codage qui seront ajoutées aux règles existantes dans Sonar, comme par exemple le tag "TODO" est interdit ou bien le package com.mycompany.web ne devrait jamais accéder le package **/sql/**.
3. Nouveau capteur afin de collecter des métriques comme la complexité cyclomatique pour du code C#.
4. Nouveau handler permettant de piloter un plugin Maven si, pour collecter un rapport généré en XML, le capteur a d'abord besoin d'exécuter un plugin Maven existant comme par exemple JDepend.
5. Nouveau service de consolidation afin de calculer des métriques de second niveau comme par exemple la dette technique d'un projet ou bien le pourcentage de méthodes publiques commentées en javadoc.
6. Nouvelle page web GWT pour afficher par exemple un "motion chart" ou bien un treemap à deux niveaux.
7. Nouveau composant GWT qui ajoute un onglet au composant permettant d'afficher le code source.
L'API va bien sûr continuer à évoluer afin d'activer de nouvelles fonctionnalités. Mais comme tout est plugin au sein de Sonar, elle a déjà été testée de manière intensive en pilotant les différents plugins utilisés dans Sonar : Checkstyle, Surefire, JavaNCSS, Clover, Findbugs… L'API a atteint un niveau de maturité suffisant pour permettre des contributions externes.
Une forge
Mettre à disposition des contributeurs une forge leur permet de simplifier de manière importante le processus de développement d'un nouveau plugin. Cela permet également d'avoir de la visibilité sur les impacts d'un changement de l'API en centralisant l'hébergement des plugins. Comme Sonar, les plugins Sonar sont hébergés chez Codehaus qui met à disposition des projets open source une des meilleures infrastructures : Jira, Subversion, Confluence ainsi la mailing liste de développement Sonar. Tout ceci a été finalisé début avril.
Les accès à la forge sont accordés sur demande à quiconque souhaite développer un plugin.
Une communauté active
Même si Sonar est un produit assez jeune, la communauté a grossi de manière très importante depuis 6 mois : au mois de Mars l'outil a été téléchargé 2,000 fois, la liste de diffusion utilisateur compte environ 150 utilisateurs enregistrés, celle de développement 40 et 250 personnes suivent le blog chaque jour. En activant le mécanisme d'extension, cette communauté sera capable de s'approprier encore plus l'outil en développant de nouvelles fonctionnalité (du moins, c'est l'objectif :-))
Documentation et exemples
Il est quasi-impossible dans le monde du développement logiciel d'écrire une documentation sans commencer par un exemple "Hello World". Sonar ne déroge pas à la règle en fournissant un tutoriel ainsi que le code source de cet exemple mythique. Une documentation de l'architecture des plugins ainsi que des web services est également disponible sur la page confluence de Sonar. En plus de la documentation, plusieurs exemples sont disponibles qui peuvent servir de point de départ à tout nouveau plugin (Taglist, Emma et PHP).
Tout semble donc en place pour que la communauté contribue… Ne manquent plus que les idées de plugin ? En voici quelques unes que le mécanisme actuel permet de délivrer de manière tout à fait autonome:
- Intégration du Testability Explorer
- Création d'une métrique de second niveau permettant de calculer la dette technique d'un projet
- Couverture d'un nouveau langage
A vous de jouer !
Aller plus loin
- Le site web Sonar (79 clics)
- Sonar en action (45 clics)
- Le portail des plugins (183 clics)
- Notes de publication de la version 1.8 (11 clics)
- DLFP: Sortie de la version 1.7 de Sonar (101 clics)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.