J’ai déjà travaillé avec sonar à une époque et j’ai beaucoup apprécié l’outil pour son efficacité. A présent, je l’intègre dans tous mes projets.
Installer sonar sur debian
- Rendez vous dans le fichier /etc/apt/source.list et copiez-y la ligne
deb http://downloads.sourceforge.net/project/sonar-pkg/deb binary/ - Lancez un sudo apt-get update puis un sudo apt-get install sonar
- Lancez le service avec sudo /etc/init.d/sonar start ou sudo service sonar start
- A présent, vous devez télécharger le runner de sonar: wget http://repo1.maven.org/maven2/org/codehaus/sonar/runner/sonar-runner-dist/2.4/sonar-runner-dist-2.4.zip
- Dézippez-le et placez-le dans le répertoire /opt/sonar/sonar-runner
- Créez un alias dans votre fichier .bashrc vous permettant de lancer le runner alias sonar-runner=’sh /opt/sonar/sonar-runner/bin/sonar-runner’
Configurer Sonar
- Rendez-vous sur http://127.0.0.1:9000
- Connectez-vous avec admin/admin (loupe Log in en haut à droite)
- Cliquez sur Administration > System > Update Center (url http://127.0.0.1:9000/updatecenter/installed)
- Cliquez sur l’onglet « Available » et choisissez d’installer le plugin php (et les autres plugins qui vous seront utiles, comme Jira, HTML, CSS, Java, Javascript, XML, etc.)
- Relancez sonar sudo service sonar restart
Installer les paquets nécessaires avec pear
- sudo apt-get install php-pear
- sudo pear upgrade pear
- sudo pear channel-discover pear.symfony-project.com
- sudo pear channel-discover pear.pdepend.org
- sudo pear channel-discover pear.phpmd.org
- sudo pear install pdepend/PHP_Depend-1.0.3
- sudo pear install –alldeps phpmd/PHP_PMD-1.3.2
- sudo pear install PHP_CodeSniffer
Installer phpunit
Si vous avez une version de serveur inférieure à PHP5.6, préférez la version 4.8.
- sudo wget https://phar.phpunit.de/phpunit-old.phar
- sudo mv phpunit-old.phar phpunit.phar
- sudo chmod +x phpunit.phar
- sudo mv phpunit.phar /usr/local/bin/phpunit
Créer un profil qualité
Rendez-vous dans « Quality Profile », et cliquez sur « create ». Choisissez le langage que vous désirez, validez.
Puis cliquez sur ce profil et sur « Change parent ». Sélectionnez le profil « sonar way », qui correspond à des règles très intéressantes en plus de celles du PSR-2. Le but de créer un profil sera de pouvoir supprimer/rajouter des règles comme vous le désirerez.
Créer un fichier sonar-project.properties
Ce fichier doit être créé à la racine de votre projet. Vous pouvez, selon le langage, vous appuyez sur les modèles ici ou, pour un projet PHP, ici.
Pour un projet symfony2, je vais écrire ceci:
# Required metadata sonar.projectKey=REST_BEHAT sonar.projectName=REST BEHAT sonar.projectVersion=1.0 # Comma-separated paths to directories with sources (required) sonar.sources=src # Language sonar.language=php # Encoding of the source files sonar.sourceEncoding=UTF-8 # If I want to exclude files or directories #sonar.exclusions=**/Tests/**,**/*Extension.php
Avec sonar.exclusions, je peux choisir d’exclure des répertoires entiers, ou seulement des fichiers dont le nom finit par Extension.php (par exemple)
Je me place à la racine de mon projet, et je lance sonar-runner.
Verdict
Ouch, 14 erreurs majeures et 8 mineures!
Voyons ça de plus près:
Ok, une variable inutile. Je devais sûrement l’appeler au début, et ensuite j’ai retiré le code tout en laissant la variable en paramètre. Pas bien!
Effectivement, les exceptions génériques, il vaut mieux éviter…
Et le code commenté aussi!
En effet, le code dupliqué est toujours mauvais, il aurait mieux valu créer une fonction getManager() qui retourne ce service, plutôt que de l’appeler trois fois dans la classe. My bad!
C’est Symfony qui l’a généré, mais en effet, de manière générale, si un constructeur ne fait qu’appeler son parent sans rien faire d’autre, il est simplement inutile.
Sachez que parfois, sonar trouve des erreurs curieuses. Il est possible de les déclarer comme étant des faux-positifs, et il les retire de l’analyse. J’espère que je vous ai donné envie de travailler avec sonar, un outil que je trouve complémentaire de sensio insight.