Le plugin Sonar PHP

Vous savez, peut-être, qu’en plus de m’interresser à Sonar, je suis impliqué dans le développement d’un plugin pour la plateforme Sonar. Un plugin et demi, si on compte le commit sur le plugin twitter 😀 .

Du PHP dans Sonar

Vous l’aurez compris, il s’agit plugin PHP pour Sonar. Depuis Sonar 2.1, il est en effet possible de développer des plugins permettant à Sonar de réaliser l’analyse de la qualité du code d’applications écrites dans autre chose que du Java.

Le développement du plugin a commencé courant 2009 avec pour objectif de permettre aux développeurs PHP de disposer d’un outil de qualimétrie puissant et automatisable.

PHP étant un language ouvert,il existe déjà de nombreux outils d’analyse de qualité de code, de calcul de métriques et de détection de bugs. Dans un premier temps, l’idée consiste à s’appuyer sur ces outils.

Ajouter le support d’un langage

Il y’a plusieurs façon d’ajouter le support d’un nouveau langage à Sonar. La plus “intégrée” consiste à développer ou à utiliser un outil Java qui réalise l’analyse syntaxique du code (en s’appuyant par exemple sur un AST (Abstract Syntaxic Tree)), et à en faire ressortir certains nombres de métriques.

Une autre possibilité consiste à s’appuyer sur des outils existants et à les intégrer dans Sonar. Pour le développement de PHP Plugin, nous avons choisit la deuxième solution, principalement pour 3 raisons:

  • Nous n’avions pas trop le temps de développer l’AST pour PHP
  • Des outils qui font déjà le boulot existent dans le monde PHP
  • Utiliser des outils connus par la communauté peut aider à l’adoption

Le plugin Sonar PHP se contente, et c’est dejà pas mal, de:

  • recueillir les informations sur le projet: emplacement des sources, des tests unitaires, identifiants et version du projet
  • construire les lignes de commande nécessaires au lancement de des outils
  • lancer l’execution de chacun des outils
  • recueillir les résultats de l’analyse au format XML
  • insérer ces données dans la base Sonar en utilisant l’API Sonar Plugins

Une fois ces données receuillies et réconcilliées avec les fichiers auxquelles elle se réfère, le moteur de Sonar prends la relève et permet de réaliser le drilldown dans le tableau de bord pour aller visualiser l’état du code en détail.

PHPDepend

Parmi ces outils,  l’incontournable PHP Depend est capable de parser un ensemble de code PHP et d’extraire les métriques de bases qui nous permettent de construire un tableau de bord:

  • Le nombre de ligne de code
  • Le nombre de ligne de commentaires
  • La complexité conditionnelle (ccn et eccn)
  • La profondeur d’héritage
  • Le nombre pondéré de méthode (wcm)
  • Le nombre de classes, méthodes, fonctions, …

On obtient en sortie un fichier xml contenant l’ensemble de ces métriques et les artefacts (fichiers, classes, packages) auxquels ils se référent.



  
    
    
  

Le plugin Sonar PHP receuille ensuite les informations contenues dans ce fichier et les insère dans la base de données Sonar. En sortie on obtient un tableau de bord Sonar dont voici quelques copies d’écrans.

PHPUnit

PHPUnit est un framework de tests unitaires automatisés pour PHP. C’est l’équivalent de JUnit (ou Testng) en Java. Il permet de lancer les tests unitaires, fournit une API d’assertion et permet d’extraire des métriques, des rapports d’exécution et de taux de couverture du code testé, là encore au format XML. Sonar PHP fait le même travail de pilotage et d’aggrégation des résultats, mais sur des métriques différentes telles que le nombre de tests, le taux de couverture, les statistiques d’echec et de succès des tests.

PHP CodeSniffer

Code Sniffer est un moteur de détection de violation qui s’appuie sur des clases PHP appellées “Sniff” et qui parcourent des éléments de code afin de détecter des violations. Il s’appuie sur des rulesets qui définissent l’ensemble des règles disponibles. La force de l’outils réside dans le fait qu’il référence plus de 400 contrôles qualité.  L’utilisateur a même la possibilité d’enrichir ces règles avec des nouveaux contrôles. Ou au contraire être le limiter à certaines règles.

L’intégration de CodeSniffer dans Sonar PHP est plus la plus avancée puisqu’il est possible d’intégrer des rulesets personnalisés simplement en les packageant et les copiant dans le repertoire  $SONAR_HOME/extensions/rules. Et une évolution important prévue dans la version 0.4 permettra de ne lancer que les règles choisies par l’utilisateur afin d’améliorer les temps de construction du dashboard.

PHP Mess Detector, PHP Cpd et les autres…

Deux autres outils s’ajoutent aux précédents:

  • PHPCpd (Copy Paste Detector) fournit des métriques sur le taux de duplication de code : Le copier/coller
  • PHPMD est un autre moteur de détection de bug qui réalise aujourd’hui avec une vingtaine de contrôle sur le design, le nommage ou la taille des classes ou méthodes

A ces outils d’autres peuvent venir s’ajouter. Mais pour le moment, nous nous concentrons davantage sur l’intégration au sein d’outils de build ou d’intégration continue.

Conclusion

L’objectif de cette article était de présenter le fonctionnement et d’avoir un aperçu des fonctionnalités du plugin Sonar PHP. Voici quelques liens où l’ont peut trouver davantage d’informations sur Sonar ou de la domaine de qualité logicielle, et sur le plugin bien évidement.

La documentation du plugin sur codehaus

Le site de la forge sonarsource.org

Des détails sur le fonctionnement et la configuration du plugin

Leave a Reply

Your email address will not be published. Required fields are marked *