Optez pour une voie plus rapide et plus intelligente vers l'automatisation des tests C/C++ pilotée par l'IA. Découvrez comment >>
Livre blanc
Vous souhaitez un aperçu rapide avant de vous lancer ? Commencez ci-dessous.
Les équipes travaillant sur des applications C/C++ critiques utilisent des frameworks de tests unitaires pour garantir une implémentation correcte et le respect des exigences logicielles. Les frameworks open source comme GoogleTest offrent une intégration simple avec des configurations complexes, en phase avec la tendance du secteur à privilégier l'open source.
Toutefois, l'adoption de GoogleTest pour la conformité aux normes critiques en matière de sécurité présente deux défis majeurs : l'extension de GoogleTest avec des fonctionnalités essentielles à la conformité aux normes et la maîtrise du processus formel de qualification des outils requis pour le développement de logiciels critiques en matière de sécurité.
Les normes de sécurité évitent volontairement une définition rigide d’« unité », car celle-ci dépend de la technologie et de l’architecture. Du point de vue de la conformité, une unité est généralement le plus petit composant architectural doté d’une interface définie et pouvant être testé de manière isolée.
Des normes clés comme ISO 26262 (automobile) ou DO-178C (aviation) mandat rigoureux tests au niveau unitaire, nécessitant un ensemble commun de techniques de vérification :
Pour se conformer, pratiques de développement doit inclure un cadre de tests unitaires, outils de surveillance de la couverture et d'injection de défautset un système de rapports qui met en corrélation les tests avec les exigences de traçabilité.
GoogleTest offre des fonctionnalités avancées pour la définition des cas de test et prend en charge diverses stratégies de sources de test requises par les normes. La norme ISO 26262 recommande quatre méthodes pour la dérivation des cas de test : l’analyse des exigences, la génération et l’analyse des classes d’équivalence, l’analyse des valeurs limites et la prédiction des erreurs basée sur les connaissances et l’expérience.
Les frameworks commerciaux prennent généralement en charge les quatre méthodes grâce à l'automatisation, mais imposent souvent des API propriétaires qui font abstraction du code source. Ces API compliquent la création de tests pour le C++ moderne, rendant l'initialisation des conteneurs STL et les entrées lambda extrêmement difficiles.
GoogleTest se distingue par sa flexibilité et son API C++ moderne pour la création de tests, simplifiant et facilitant la gestion des scénarios complexes de structures de données. Les scénarios de test s'adaptent mieux à la taille de l'équipe et au volume de cas de test.
Qualification des outils pour les applications GoogleTest liées à la sécurité Cela requiert une attention particulière. Les frameworks commerciaux sont pré-certifiés avec des packages de qualification, mais la communauté open source n'offre aucun support similaire pour GoogleTest.
L'expérience de Parasoft auprès des plus grandes entreprises des secteurs automobile et aérospatial montre que les équipes préfèrent largement la facilité d'utilisation et la clarté des tests de GoogleTest aux capacités de génération de base, en particulier lors de l'utilisation de systèmes de compilation Bazel.
La qualification des outils est un processus formel exigé par les normes de sécurité afin de garantir un niveau acceptable de risque d'erreur lié aux outils. La communauté open source n'offre aucun support pour la qualification de GoogleTest.
Le processus de qualification doit inclure la classification et la validation des outils, et se conclure par une documentation appropriée. Le dossier documentaire contient des directives pour les déploiements dans les phases de développement critiques (Manuel de sécurité des outils/TSM).
Classement des outils Le niveau de rigueur de la qualification est déterminé en fonction des cas d'utilisation de l'outil et de mesures complémentaires. L'analyse d'impact de l'outil (probabilité qu'il introduise une erreur ou qu'il ne parvienne pas à en détecter une) est une pratique courante.
Les frameworks de tests unitaires comme Google Test ne génèrent pas de code pour le système cible, ce qui élimine tout risque d'introduction d'erreur. Cependant, ils peuvent ne pas détecter les erreurs. Une assertion défectueuse peut signaler un test en échec comme réussi, entraînant ainsi le déploiement de code défectueux en production.
La norme ISO 26262 définit trois niveaux de confiance (TCL 1 à 3), le niveau 3 imposant la plus grande rigueur de qualification. La norme DO-178C utilise cinq niveaux (TQL 1 à 5). Les cadres de tests unitaires sont généralement classés TQL 5 pour la conformité à la norme DO-178C.
La qualification d'un outil par validation prouve qu'il se comporte conformément aux exigences opérationnelles, garantissant ainsi un risque d'erreur acceptable. Deux aspects essentiels sont les exigences opérationnelles de l'outil et les tests permettant de valider ces exigences.
Pour obtenir la certification GoogleTest, un investissement conséquent est nécessaire sur les deux plans. GoogleTest propose une documentation de qualité, mais aucune exigence formelle de validation n'est fournie. Les organisations doivent donc élaborer une documentation des exigences et des tests de validation.
Les exigences jouent un rôle essentiel dans les processus de sécurité, en spécifiant précisément ce qui a été validé et peut être utilisé en toute sécurité. La documentation des outils ne peut remplacer les exigences, car elles ont des rôles différents.
L'expérience de Parasoft a abouti à un processus en trois phases :
Les exigences ont été définies à partir de la documentation publique de GoogleTest, et des tests spécifiques ont été menés lorsque la documentation était incomplète. Chaque exigence a été associée à un élément d'API, au code source et à la documentation utilisateur afin de faciliter la maintenance.
L'analyse complète a donné les résultats suivants : Plus de 1500 exigences.
Nos recommandations:
Les cas de test de qualification doivent être dérivés des exigences à des fins de validation. Les cas de test GoogleTest existants sont de haute qualité, mais difficiles à utiliser directement pour la qualification en raison d'inadéquations de granularité et d'un nombre insuffisant de tests négatifs.
L'expérience de Parasoft montre que la plupart des cas de tests de validation ont été développés à partir de zéro.
L'un des principaux défis a consisté à élaborer une stratégie de test pour les chaînes d'appels d'API. GoogleTest est un framework basé sur des modèles offrant une flexibilité considérable. Il est impossible de tester exhaustivement toutes les combinaisons d'API possibles. La macro EXPECT_CALL de GoogleTest Mock illustre ce défi : elle prend des paramètres et peut être affinée grâce à des modificateurs, ce qui peut engendrer un nombre astronomique de cas de test.
Approche par paires : Pour les longues chaînes d'appels, cette méthodologie garantit que chaque combinaison de deux modificateurs différents est testée au moins une fois au lieu de tester toutes les combinaisons possibles.
Stratégie inspirée par la couverture MC/DC : Appliqué aux chaînes d'appels longues de type Assertions/Expectations. La chaîne d'appels entière a été traitée comme une décision, chaque modificateur étant considéré comme une condition. Les tests visaient à démontrer que chaque modificateur individuel pouvait influencer le résultat, les autres modificateurs restant inchangés.
Les deux stratégies ont permis de réduire considérablement le nombre de cas de test pour les appels d'API complexes.
Le processus de qualification exige des documents spécifiques, notamment les exigences opérationnelles, la déclaration du niveau de confiance, le plan de qualification, la matrice de couverture des exigences et les directives pour une utilisation sûre des outils (Manuel de sécurité des outils/TSM).
Les organisations doivent extraire les directives relatives à TSM de la documentation GoogleTest et analyser tous les bogues connus afin d'en déterminer les implications. L'application des restrictions TSM est complexe et nécessite généralement une intervention manuelle. Parasoft a appliqué des règles d'analyse statique pour automatiser l'application de nombreuses recommandations TSM, ce qui a permis de réduire considérablement les coûts.
Le framework de tests unitaires GoogleTest est probablement la meilleure option pour tester les applications C++ modernes. Les projets utilisant Adaptive AUTOSAR ou des plateformes similaires, ainsi que ceux basés sur des bibliothèques C++ modernes d'IA/ML, choisissent GoogleTest par défaut. L'utilisation croissante de GoogleTest témoigne d'une forte tendance du secteur vers les logiciels libres pour le développement de systèmes de sécurité.
Déploiement GoogleTest pour le développement de logiciels critiques pour la sécurité C’est possible. Toutefois, la qualification de l’outil exige des efforts considérables et une équipe compétente. Les organisations doivent être conscientes que la qualification GoogleTest peut ne pas être un processus ponctuel. Avec les progrès du C++ moderne et l’ajout de nouvelles fonctionnalités dans les versions ultérieures, les équipes de développement peuvent exiger l’adoption de versions plus récentes, ce qui nécessitera une nouvelle qualification de l’outil.
Toutefois, les gains globaux en matière d'efficacité des tests logiciels, d'effort d'intégration des outils, de facilité de développement des ressources de test et de maintenance compensent largement les coûts supplémentaires liés à la conformité.
Prêt à plonger plus profondément ?
FICHE TECHNIQUE
WEBINAIRE
29 minutes à regarder
BLOG
6 min de lecture