Il est bon de chercher à améliorer la qualité de son code. Surtout lorsque l’on en écrit beaucoup et lorsque l’on travail en équipe. C’est également un avantage pour des projets personnels. Cela permet d’avoir des systèmes plus fiables et surtout cela permet d’adopter de bons réflexes.
Les avantages sont nombreux : amélioration de la maintenabilité, de la testabilité …
La complexité cyclomatique correspond au nombre déroulement différents qu’il est possible d’emprunter dans une méthode ou une fonction. Le résultat augmente proportionnellement au nombre de points de décision (if, case, while …).
Lorsque la complexité cyclomatique est élevée, la fonction devient difficile à tester. Le risque d’ajouter des erreurs au programme est plus grand.
C’est un outil simple et très utile. Il est un bon indicateur pour améliorer la qualité de codage.
La qualité de code est liée à la Complexité Cyclomatique.
Complexité cyclomatique | Risque sur la fiabilité | Risque d'injection de bug lors d'une modification |
1 - 10 | Fonction simple Risque faible | 5% |
11 - 20 | Fonction intermédiaire Risque modéré | 20% |
21 - 50 | Fonction complexe Risque élevé | 40% |
> 51 | Fonction intestable Risque très élevé. | 60% |
Dans l’idéal, pour obtenir une couverture de test à 100%, le nombre de tests unitaires devrait être égale à la complexité cyclomatique de la fonction testée.
Néanmoins, il est bon de prendre pour habitude de maintenir une complexité cyclomatique la plus faible possible lorsque cela est possible. Même pour des programmes avec des objectifs de tests inexistant.
Il existe de nombreux outils pour calculer la complexité cyclomatique. Parmi les gratuits j’utilise Lizard qui me donne entière satisfaction.
Installation de Lizard
Lizard est en codé en Python et va fonctionner avec beaucoup de systèmes d’exploitations différents. Mais vous devez avoir Python installé sur votre machine. Il permet d’analyser beaucoup de langages comme par exemple : C/C++, Java, C#, JavaScript, Objective-C, Swift, Python, Ruby, PHP …
Installation de Python
- Windows : Télécharger et installer Python.
N’oubliez pas d’ajouter le chemin des exécutables Python à la variable d’environnement PATH.
- Linux : Installez Python à l’aide du gestionnaire de package de votre distribution.
Sur Debian :
sudo apt-get install python3
- MacOS : Installez Python à l’aide du gestionnaire de packet brew.
brew install python
Mise à jour de pip
python -m pip install -U pip
Installation de Lizard
python -m pip install lizard
Utilisation
Par défaut, Lizard analyse tout les fichier source avec un langage connu. Il est possible de sélectionner uniquement un langage avec l’option « -l ».
L’outil renvoi les paramètres suivants après analyse :
– nloc : Nombre de ligne de code
– CCN : complexité cyclomatique
– Compteur d’occurrence des fonctions
– Compteur de paramètres des fonctions
Pour analyser les fichiers sources dans le répertoire actuel :
python -m lizard
Il est possible de paramétrer la limite acceptable du nombre de complexité cyclomatique avec l’option « -C » (par défaut la limite est fixée à 15)
python -m lizard -C 50
Pour exclure un répertoire de l’analyse :
python -m lizard -x"./exclude/*"
Intégration dans MPLAB
Pour exécuter l’analyse du code avec Lizard dans MPLAB. Il faut ajouter la commande d’exécution de Lizard dans les propriétés du projet MPLAB comme indiqué :

Dans cet exemple, les fichiers présent dans le répertoire « mcc_generated_files » ne sont pas analysés.
Ainsi, lors de la compilation, la console de MPLAB affiche les résultats de l’analyse de Lizard. Il est à noter que la compilation échoue si une limite est dépassée.

Intégration dans PlatformIO
PlatformIO s’intègre dans Visual Studio Code et permet d’utiliser cet IDE moderne pour programmer des microcontrôleurs (Arduino, STM32, ESP …).
PlatformIO utilise un environnement Python virtuel propre à lui même. Il faut donc installer le module lizard dans l’environnement Python virtuel.
Installation de lizard
A l’aide d’un terminal, aller dans le répertoire « C:\Users\<username>\.platformio\penv\Scripts » (Windows) ou le répertoire « /Users/<username>/.platformio/penv » (Linux et MacOS).
Procéder à la mise à jour de pip et l’installation de lizard :
python -m pip install -U pip python -m pip install lizard
Intégration de lizard dans un projet
Pour exécuter une commande avant compilation, il faut créer un script personnalisé python (voir documentation PlatformIO).

Créer un fichier python dans votre projet. ex: « extra_script.py ».
# Import global construction environment and isolated construction environment Import("env") env.Execute("$PYTHONEXE -m pip install lizard") env.Execute("$PYTHONEXE -m lizard")
Ajouter la ligne suivante dans le fichier de configuration du projet :
extra_script = pre:extra_script.py
Exemple de fichier « platformio.ini » :

Ainsi, lors de la compilation, le terminal de VSCode affiche les résultats de l’analyse de Lizard.

Conclusion
L’analyse de qualité de code avec un calcul de la Complexité Cyclomatique est un bon début. L’outils « Lizard » en Python est facilement intégrable dans beaucoup d’environnements de développement. Mais c’est seulement un indicateur. D’autres outils et bonnes pratiques sont également nécessaires pour améliorer la qualité de codage (convention de code, test unitaire, documentation …)