Article écrit par Raymond Hier
Qu’est-ce que SonarQube ?
Les développeurs qui tentent tant bien que mal à délivrer leurs fonctionnalités en temps et en heure font souvent des compromis sur la qualité de leur code. Ils préfèrent livrer leurs fonctionnalités dans les temps et revenir plus tard dessus pour faire du refactoring du code lorsqu’ils auront plus de temps. Ces fonctionnalités peuvent contenir des variables inutilisées, de la duplication de code ou d’autres codes inutiles, mais cela n’impacte en rien la partie fonctionnelle du livrable. Afin d’éviter ces problèmes, ils existent des bonnes pratiques à appliquer lors des phases de développement, qui permettent d’éviter d’avoir des erreurs ou du code trop complexe.
Néanmoins, il est difficile pour les programmeurs de s’y tenir rigoureusement et tout le temps pour diverses raisons. Ces erreurs sont généralement mises en évidence lors de la revue de leur code par le chef de projet technique ou par exemple, un collègue lors d’un pull request. Cela reste cependant compliqué de détecter toutes les erreurs et les potentielles vulnérabilités lors d’une revue de code, car il peut avoir énormément de lignes de code à relire et en plus de leur charge quotidienne, cela peut prendre énormément de temps.
Même si cela reste indispensable, la revue de code “manuelle” peut être insuffisante. On peut l’associé à un analyseur statique de code comme SonarQube.
Un analyseur statique de code est une procédure qui analyse le code source afin de prévoir son comportement lors de l’exécution sans réellement l’exécuter. Il permet d’anticiper les erreurs, les vulnérabilités de sécurité ou tout simplement, des problématiques concernant la maintenabilité du code telle que la duplication de code.
SonarQube est un analyseur statique de code qui est devenu incontournable depuis quelques années. SonarQube est un logiciel open-source développé par SonarSource qui permet de faire une analyse de la qualité du code de façon continue afin de contrôler et de pousser à écrire du code plus fiable et plus lisible. Il est écrit en Java, mais il peut analyser du code de 29 langages de programmation différents.
Ce logiciel permet de vérifier le code source soumis par le développeur dans le but de faire un contrôle de qualité très poussé. Sonar couvre les 7 axes de la qualité d’un code :
- Architecture et le design qui assure la maintenabilité, la sécurité et la maintenabilité
- Les potentiels bugs
- Le respect des standards de nommage comme pour le nom des variables ou des règles de codage par exemple
- Le taux de duplication de code présent sur le projet pouvant être modifié
- Le taux de couverture du code par les tests unitaires
- La documentation du code avec des informations sur les commentaires
- La complexité du code à comprendre dans le futur par un développeur et qui peut entraîner une erreur à l’avenir
De plus, SonarQube nous rend la tâche facile en agissant comme un gestionnaire de qualité en générant des rapports de qualité qui sont stockés dans la base de données du serveur Sonar. Ces rapports sont fort utiles dans le cadre de projets où la qualité est très attendue par le client et peut être utile lors des présentations. De plus, on peut également suivre l’évolution de la qualité du projet dans le temps et les progrès réalisés par l’équipe de développeurs. Enfin, ces informations peuvent être utiles pour le chef de projet afin de trouver des solutions pour améliorer la qualité du livrable et la productivité au sein de l’équipe. Le rapport est affiché sur un tableau de bord intuitif qui renseigne toutes les informations importantes.
Pour l’utiliser, il suffit de le télécharger puis renseigner ses identifiants ldap, pour accéder au sonar de chez Ouidou. Ensuite, il vous reste plus qu’à renseigner votre projet pour suivre l’évolution de sa qualité. Vous pouvez également l’inclure directement sur votre IDE. par exemple sur Eclipse, sur le marketplace, en téléchargeant SonarLint et s’être connecté au SonarQube de Ouidou, on peut avoir les recommandations de SonarQube en temps réel sur notre code.
Architecture de SonarQube
Ce schéma correspond à l’architecture de la plateforme SonarQube. Il contient 3 composants majeurs séparés qui sont nécessaires. Dans l’ordre d’exécution lors de l’analyse, on retrouve :
- Le SonarScanner accède au code source, notamment à travers les outils de build comme Maven, Ant et Gradle. Après avoir récupéré le code source, il récupère dans un fichier de configuration, les informations nécessaires pour pouvoir faire la liaison avec le SonarQube Server. Le SonarScanner est indépendant du SonarQube Server. Par exemple, ce scanner peut être intégré à Jenkins en installant le plugin correspondant et en configurant notre Jenkins afin de le relier au SonarQube serveur. On notera toutes les informations sur la configuration directement sur les fichiers de configuration de Jenkins, ce qui permettra de lancer l’analyse de SonarQube directement à travers Jenkins lors d’un build. On peut voir que SonarQube peut facilement s’intégrer dans le cadre de l’intégration continue.
- Le SonarQube Server comporte des règles de programmation liée à un langage particulier parmi ceux proposés par le logiciel. Ce sont souvent les bonnes pratiques déterminées par des développeurs d’expériences qui sont cataloguées sous forme de règles. Par défaut, Sonar propose le profil Sonar way qui implémente une partie des règles pour chaque langage, mais il est possible de créer son propre profil et choisir soi-même les règles à implémenter. Ces règles sont téléchargées par le SonarScanner pour ensuite effectuer l’analyse. Par la suite, ce serveur comporte également une interface graphique très intuitive qui met en avant les statistiques sous forme de tableaux de bord et offre la possibilité de consulter le détail des différents critères.
- Une base de données SonarQube où l’on stocke les différents rapports des analyses effectuées par le SonarScanner avant d’être affiché sur l’interface graphique. Cette base de données permet de consulter l’évolution des indicateurs à différentes périodes du projet.
Ce schéma explique la phase d’analyse effectuée par le SonarScanner sur le code source. C’est le sonar analyzer qui s’occupe de cette tâche et détecte les problèmes techniques du code. Il implémente des plugins tels que :
- PMD qui recherche du code inutile. Il inclut les blocs de code vide, les variables non utilisées ou l’utilisation sans intérêt des Strings ou StringBuffers.
- Checkstyle examine le style du code source et vérifie textuellement le code en vérifiant la longueur du code ou si le code respecte bien les standards de nommage.
- FindBugs est un logiciel libre d’analyse statique de bytecode Java qui est utilisé sous forme de plugin avec SonarQube. Son objectif est de retrouver des bugs dans le code source en identifiants des patterns reconnus.
- Clover (ou encore Cobertura ou JaCoCo) permet de mesurer de la couverture de code par les tests unitaires. Il est très utile pour bien cerner les zones dans lesquelles le code n’est pas assez bien testé.
- Squid est un projet interne à SonarSource qui est intégré à SonarQube et qui tend à remplacer les plugins PMD et Chekstyles. En effet, il vise à contrôler le code inutile, la façon de coder comme ces plugins et aussi, s’occupe, des commentaires de texte pour nous fournir des statistiques sur les lignes de code.
Enfin, après cette analyse, les données sont stockées dans la base de données Sonar puis, sont ensuite affichées sur son interface graphique.
Les avantages de SonarQube dans un projet
Suite à cette analyse, on retrouve des informations exploitables dans la base de données qui sont affichées sur l’interface graphique. On peut voir que la page est divisée en plusieurs catégories distinctes qui forment notre rapport de qualité :
- La fiabilité du code est représentée par le nombre de bugs potentiels trouvés lors de l’analyse. Cela correspond à des erreurs qui sont contradictoires avec les spécifications de Java comme par exemple, des boucles infinies. Sonarqube met en évidence les fichiers contenant le plus de bugs.
- La sécurité du code comprend les vulnérabilités et des parties de code sensible en terme de sécurité. Pour les vulnérabilités, on retrouve les problèmes tels qu’un mot de passe facilement accessible ou affiché sans raison ou tout simplement, des champs statiques qui n’ont pas lieu d’être qui peuvent être facilement exploitable par des hackers. Les vulnérabilités doivent être corrigé sur le champs. Les Security Hotspot sont des zones qui requiert une revue de code manuelle car ce sont des parties de code sensible qui pourraient être considérées comme une vulnérabilité. Le développeur pourra ensuite faire le choix de sécuriser cette zone ou non.
- Les statistiques sur la maintenance du code sont très utiles en matière de gestion de projet. En effet, cela indique le niveau de complexité du code et donc, la difficulté à le maintenir stable à l’avenir. Plus la statistique sur le code smell est élevée, plus il est nécessaire de revérifier s’il n’y a pas une façon plus simple de coder la fonction en question.
- La couverture du code par test unitaire est importante dans le cas de projet important où la qualité du code est primordiale. Les tests sont nécessaires pour simuler le comportement de l’application selon les différents cas de figure possible lors de la mise en production et éviter que l’application plante à cause d’un cas de figure non envisagée.
- La duplication de code est importante à contrôler, car il permet de produire un code plus lisible et plus fiable. De plus, il est plus facile à maintenir lorsqu’il n’y a pas de duplication de code.
Ces données sont jaugées par des critères fixés par défaut par SonarQube nommé Sonar way. Par exemple, l’application doit avoir un score de plus de 80% de zone couvert par les tests unitaires ou sinon avoir moins de 10 bugs. Il est possible de créer nos propres conditions pour valider le projet selon nos critères de qualité dans la section Quality Gates. Les notes s’étendent de A à E et Sonar utilise un code couleur qui s’étend de vert à rouge selon le résultat de l’analyse par rapport aux critères fixés en amont. À la fin, il indique “Passed” si le projet atteint la plupart des critères des qualités fixés, sinon il est déclaré comme “Failed”.
En conclusion, les informations, fournies par SonarQube, sont très appréciées par les entreprises. Les avantages fournis par cette plateforme sont nombreux :
- Détecte les erreurs le plus tôt possible et permet de le corriger rapidement avant de passer à la tâche suivante ou de le déployer pour la mise en production. Il permet aussi d’indiquer les zones du code qui ne sont pas encore couvertes par les tests unitaires.
- Améliore de façon significative, la durabilité du projet en réduisant sa complexité, la duplication de code et en détectant les potentiels bugs. Il permet aussi d’avoir un code propre, lisible et facilement maintenable.
- Il agit comme un outil de gestion de qualité avec ses indicateurs et son tableau de bord qui nous indique les points importants à prendre en compte pour la qualité du code source. La gestion de la qualité de code prend une place importante dans le projet.
- S’inscrit aisément dans la chaîne de développement de l’entreprise, car il n’y a pas de nombre limité de projets pouvant être soumis à ses analyses.
- Améliore la productivité de l’équipe en les poussant à coder de la meilleure manière possible, ce qui permet, par la suite, d’avoir du code moins complexe et plus simple à maintenir. Cela permet d’éviter de perdre du temps sur du refactoring très tard dans le projet. De plus, cela aide le chef de projet à suivre la qualité du code fourni au client.
- Il permet aux développeurs de progresser en recevant régulièrement des retours sur la manière dont ils ont écrit leurs codes et à apprendre les bonnes pratiques en apprenant de leurs erreurs. SonarQube aide les développeurs à comprendre la qualité de leur code et garanti la transparence de leur code.
Conclusion
SonarQube est un analyseur de code statique populaire pour les projets informatiques. Il peut gérer du code écrit dans plus de 25 langages de programmation (Java, C++, Kotlin, etc). Il garantit du code de qualité en évaluant le code sur de nombreux critères comme la sécurité, les potentiels bugs ou de la duplication de code.
Son architecture permet à SonarQube d’agir comme un gestionnaire de qualité pour le code source en stockant les analyses dans une base de données interne et affiche les données sur son interface graphique facile à lire et à comprendre. Ces données sont récupérées grâce à SonarScanner qui analyse de façon très précise notre code source à l’aide de ces plugins et un catalogue de règle fournit par Sonar. Ce scanner peut être intégré au processus d’intégration continue.
Ensuite, on peut exploiter ces données en consultant la page web du serveur où l’on retrouve les données de l’analyse pour améliorer la qualité du code, mais aussi la productivité et les compétences des développeurs de l’équipe.
SonarQube est un outil très complet, mais malgré tout cela reste des bonnes pratiques qui sont parfois contraignantes. Il faut bien connaître les spécifications de notre application en tête pour bien analyser les statistiques fournies par ce logiciel et décider ce qui est utile ou non de corriger.
Sources
https://www.loginradius.com/blog/engineering/agile-development-team/
https://www.codeusingjava.com/sonar/sonarqube-architecture
https://www.vizteck.com/post/benefits-of-using-sonarqube-for-code-reviews