Le Blog d'Akram Ben Aissi

Le B.A BA autour de Java, JEE et d'autres choses

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.

<pre><?xml version="1.0" encoding="UTF-8"?>
<metrics ahh="0.19444444444444" andc="0.46268656716418" calls="1406" ccn="1203" ccn2="1237" cloc="11657" clsa="7" clsc="60" eloc="6528" fanout="571" leafs="59" loc="20078" maxDIT="2" ncloc="8421" noc="67" nof="0" noi="21" nom="578" nop="11" roots="5">
  <files>
    <file name="/usr/local/pear/PEAR/PHP/Depend/Parser.php" cloc="324" eloc="534" loc="997" ncloc="673"/>
    <file name="/usr/local/pear/PEAR/PHP/Depend/StorageRegistry.php" cloc="81" eloc="18" loc="103" ncloc="22"/>
  </files>

class= »aligncenter size-medium wp-image-128″z

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

Publicités

8 réponses à “Le plugin Sonar PHP

  1. Maxime 2011-06-08 à 13:02

    Salut Akram,

    Tout d’abord félicitations pour ta contribution sur le plugin PHP. On a deja du se parler sur la Mailing list Sonar puisque je participe pas mal aussi au développement du plugin .Net.

    Enfin bref j’avais une question concernant le plugin PHP, existe-t-il et connaitrais-tu un référentiel qui permettrait d’associer les violations aux bonnes catégories ? Car par défaut elles sont toutes en « Major ».

    Bonne continuation !

    • akrambenaisssi 2012-01-14 à 23:26

      Bonjour Maixme,
      désolé pour le délai de réponse. Concernant les référentiels des catégories et leur criticité, un important de travail a été réalisé sur la version 0.6 et sera poursuivi sur la version 1.0.

  2. Mohamed Amine OSMAN 2012-01-08 à 21:47

    Bonjour Akram,
    Je te félicite pour le travail que tu fais.
    Je suis responsable qualité de code des applications en cours de développement dans notre société.
    J’utilise Sonar pour les projets Java, mais je trouve de problème pour intégrer les projets PHP.
    Merci de trouver un moyen de communication ensemble pour m’aider.

  3. Mohamed Amine OSMAN 2012-01-14 à 21:21

    Bonjour,
    Je suis chef de projets Homologation. j’utilise Sonar pour les projets Java et je compte ajouter le contrôle des projets PHP.
    les outils utilisé sont comme suit :
    Jenkins,
    Soner 2.12
    ANT 1.8

    mon problème est d’afficher le taux de violation des projets php
    Merci

    • akrambenaisssi 2012-01-14 à 23:24

      Bonjour Amine,
      Je te conseille de consulter la documentation du plugin Sonar PHP sur le wiki de Sonar [1].
      En cas de difficulté, il est aussi possible de poster un mail sur la mailing liste users@dev.sonarsource.org.
      [1]http://docs.codehaus.org/display/SONAR/PHP+Plugin

  4. Mohamed Amine OSMAN 2012-03-12 à 17:29

    Bonjour
    j’ai un problème pour intégrer mes projets PHP sur SONAR en utilisant Maven 2 et 3.
    Merci de me trouver une solution.

  5. Mohamed Amine OSMAN 2012-04-02 à 10:55

    Bonjour,
    Mon problème est résolu en fin. Le problème était au niveau de l’environnement des outils utilisés sous Windows.
    J’ai installé l’environnement d’intégration continue (Jenkins, Sonar) sous Ubuntu et l’analyse est calculée avec succès.
    Merci pou vos aides

  6. Mohamed Amine OSMAN 2012-06-14 à 15:06

    Bonjour,
    Je cherche comment exclure des répertoires et des classe php dans l’analyse de qualité de code sources par sonar.
    Au fait il y a des classes générées ou du framework que je veux les exclures à fin de sortir un taux de repsct exacte aux développeurs.
    Merci…

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :