Zoom sur Sonar, l'analyseur de code qualitatif, ici avec php

Présentation dans le cas de PHP

imikado

Apprenez à installer ce puissant outil pour auditer vos applications PHP.
Commentez

- Titre : Zoom sur Sonar, l'analyseur de code qualitatif, ici avec php

- Auteur : imikado

- Parution : 16 juin 2013

- Mise à jour : 16 juin 2013

- Public visé :

- Licence : Copyright ® 2013 imikado. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Préambule

- I-A. Présentation

- I-B. Résultats attendus

- I-B-1. Variable non utilisée

- I-B-2. Paramètre non utilisé

- I-B-3. Code non exécutable

- I-B-4. Condition vide

- I-B-5. On peut voir les sources à tout moment

- II. L'installation

- II-A. Le serveur Sonar

- II-B. Installons le support du PHP

- II-C. La partie « runner »

- III. Paramétrage de l'analyse

- IV. Paramétrage du projet

- V. L'analyse

- VI. Créer son profil de paramétrage

- VII. Le mieux est l'ennemi du bien

- VIII. Conclusion

- IX. Remerciements

I - Préambule

I-A - Présentation

Sonar est un outil d'analyse qualitative de code, à l'origine créé pour Java, il supporte depuis bien d'autres langages (C, C++,C#, JavaScript, Python…) et notamment PHP qui va nous intéresser ici.

Cet outil permet entre autres de détecter des erreurs d'inattention telles que des variables oubliées, des paramètres de fonction inutilisés, ou encore des parties de codes qui ne s'exécutent jamais.

À l'issue de ce tutoriel, vous serez capable d'installer et de configurer Sonar pour analyser un projet PHP au sein d'un environnement GNU/Linux comme Debian ou Ubuntu.

I-B - Résultats attendus

Pour vous donner une idée de ce que Sonar peut faire, voici quelques exemples d'analyse concrets.

I-B-1 - Variable non utilisée

I-B-2 - Paramètre non utilisé

I-B-3 - Code non exécutable

I-B-4 - Condition vide

I-B-5 - On peut voir les sources à tout moment

II - L'installation

II-A - Le serveur Sonar

Il existe deux moyens d'installer Sonar (en téléchargeant les archives, ou via le gestionnaire de paquets).

Nous choisirons ici la seconde solution (plus simple).

Nous commençons par ajouter le dépôt de Sonar à notre fichier /etc/apt/sources.list :

deb http://downloads.sourceforge.net/project/sonar-pkg/deb binary/

Mettons ensuite à jour notre cache (pour prendre en compte ce nouveau dépôt) :

sudo apt-get update

Installons ensuite le paquet sonar :

sudo apt-get install sonar

Lançons ensuite celui-ci :

sudo /etc/init.d/sonar start

Rendez-vous à l'adresse http://localhost:9000 (il faut attendre quelques instants avant que l'URL ne soit accessible : le temps que Sonar ai fini de démarrer).

Sur le site d'ubuntu, ils conseillent de choisir le téléchargement de l'archive à l'adresse suivante : https://www.sonarqube.org/downloads/

II-B - Installons le support du PHP

sudo /etc/init.d/sonar restart

Le plugin PHP pour Sonar nécessite l'installation de librairies PHP pour pouvoir fonctionner :

Installons d'abord PEAR :

sudo apt-get install php-pear

Mettons-le à jour :

pear upgrade pear

Ajoutons-y les dépôts nécessaires pour cet article :

pear channel-discover pear.phpunit.de
pear channel-discover pear.symfony-project.com
pear install phpunit/PHPUnit-3.5.5

Installons PHPDepend :

pear channel-discover pear.pdepend.org
pear install pdepend/PHP_Depend-1.0.3

Installons PHPMD :

pear channel-discover pear.phpmd.org
pear install --alldeps phpmd/PHP_PMD-1.3.2

Et enfin, PHP CodeSniffer :

pear install PHP_CodeSniffer1.3.2

Une fois toutes ces dépendances installées, ouvrez votre navigateur à l'URL http://localhost:9000.

Cliquez sur « Log in » et authentifiez-vous avec le couple admin/admin :

Puis cliquez sur le lien « configuration » (en haut), puis « Update Center » dans le menu de gauche :

Cliquez sur l'onglet « available plugins » :

Cliquez sur « php » puis sur le bouton « install » :

Vous devez ensuite redémarrer Sonar pour terminer l'installation de l'analyseur PHP.

II-C - La partie « runner »

La partie « serveur » est installée, il nous faut désormais installer le « runner » (la partie qui analysera le code).

Téléchargez l'archive du runner à l'adresse http://www.sonarsource.org/downloads/ et décompressez l'archive dans le répertoire bin de votre home et renommez-le en sonarrunner (/home/mika/bin/sonarrunner).

III - Paramétrage de l'analyse

En retournant sur http://localhost:9000, après s'être authentifié en tant qu'admin, retournons dans la rubrique « configuration ».

Cette page est le tableau de bord de l'application.

Sonar fonctionne avec des règles à paramétrer. Par défaut, il est livré avec une série de profils déjà paramétrés, vous avez également la possibilité de créer vos propres profils (on y revient après).

IV - Paramétrage du projet

Dernière étape : paramétrer le projet à analyser.

Créez un fichier sonarproject.properties dans le répertoire de l'application PHP à analyser.

Ce fichier ressemble à ceci :

# required metadata
sonar.projectKey=my:project
sonar.projectName=My project
sonar.projectVersion=1.0
# path to source directories (required)
sources=srcDir1,srcDir2
# path to test source directories (optional)
tests=testDir1,testDir2
# path to project binaries (optional), for example directory of Java bytecode
binaries=binDir
# optional commaseparated list of paths to libraries. Only path to JAR file and path to directory of classes are
supported.
libraries=path/to/library.jar,path/to/classes/dir
# Uncomment this line to analyse a project which is not a java project.
# The value of the property must be the key of the language.
#sonar.language=cobol

Par exemple : ici on va tester le code des librairies PHP du mkframework, on va créer ce fichier dans le répertoire du framework dans /home/mika/www/mkframework/

sonar.projectKey=my:mkframework
sonar.projectName=mkframework
sonar.projectVersion=1.0
# path to source directories (required)
sources=lib/framework
# Uncomment this line to analyse a project which is not a java project.
# The value of the property must be the key of the language.
sonar.language=php
sonar.phpUnit.skip=true

Note : j'ai désactivé la vérification de phpUnit, car je ne l'utilise pas pour mes tests unitaires.

V - L'analyse

Il n'y a plus qu'à lancer l'analyse à partir du répertoire où est situé le fichier sonarproject.properties.

cd /home/mika/www/mkframework/
/home/mika/bin/sonarrunner/bin/sonarrunner

L'analyseur va tourner pendant un bon moment, une fois qu'il aura terminé, vous pourrez retourner sur la page web de Sonar.

Sonar va vous informer des variables, fonctions ou méthodes non utilisées, de quelques erreurs de conceptions, identifier les méthodes jugées complexes… en somme vous analysez votre code en vous permettant de l'améliorer.

Libre à vous de prendre en compte ou non ces remarques.

VI - Créer son profil de paramétrage

En plus de pouvoir basculer entre les différents profils proposés (Sonar Way, Zend…), vous pouvez créer votre propre profil.

Tout l'intérêt de Sonar est là : toutes les règles disponibles ne sont pas forcément pertinentes pour votre projet ou votre usage.

Saisissez le nom de votre profil :

Cliquez sur votre profil qui apparaît désormais dans la liste.

Ici vous avez un bloc de recherche permettant de filtrer les différentes règles disponibles.

Une fois vos recherches lancées, vous n'avez plus qu'à cocher les règles qui vous intéressent (pas besoin de sauvegarder).

Ainsi vous pourrez à présent lancer Sonar sur votre profil, le plus simple étant de définir votre profil en tant que profil par défaut.

VII - Le mieux est l'ennemi du bien

Attention à une chose : en voulant bien faire, souvent on a tendance à choisir la facilité.
Vous trouvez qu'une méthode est trop longue et vous vous dites « ok je vais la scinder en deux » mais Sonar va lever une alerte. De fait, corriger certaines alertes peut paradoxalement faire baisser la note du projet, car ces corrections peuvent apporter davantage de complexité au projet.

Il vous appartient de trouver un compromis acceptable entre la qualité de votre code et ses performances.

VIII - Conclusion

Vous avez pu apprécier ici les subtilités qui font le charme de cet outil très puissant qu'est Sonar.

C'est un outil de qualité qui prouvera son utilité lors de toutes les étapes de vos projets. Il vous permet de vous assurer du respect des bonnes pratiques de programmation dans votre code et vous aide à y faire le ménage en vous facilitant l'identification de variables ou de traitements inutiles.

Je l'utilise régulièrement pour auditer le code de mon framework personnel (le mkframework) ce qui me permet d'avoir un avis objectif sur la qualité de mon code.

IX - Remerciements

Pour ce tutoriel, je souhaite remercier f-leb pour sa correction orthographique , Benjamen Delespierre pour sa validation technique, Deepin pour sa gestion et Zoom61 pour son soutien.