Afin d’avoir une meilleure visibilité sur les nombreux projets PHP en place, de fiabiliser au maximum la production et de poursuivre l’instauration de bonnes pratiques, j’ai installé sur notre environnement de développement l’outil SonarQube. Je n’ai que peu joué avec pour l’instant, mais sur les premières impressions je suis assez bluffé de ce qu’il remonte, et je pense que cela peut être un outil très intéressant à utiliser et à généraliser dans le cadre de projets de développements.

SonarQube Logo

Installation du serveur

L’installation de SonarQube est assez simple et bien décrite dans la doc ou en suivant ce lien (pour Ubuntu). En résumé, il faut créer une base de données vide avec un utilisateur affecté à cette dernière. Ensuite, il faut télécharger l’archive, l’extraire et modifier le fichier de configuration pour entrer les paramètres d’accès à la base de données.
Au besoin, vous pouvez également modifier le port utilisé par l’interface web (9000 par défaut) et si vous souhaitez un chemin d’accès au delà du nom du serveur. Ensuite il faut penser à déplacer le pilote jdbc dans le dossier extensions/jdbc-driver à partir de la racine d’installation de SonarQube.
De mon côté, j’ai eu après l’installation un problème pour lancer le service la première fois, mais tout simplement parce que j’avais fait une erreur dans le nom de la base dans le lien jdbc vers ma base MySQL.
A noter que l’outil n’est pas par défaut un service (et ne sera donc pas démarré avec l’OS), mais dans le lien d’installation que je vous donne plus haut vous aurez les petites manip à faire pour le lancer en tant que service.

Plugins

Il est possible d’ajouter au serveur un certain nombre de plugins. En administrateur vous pouvez accéder à la liste des plugins disponibles depuis votre installation, dans Settings…Système….Update center. J’ai de mon côté installé les plugins PHP, Javascript, CSS et Flex qui correspondent aux technos que l’on utilise dans nos développements. J’ai également installé le plugin LDAP pour pouvoir gérer la connexion via les comptes de l’Active Directory, mais je n’ai pas encore branche SonarQube sur l’AD.

Installation de l’outil d’analyse (sonar-runner)

Vous avez maintenant un serveur fonctionnel, vous pouvez commencer à analyser vos projets. Pour cela, il faut au préalable installer l’outil qui va permettre de scanner vos projets et de se connecter au serveur SonarQube pour enregistrer les données qu’il aura récolté. L’outil d’analyse se nomme sonar-runner et si vous êtes sur Ubuntu vous pouvez suivre ce lien pour avoir le détail de l’installation. Le paramétrage est très simple, il faut lui donner l’url de l’interface web, le lien jdbc et l’utilisateur pour la base de données.

Analyse d’un projet

Pour analyser un projet, il faut créer un fichier de configuration à la racine de ce dernier nommé « sonar-project.properties ». Vous avez un exemple dans la documentation officielle. Basiquement, cela revient à donner un nom et une clé au projet et le chemin vers les sources.

# must be unique in a given SonarQube instance
sonar.projectKey=my:project
# this is the name displayed in the SonarQube UI
sonar.projectName=My project
sonar.projectVersion=1.0

# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# Since SonarQube 4.2, this property is optional if sonar.modules is set.
# If not set, SonarQube starts looking for source code from the directory containing
# the sonar-project.properties file.
sonar.sources=.

# Encoding of the source code. Default is default system encoding
#sonar.sourceEncoding=UTF-8

Une fois ce fichier créé, il suffit d’appeler le sonar-runner depuis la racine du projet : sonar-runner (en ayant mis au préalable le chemin d’accès vers celui-ci dans les variables d’environnement.

Détail de l’analyse

Vous avez fait tourner le sonar-runner sur vos différents projets, vous allez maintenant pouvoir vous rendre sur l’interface web de SonarQube pour avoir le rapport sur la qualité du code. La page d’accueil va vous permettre d’avoir une visibilité globale sur vos projets. Tout est paramétrable via des widgets, de mon côté j’ai mis à gauche la liste des projets avec les indicateurs clés (nombre de lignes de code, date de dernière analyse, taux de duplication, nombre d’erreurs critiques et majeurs), à droite le schéma en bloc (avec les blocs symbolisant par taille le nombre de lignes de code, et la couleur du bloc dépendant de la couverture du code).
En cliquant sur un projet, vous pouvez ensuite avec le détail de la qualité de code de ce dernier. Là encore, tout est paramétrable par widget, de mon côté j’ai pour l’instant affiché les informations suivantes :

projet SonarQube

Dashboard d’un projet avec SonarQube

Vous avez ainsi des pavés qui vous donnent en informations :

  • le nombre de lignes de code, avec la division par fichiers, dossiers, fonctions, classes
  • le taux de duplication global, et la répartition de la duplication en lignes, blocs et fichiers
  • la complexité du projet qui utilise les métriques de McCabe
  • les erreurs classées par gravité (critiques, majeures, mineures, info) et une estimation de la dette technique
  • le top des erreurs les plus fréquentes
  • l’historique des analyses
  • la classification des erreurs constatés (maintenabilité, portabilité, sécurité, utilisabilité…)
  • et tout un certain nombre de widgets que vous pourrez arranger à votre sauce pour vous faire le tableau de bord idéal

Au sujet des erreurs, vous pourrez plonger dans les règles pour les aménager aussi à votre convenance pour changer au besoin le niveau de gravité (ou intégrer des standards de développement qui vous seraient propres) via l’onglet « Quality profiles ».

La plupart des éléments que vous allez trouver dans les widgets sont cliquables et vous permettent d’avoir du détail.

Pour la duplication par exemple, vous allez pouvoir cliquer pour descendre au niveau des fichiers concernés, et en cliquant sur un fichier vous allez voir apparaître le code, avec une barre orange sur le côté pour du code dupliqué. En cliquant sur cette barre orange, vous aurez du détail sur la duplication (les numéros de ligne si c’est une duplication d’autres lignes dans le même fichier, ou une référence au fichier contenant les mêmes lignes) comme sur la copie d’écran ci-dessous :

duplication de code SonarQube

Détail sur la duplication de code avec SonarQube

Pour les erreurs, c’est la même chose. En cliquant sur le nombre d’erreurs, vous aurez le détail que vous pourrez afficher, filtrer par langages ou d’autres critères comme ici :

erreurs avec SonarQube

Liste d’erreurs avec SonarQube

En cliquant sur une erreur vous aurez la ligne de code concernée surlignée, avec la possibilité via les « … » d’avoir la documentation sur l’erreur et des exemples de code permettant de comprendre ce correspond à la règle de ce qui ne correspond pas.

Automatisation de l’analyse

Ce que vous pouvez souhaiter maintenant c’est que l’analyse de code soit jouée régulièrement de façon automatique.
Pour l’instant, j’ai programmé un scan régulier de mes différents projets via un cron, mais il est possible de faire beaucoup mieux. Je viens de faire un essai rapide avec Jenkins qui permet de surveiller un dépôt Git (voir à ce sujet l’article sur Git et SourceTree). Du coup, il est possible de demander à Jenkins de surveiller le dépôt Git de façon régulière et de lancer une analyse SonarQube lorsque le dépôt à bougé (il existe un plugin SonarQube dans Jenkins). SonarQube permet aussi à des utilisateurs d’être notifié par mail lorsque des erreurs sont constatés. Bref, mettre en place une chaîne intéressante, cela fera l’objet d’un article sur ce site un peu plus tard.