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 ▲
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 mkframeworkMkFramework, 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 mkframeworkmkFramework) ce qui me permet d'avoir un avis objectif sur la qualité de mon code.
IX. Remerciements▲
Pour ce tutoriel, je souhaite remercier f-lebf-leb pour sa correction orthographique , Benjamen DelespierreBenjamen Delespierre pour sa validation technique, DeepinDeepin pour sa gestion et Zoom61Zoom61 pour son soutien.