Analyse et vérification statiques du code
L'analyse statique examine le code source sans l'exécuter, ce qui permet d'identifier les défauts au moment même où ils sont introduits, plutôt que lorsqu'ils apparaissent lors des tests ou de l'intégration. Dans le cadre du développement en C et C++ embarqué dans les secteurs réglementés, la mise en œuvre continue de l'analyse statique dès le début d'un projet empêche l'accumulation de catégories de défauts dans la base de code et réduit le nombre de problèmes à résoudre avant la certification.
Le rôle de l'analyse statique
Les outils d'analyse statique parcourent systématiquement le code source en appliquant un ensemble de règles afin d'identifier des problèmes qu'il serait difficile, voire impossible, de détecter par le seul biais des tests. Contrairement aux tests dynamiques, les résultats ne varient pas en fonction des données d'entrée ou des conditions d'exécution : un même code produit les mêmes résultats à chaque exécution.
Parmi les principales techniques, on peut citer :
- La comparaison de motifs par rapport aux règles des normes de codage afin de signaler les violations et les constructions douteuses
- Le suivi des valeurs pour surveiller les valeurs des variables tout au long des chemins d’exécution et détecter les états non valides
- La vérification des valeurs limites pour s’assurer que les variables restent dans les plages attendues
- L’interprétation abstraite des flux de contrôle et de données afin d’identifier les dépendances et les problèmes d’accessibilité
Ce que révèle l'analyse statique
Les catégories de défauts que l'analyse statique permet de détecter de manière fiable comprennent, sans s'y limiter :
- Déréférencements de pointeurs nuls et accès hors limites à un tableau
- Variables non initialisées et conversions de types incorrectes
- Violations des normes de codage, notamment MISRA C:2025, MISRA C:2023, MISRA C++:2023, AUTOSAR C++ et CERT-C
- Vulnérabilités de sécurité associées aux classifications CWE, notamment le Top 25 CWE et la liste Top 10 KEV
- Code inaccessible, erreurs logiques et fuites de ressources
- Problèmes de concurrence, notamment les conditions de concurrence et les séquences d’opérations incorrectes
PC-lint Plus
PC-lint Plus est l'outil d'analyse statique de Vector destiné au code source C et C++. Il est certifié par exida selon les normes CEI 61508 (SIL 1-3), ISO 26262 (ASIL A-D), CEI 62304 et EN 50716, et sa compatibilité avec le CWE est également certifiée.
PC-lint Plus soutient d’emblée les normes MISRA C:2025, MISRA C:2023, MISRA C:2012 (amendements 1 à 4), MISRA C++:2023, MISRA C++:2008, AUTOSAR C++, CERT-C et CWE. Il s’intègre à pratiquement toutes les chaînes de compilation et tous les environnements de développement, fonctionne localement sans télémétrie ni connexion Internet, et s’adapte efficacement aux bases de code volumineuses grâce au traitement parallèle. La gestion des suppressions est entièrement traçable : chaque suppression est documentée, des exceptions basées sur des requêtes peuvent être définies au niveau des règles, et les suppressions inutilisées sont automatiquement signalées.