De nombreuses ressources évoquent les avantages des outils d'analyse statique et la manière dont ils peuvent vous aider à améliorer votre base de code. Elles vous montrent ce que vous avez à y gagner. Mais vous êtes-vous déjà demandé ce que vous perdez à ne pas les utiliser ?
Prenons l'exemple d'une corruption de mémoire provoquée par la double libération d'un pointeur, qui peut entraîner des plantages aléatoires. La recherche de ce type de problème peut prendre de quelques heures à plusieurs jours. De nombreux problèmes risqués similaires existent en C/C++, en particulier en ce qui concerne la corruption de mémoire. Un seul problème peut coûter de quelques dollars à plusieurs milliers de dollars.
L'impact d'un problème dépend aussi de la nature du programme : un bogue dans une application embarquée contrôlant une machine n'a pas les mêmes conséquences qu'un plantage dans une application de dessin. Parfois, un seul problème peut coûter des millions, voire des milliards de dollars, comme dans le cas d' Ariane 5, où un bogue a coûté 7 milliards de dollars.
Que perdez-vous en utilisant un outil d'analyse statique ?
Prenons Cppcheck comme exemple ; il détecte principalement les types de bogues que les compilateurs ne détectent normalement pas. De nombreuses erreurs intéressantes sont signalées par cet outil.
Le téléchargement prend moins d'une minute et la configuration peut-être 20 minutes ; l'analyse dure de quelques minutes à plusieurs heures, mais pendant ce temps, vous êtes libre d'accomplir d'autres tâches. À l'issue de l'analyse, vous pouvez obtenir des milliers de problèmes potentiels ; dans un premier temps, vous pouvez vous concentrer uniquement sur les erreurs de priorité la plus élevée.
Au final, avec les outils d'analyse statique gratuits, vous ne perdez que 30 minutes pour obtenir une liste de problèmes potentiels qui pourraient vous coûter plusieurs milliers de dollars.
Avec les outils commerciaux, vous perdez plus que du temps : vous devez les payer. Vous perdez donc aussi de l'argent. Supposons que vous achetiez un outil à 1 000 $ et qu'il vous aide à trouver un problème dont la recherche aurait pris deux ou trois jours à un développeur. Trois jours d'un développeur C/C++ peuvent coûter plus de 1 000 $, selon, bien sûr, le pays où se trouve l'entreprise. Mais si l'on tient compte du coût caché d'un seul problème, on peut être surpris de ce qu'un problème en apparence simple peut coûter à une entreprise. De nombreux récits sur le web parlent du coût de problèmes simples.
Voici quelques outils d'analyse statique gratuits :
Cppcheck (gratuit) : Cppcheck propose de nombreuses vérifications ; en voici quelques-unes :
- Vérification des dépassements de limites
- Vérification de la sûreté des exceptions
- Détection des fuites de mémoire
- Avertissement en cas d'utilisation de fonctions obsolètes
- Vérification d'une utilisation incorrecte de la STL
- Vérification des variables non initialisées et des fonctions inutilisées
Clang (gratuit) : c'est un compilateur C/C++ ; ses diagnostics sont très intéressants, et vous pourriez être surpris par la pertinence des problèmes signalés. Ils peuvent concerner :
- Des utilisations dépréciées
- Des problèmes de cast
- Des problèmes d'initialisation
- Des problèmes OpenMP, et bien plus.
Clang-tidy (gratuit) : c'est un outil de « lint » C++ basé sur Clang. Son objectif est de fournir un cadre extensible pour diagnostiquer et corriger les erreurs de programmation typiques, comme les violations de style, les mauvaises utilisations d'interfaces ou les bogues déductibles par analyse statique. clang-tidy est modulaire et offre une interface pratique pour écrire de nouvelles vérifications. Voici la liste des vérifications de clang-tidy.
De nombreux autres outils d'analyse statique existent. Certains sont faciles à essayer, tandis que d'autres exigent de contacter l'éditeur pour demander une version d'essai.
Si vous pouvez consacrer seulement 30 minutes à essayer Cppcheck, ce sera probablement du temps bien investi.
Résumé
Il est préférable de combiner plusieurs outils C++ pour détecter les problèmes de votre base de code C++ : certains outils détectent les bogues, tandis que d'autres détectent aussi les situations propices aux bogues. Vous pouvez commencer par les outils gratuits et examiner les problèmes qu'ils signalent.
