SonarQube

Publié le 10/10/2022

SonarQube est un outil d'analyse de code. Contrairement aux autres solutions présentées ici, il s'agit plate-forme à part entière (et non d'une librairie PHP), qui se compose d'un client utilisé pour analyser le code source, et d'une interface web pour restituer les résultats. Elle peut d'ailleurs être utilisée avec de nombreux langages de programmation, comme Java, Python, ...

SonarQube

L'analyse recouvre un spectre assez large:

  • la sécurité: elle détecte les vulnérabilités et les failles de sécurité des librairies third-party utilisées dans le projet
  • la maintenabilité: apparaissent ici les méthodes avec une complexité cyclomatique élevée, ou les "codes smell"
  • l'analyse statique: sont remontées les variables non définies, etc
  • la couverture de code par les tests

On peut ainsi le voir comme un condensé de PHPStan, de fabpot/local-php-security-checker, le tout servi par une interface qui permet d'attribuer des tags et une criticité aux problèmes, de les assigner à un développpeur, de les commenter ou de les ignorer.

Gestion des problèmes

En outre, SonarQube propose plusieurs métriques intéressantes, comme une estimation du temps nécessaire pour réduire la dette technique, l'évolution ou la résolution des problèmes au fil des commits, des notes pour chaque catégorie. Bref, on est quasiment sur un outil de gestion de projet.

Installation & analyse locale avec Docker

On utilisera pour cela docker et la Community Edition de Sonarqube, qui est la version gratuite du produit.

Première étape, il s'agit de lancer le conteneur sonarqube:

docker run -d --name sonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9000:9000 --network=host sonarqube:latest

Rendez-vous ensuite sur l'interface http://localhost:9000, qui vous proposera de créer un projet, puis de générer un jeton d'authentification. Ce jeton et la clé du projet peuvent ensuite être utilisées pour scanner les sources de votre projet:

Créez ensuite un fichier sonar-project.properties à la racine du projet, permettant de configurer le scanner afin qu'il puisse envoyer les résultast de l'analyse au serveur:

sonar.projectKey=perso:projetsonar.projectName=Mon projetsonar.host.url=http://localhost:9000sonar.sources=./srcsonar.login=sqp_59699782e57b5ac2dcf6413d2b5cc5b31078415dfsonar.php.coverage.reportPaths=coverage.xml

Dernière étape, il s'agit de lancer le conteneur chargé de l'analyse du code source, le scanner:

docker run --rm  -v "$PWD:/usr/src" --network=host sonarsource/sonar-scanner-cli

Après l'analyse, retour sur l'interface, qui contiendra la liste des problèmes rencontrés:

Interface SonarQube

Utilisation en déploiement continu

SonarQube propose des intégrations pour les principales solutions de Continous Integration du marché: Github, GitLab, Bitbucket, Jenkins: https://docs.sonarqube.org/latest/analysis/ci-integration-overview/

Les alternatives

Symfony Insights

Symfony Insight propose le même genre d'analyses et est spécifique à Symfony, mais propose uniquement une version payante.