Déterminez votre dette technique à l’aide de SonarQube : 2 - Analyse Statique

Nov 2, 2016

TL ; DR

L’analyse statique ça permet de comprendre les faiblesses du code en se basant sur un ensemble de règles. On peut réaliser ça côté serveur de manière automatisée ou bien depuis l’IDE.

Introduction à l’analyse statique

Le principe de l’analyse statique est de se baser sur des ensembles de règles plus ou moins complexes qui vont détecter des modèles dans le code qui sont problématiques et catégoriser leur important ainsi que proposer une résolution.

Quelques exemples :

  • Des méthodes non statiques travaillant avec des champs statiques peuvent poser des problèmes de concurrence (thread safety).

  • Des expressions booléennes trop complexes modifiées plusieurs fois ne veulent peut-être plus rien dire et introduisent peut-être des comportements erratiques dans le programme.

Il existe deux grandes familles d’analyse statique celles dites centralisées ou automatisées, c’est-à-dire qu’elles vont généralement s’effectuer après que le code ait été poussé sur le contrôle de code source.

Ces analyses sont effectuées en général lors de votre intégration continue depuis vos serveurs de build afin que les développeurs soient libres d’effectuer autre chose durant cette période et ainsi de maximiser la productivité de vos équipes.

L’autre famille est celle que l’on appellera intégrée, c’est-à-dire qu’on aura une analyse en temps réel ou presque quand le développeur code. Par exemple resharper, les analyzers roselyn etc. Cela évite de pousser du mauvais code sur le contrôle de code source et d’avoir à le corriger ensuite.

Note : dans certains scenarios on pourrait parfaitement mettre en place du « gated check-in » c’est-à-dire que le code ne sera pas vraiment intégré sur le contrôle de code source tant qu’il ne passera pas l’analyse statique centralisée effectuée lors de la build.

Idéalement l’analyse statique centralisée et intégrée se basent sur un ensemble de règles communes pour donner les mêmes résultats. On verra que c’est parfaitement possible avec SonarQube et SonarLint pour les développeurs .net et SQ + tslint pour les développeurs TypeScript/JavaScript.


Edité la dernière fois le 15 Apr 2024 par Vincent Biret


Tags: