Vérification statique du code vs vérification dynamique du code
L'analyse statique et les tests dynamiques abordent différents aspects d'un même problème. L'analyse statique détecte les défauts dans le code source avant l'exécution. Les tests dynamiques vérifient le bon fonctionnement du code lors de son exécution et évaluent dans quelle mesure les tests explorent le code. Utilisés conjointement tout au long du cycle de développement, chacun d'entre eux permet de détecter des catégories de défauts que l'autre ne parvient pas à repérer.
Vérification statique du code
La vérification statique consiste à analyser le code source sans l'exécuter. En examinant directement la structure et la logique du code, les outils d'analyse statique identifient les défauts potentiels, les failles de sécurité et les non-respects des normes de codage avant même qu'un seul test ne soit exécuté.
Ce que permet de détecter l'analyse statique
- Déréférencements de pointeurs nuls et accès hors limites à des tableaux
- Non-respect des normes de codage, notamment MISRA C, AUTOSAR C++ et CERT-C
- Variables non initialisées et conversions de types incorrectes
- Code inaccessible et erreurs logiques
- Failles de sécurité classées selon les catégories CWE
Principaux avantages
- Fonctionne directement sur le code source, sans nécessiter de compilation ni d'exécution
- Fonctionne en continu dans le pipeline de compilation dès les premières étapes du développement
- Coût par défaut très faible lorsqu’il est intégré dès le début
- Génère des résultats cohérents et reproductibles, quelles que soient les conditions d’exécution ou les données d’entrée
PC-lint Plus est l'outil d'analyse statique de Vector destiné au code C et C++. Certifié conforme aux normes CEI 61508 et ISO 26262, il prend en charge d'emblée les spécifications MISRA, AUTOSAR, CERT-C et CWE, et s'intègre à pratiquement tous les environnements de compilation.
Vérification dynamique du code
La vérification dynamique consiste à tester le logiciel pendant son exécution. Elle consiste à exécuter le code selon des cas de test définis, à observer son comportement réel en exécution et à évaluer dans quelle mesure les tests permettent de vérifier que le code répond bien à ses exigences.
Ce qu'apportent les tests dynamiques
- Vérification du bon fonctionnement du code dans des conditions réelles et simulées
- Mesure de la couverture de code, y compris les instructions, les branches et les MC/DC, conformément aux normes de sécurité
- Détection des erreurs d’exécution telles que les débordements de pile et les violations de synchronisation
- Traçabilité des exigences entre les résultats des tests et les exigences qu’ils sont censés vérifier
Principaux avantages
- Vérifie le comportement réel en exécution, et pas seulement la structure du code source
- Exigé par des normes telles que ISO 26262 et DO-178C pour apporter la preuve de la couverture structurelle
- Prend en charge à la fois les environnements de test basés sur l’hôte et ceux basés sur la cible
- S'intègre aux pipelines CI/CD pour une exécution automatisée en continu
VectorCAST est la plateforme de tests dynamiques et d'automatisation des tests de Vector destinée aux logiciels embarqués en C, C++ et Ada. Elle génère, gère et exécute des tests unitaires, mesure la couverture de code conformément aux normes du secteur et produit des rapports vérifiables, comme l'exigent les certifications de sécurité.
Pourquoi les deux sont-ils nécessaires ?
L'analyse statique et les tests dynamiques ont chacun un champ d'application bien défini. L'analyse statique porte sur le code source et identifie les défauts avant l'exécution. Les tests dynamiques portent sur le logiciel en cours d'exécution et permettent de vérifier son bon fonctionnement dans des conditions réelles. Un processus de développement qui recourt à ces deux méthodes permet de détecter les défauts là où chacune d'elles est la plus efficace ; c'est pourquoi les normes ISO 26262, DO-178C, CEI 61508 et CEI 62304 imposent ces deux activités de vérification distinctes.