Categorie planetubuntu > zoom sur Sonar, l'analyseur de code, dans le cas du Php

zoom sur Sonar, l'analyseur de code, dans le cas du Php

2013-05-09

J'avais précédemment parlé de sonar dans l'article Comment personnaliser son (x)ubuntu pour un développeur web, j'y consacre un article sur cet outil bien utile.

Introduction

Sonar est un outil d'analyse qualitative de code, à l'origine créé pour du java, il permet depuis d'y installer des plugins pour gérer beaucoup de langages (C, C++,C#,Javascript,Python...) et notamment php qui va nous interesser ici

L'installation

Il y a deux moyens d'installer sonar: le premier en téléchargeant les éléments sur le site, le second en passant par le gestionnaire de paquets (plus simple :)

Sonar n'étant pas dans les dépôts officiels d'Ubuntu, vous ne devez l'installer qu'en connaissance de cause.

Nous commençons par ajouter le dépot de sonar "deb http://downloads.sourceforge.net/project/sonar-pkg/deb binary/" à notre fichier /etc/apt/sources.list (sans les guillemets)

Mettez ensuite à jour votre cache (pour prendre en compte ce nouveau dépot)

  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 localhost:9000 (il faut attendre une bonne quelques instants avant que l'url ne soit accessible (le temps que sonar ai fini de démarrer)

Installons le support du PHP

Ouvrez votre navigateur sur http://localhost:9000

Cliquez sur "log in" et authentifiez vous avec le couple admin/admin,

  • cliquez sur le lien "configuration"

    cliquez sur l'onglet available plugins

    cliquez sur "php" puis sur le bouton "install"

    Sonar nécessite un redémarrage pour prendre en compte PHP

     sudo /etc/init.d/sonar restart 

    La partie php nécessite l'installation d'outil 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 

    PHP CodeSniffer

     pear install PHP_CodeSniffer-1.3.2 

    La partie serveur est installée, il nous faut désormais installer le "runner" (la partie qui analysera le code)
    Télécharger l'archive du runner et décompressez-la dans un de vos répertoires, par exemple nous créerons ici le répertoire bin (dans notre répertoire home) et nous le renommons en sonar-runner ( /home/mika/bin/sonar-runner)

    Paramétrage de l'analyse

    En retournant sur localhost:9000, après s'être logué en tant qu'admin, on refait un tour dans la rubrique "configuration"

    Sonar fonctionne avec des règles à paramétrer, par défaut l'outil vient avec une série de "profile" déjà paramétré, vous avez également la possibilité de créer votre propre profil (on y revient après)

    Paramétrage du projet

    Il reste une dernière étape avant de lancer l'analyse: le paramétrage de celui-ci pour le projet à analyser.
    Créer un fichier "sonar-project.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 comma-separated 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 ;)

    L'analyse

    Plus qu'à lancer l'analyse à partir du répertoire où est situé le fichier sonar-project.properties

     
    cd /home/mika/www/mkframework/ 
    /home/mika/bin/sonar-runner/bin/sonar-runner 

    L'analyzer 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/méthodes non utilisées, de quelques erreurs de conceptions, identifier les méthodes jugées complexes... en clair vous analyser votre code en vous permettant de l'améliorer

    Libre à vous de prendre en compte ou non ces remarques :)

    Créer son profil de paramétrage

    Déjà que vous pouvez switcher entre les différents profils proposés (sonar way,zend...) vous pouvez en plus créer votre propre profil.

    Tout l'intérêt de sonar est ici: toutes les règles disponibles ne sont pas forcément pertinentes dans votre projet/pour votre société.

    Dans Sonar on peut créer des profils

    Saisissez le nom de votre profil

    Cliquez sur votre profil qui apparait désormais dans la liste

    Ici vous avez un block de recherche permettant de filtrer les differentes règles disponibles

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

    Ainsi vous pourrez à present lancer sonar sur votre profil, le plus simple étant de définir votre profil "par défaut"

    Avec Sonar, quelque fois le mieux est l'énemi du bien

    Attention à une chose: en voulant bien faire, souvent on à tendance à choisir la facilité: une méthode trop longue ? ok je vais la factoriser en deux, oui mais l'outil de contrôle de complexité va lever une alerte, tout ça pour dire que des fois avec sonar, en corrigeant des alertes, on se retrouve à diminuer sa note ;)

    Il ne faut alors pas se décourager et essayer plusieurs méthodes différentes pour arriver a obtenir un code toujours plus performant et le plus succint possible. :)

    Conclusion

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

    Je l'utilise personnellement régulièrement pour auditer le code de mon framework, cela permet d'avoir un "relecteur" objectif ;)

  • Commentaires

    comments powered by Disqus