SonarQube ! Où comment tester (et améliorer!) la qualité de votre code en 15min !

16/11/2018

Aucun commentaire

Introduction

Savez-vous ce qui peut mettre en rogne un(e) développeur(se) informatique ? Qu’on ose critiquer son code ! Vous en connaissez un(e) ? Mettez-le/la à l’épreuve en lui suggérant d’analyser la qualité du code d’un de ses projets avec un outil devenu incontournable : je parle de SonarQube. Mais rassurez le/la en n’omettant pas de lui signaler que cet outil n’est pas seulement là pour lui dire : “ton code n’est vraiment pas terrible…”.

En effet, SonarQube va aussi pouvoir lui suggérer des bonnes pratiques à respecter et ainsi améliorer considérablement la qualité de son code.

SonarQu…oi ?

SonarQube est un logiciel open-source développé par la société SonarSource. Il permet de mesurer la qualité de votre projet de plusieurs façons.

Qu’est-ce qu’on peut faire avec ?

  • Respect des règles et normes du code
  • Documentation du code
  • Analyse des tests unitaires (couverture du code, etc.)
  • Duplication du code
  • Vulnérabilités potentielles (par degré d’importance : mineure, majeure, bloquante)
  • Génération de rapports
  • Compatibilité avec GitLab et GitLab CI (pour de l’intégration continue.. oui, oui !!)

Et comment ça fonctionne ?

SonarQube comprend en fait “deux sous-applications” :

  • un moteur d’analyse (le scanner) : installé localement sur la machine du développeur.
  • un serveur centralisé : pour la conservation des enregistrements et la création de rapports.

Une seule instance de serveur SonarQube est capable de prendre en charge plusieurs scanners, ce qui vous permet de centraliser les rapports sur la qualité du code provenant de nombreux développeurs en un seul endroit.

Remarque : je ne suis aucunement affilié avec SonarSource. Mais j’ai choisi de vous présenter cet outil puisqu’il offre la possibilité de couvrir énormément de langages (plus de 25) comme le C, C++, C#, PHP, Javascript ou Java. D’autre part, SonarQube sait s’adapter à la version de votre langage et est ainsi capable de vous signaler du code déprécié…

 

Vous vous demandez toujours pourquoi il est primordial d’avoir un code de qualité ?

Un code de qualité facilitera la maintenance de votre projet. Votre code sera plus modulaire et beaucoup plus exploitable si d’autres développeurs devaient se charger de reprendre votre fardeau flambeau. En plus, vous réduisez le risque de “bogues” et vous augmentez les performances de votre solution (plus de duplication de code, plus de code inutile, plus de code déprécié, etc.). Bref, votre code sera “tout propre et en bonne santé”. Prenez soin de votre code, il le mérite… Vous pourrez alors frimer avec vos collègues en sous-entendant que SonarQube n’y est pour rien et que seul votre talent est la conséquence de ce travail irréprochable…

Installation de SonarQube : voyons à quel point votre code est moche…

Dans ce qui va suivre, je vous propose de monter un environnement SonarQube localement sur votre machine pour tester rapidement (et facilement!) la qualité de votre code. Pour cela, nous allons déployer un serveur SonarQube et utiliser un scanner pour analyser notre mine d’or et créer des rapports.

Et parce que nous aimons la facilité, je vous propose d’utiliser Docker. Je parlerais de Docker dans un prochain article, mais ce n’est pas le sujet d’aujourd’hui. En attendant, je vous suggère de visiter ces liens très intéressants si vous n’êtes pas familier avec Docker :

https://www.wanadev.fr/23-tuto-docker-comprendre-docker-partie1/

https://www.wanadev.fr/24-tuto-docker-demarrer-docker-partie-2/

Étape 1 : installez Docker

Pour MacOs : https://www.docker.com/products/docker-desktop

Pour Windows : https://store.docker.com/editions/community/docker-ce-desktop-windows

Pour Ubuntu & Debian, tapez cette commande dans votre terminal :

curl https://releases.rancher.com/install-docker/18.03

Étape 2 : installez SonarQube Community et lancez-le

Dans votre terminal, tapez les 2 commandes suivantes :

docker pull sonarqube
docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 sonarqube

Vous pouvez maintenant accéder au serveur SonarQube et consulter l’interface sur http://localhost:9000. (ça peut durer quelques secondes avant de pouvoir accéder à l’interface…)

Facile, non ?

Vous pouvez vous connecter en utilisant le couple admin/admin.

Étape 3 : configurez l’analyse de votre projet

A la racine de votre projet, créez un fichier sonar-project.properties et copiez-y le contenu suivant :

# Doit être unique dans l'instance SonarQube
sonar.projectKey=votre_clé_unique

# Le nom et la version affichés dans l'interface SonarQube
sonar.projectName=MonProjet
sonar.projectVersion=1.0

# Le chemin relatif aux fichiers que vous vous souhaitez analyser dans votre code

sonar.sources=src

# Cas d'un projet utilisant composer. 
# On ignore l'analyse du code présent dans les dépendances.

sonar.exclusions=vendor/**

# Encodage du code source.
sonar.sourceEncoding=UTF-8

Étape 4 : lancez le scanner 

Dans votre terminal, dirigez-vous à la racine de votre projet et tapez la commande suivante :

docker run -ti -v votre_chemin_projet/:/root/src --link sonarqube newtmitch/sonar-scanner

Remarque : pensez à renseigner votre chemin après le flag -v. De plus, il est possible que cette commande ne fonctionne pas sous Windows. J’ai (seulement) testé sur Ubuntu et MacOs X.

Étape 5 : consultez le rapport généré

Lorsque vous voyez “ANALYSE RÉUSSIE”, vous pouvez retourner sur l’interface de SonarQube (http://localhost:9000). Vous pouvez constater que votre projet a bien été analysé. Cliquez dessus, et admirez le résultat.. ou pas !

Peu importe le résultat obtenu, restez calme.. Allez vous faire un café, prenez un bon bol d’air, et revenez sur votre poste informatique. Laissez-moi deviner, vous avez du pain sur la planche, non ?

Il y a d’autres écrans qui montrent des détails plus exploitables. Nous n’allons pas rentrer dans l’explication détaillée de chaque écran proposée par l’interface de SonarQube car je trouve qu’ils sont facilement compréhensibles. Voyons simplement un exemple d’interprétation :

Cet écran vous propose une visualisation d’ensemble de votre code analysé. Plus la couleur d’une bulle est proche de rouge, plus les “bogues” sont graves. La taille de la bulle indique le volume du bogue, alors que la position verticale de chaque bulle indique le temps estimé pour traiter les bogues. Magique, non ? Bon, en ce qui me concerne, cet écran ne m’indique rien de bien rassurant pour mon code.. Et vous ?

Conclusion

Sachez qu’il existe d’autres moyens d’utiliser SonarQube avec et sans Docker. Personnellement, je vois un réel intérêt d’utiliser SonarQube dans un processus d’intégration continue. Installez une instance de SonarQube sur l’un de vos serveurs et installez le scanner sur chaque poste de dev. Puis, en utilisant GitLab (on en reparlera plus en détails prochainement), vous pourrez vérifier que, lors de chaque commit, votre code n’est pas “trop moche” et qu’il peut être déployé sans risques…

SonarQube vous propose énormément de fonctionnalités. J’espère donc que cet article vous donne envie de creuser un peu plus sur le sujet.

Dans mon prochain article, on parlera de “containers d’applications virtualisés” avec Docker pour vous faciliter encore plus la vie ! Ne me remerciez pas c’est pour moi et c’est cadeau !

Pour teaser un peu, docker c’est ça :