Découvrez GoogleTest certifié TÜV avec Agentic AI pour les tests C/C++ !
Plus de détails »
Livre blanc
Avant de vous lancer, consultez l'aperçu ci-dessous.
Les tests multiplateformes permettent d'exécuter des tests sur le matériel cible avec peu ou pas de modifications de l'interface ou de l'utilisation de l'outil. Le terme « cible » désigne un matériel connecté à distance ou une simulation qui reproduit l'environnement d'exécution du produit en cours de développement.
Les environnements cibles exécutent des systèmes d'exploitation embarqués sur du matériel dont la mémoire et les performances sont plus limitées que celles des environnements de développement hôtes. La chaîne d'outils de compilation, d'édition de liens et de débogage diffère de celle du processeur cible.
Les tests sur cibles, également appelés tests d'intégration, sont essentiels pour valider le bon fonctionnement, la sécurité et les performances des systèmes embarqués, car l'environnement hôte ne possède pas le système d'exploitation embarqué, les interfaces matérielles ni les périphériques du produit final. De plus, les performances et le comportement des systèmes cibles diffèrent de ceux de l'environnement hôte et peuvent influencer les résultats des tests.
Vérification et validation du logiciel Les tests font partie intégrante du développement de logiciels embarqués. Ils constituent un moyen essentiel de démontrer le bon fonctionnement du logiciel. Tests unitaires Il s'agit de la vérification de la conception du module. Elle garantit que chaque unité logicielle remplit sa fonction.
De plus, les exigences de sûreté et de sécurité peuvent imposer que les logiciels ne présentent pas de comportement inattendu et ne soient pas susceptibles d'être manipulés par des données d'entrée non autorisées. Des vulnérabilités peuvent apparaître dans le système cible en raison des différences de comportement avec l'environnement hôte. Les surfaces d'attaque des systèmes embarqués sont difficiles à simuler dans les environnements hôtes et des tests appropriés nécessitent le matériel cible.
Recueillir et analyser métriques de couverture de code La couverture de code est essentielle pour les logiciels critiques en matière de sécurité. Elle mesure l'achèvement des cas de test et des tests exécutés. Elle atteste que la validation est complète, au moins telle que spécifiée par la conception du logiciel.
La traçabilité entre les cas de test, les résultats des tests, le code source et les exigences doit être enregistrée et maintenue. Par conséquent, la collecte de données lors des tests ciblés est essentielle.
Le modèle en V du développement logiciel montrant la relation entre chaque phase et la validation déduite à chaque étape du test.
Automatisation des tests des systèmes embarqués Le développement de systèmes embarqués est complexe en raison de la difficulté à initier et à observer les tests. L'accès limité au matériel cible constitue un autre défi pour les équipes logicielles. Néanmoins, l'automatisation est essentielle pour permettre des tests embarqués continus, du système de développement hôte au système cible.
Les tests de logiciels embarqués sont particulièrement chronophages. L'automatisation de la suite de tests de régression permet de réaliser des économies considérables de temps et de coûts. La collecte des résultats de tests et des données de couverture de code du système cible est essentielle à la validation et à la conformité aux normes. Le matériel cible peut présenter une connectivité physique limitée, ce qui complique la récupération des résultats de tests. Heureusement, il est possible d'extraire les données à partir de différents ports, tels que les ports série, Ethernet (sockets TCP/IP), le connecteur JTAG, et d'autres méthodes.
Le modèle en V du développement logiciel montrant la relation entre chaque phase et la validation déduite à chaque étape du test.
Les tests multiplateformes permettent de générer et d'étendre des tests sur la plateforme hôte (l'environnement de développement où les outils sont installés), puis de les exécuter sur une ou plusieurs cibles. Ceci est particulièrement utile pour tester du code compilé pour une utilisation sur un système embarqué ou une autre plateforme.
Parasoft C / C ++test Ce système lève les obstacles aux tests embarqués efficaces en générant automatiquement des cas de test exécutables dans n'importe quel environnement multiplateforme : hôte, simulateur et environnements cibles. Il permet également de collecter les résultats des tests et les indicateurs de couverture de code. L'instrumentation détecte les défauts d'exécution, tels que les fuites de mémoire, dans les applications en cours d'exécution.
Sur l'environnement hôte, les développeurs peuvent générer automatiquement un ensemble de tests unitaires et d'API conçus pour identifier les réponses inattendues des fonctions face à des cas limites. Avec une configuration différente, les tests générés captureront le comportement actuel du logiciel au niveau des méthodes et des fonctions. Les prochaines étapes pour cette suite de tests sont les suivantes :
La même suite de tests est ensuite compilée pour une autre architecture matérielle et un autre processeur, afin de générer des exécutables pour l'environnement cible. C/C++test enregistre et utilise ultérieurement les résultats des tests cibles dans son interface graphique pour l'évaluation et l'analyse. Les sockets TCP/IP peuvent envoyer automatiquement les résultats des tests à l'interface graphique de C/C++test, qui collecte les métriques de couverture, notamment la couverture des branches, des conditions simples et la couverture MC/DC pour tous les tests. L'interface graphique de C/C++test offre des fonctionnalités complètes pour le débogage des cas de test, incluant la prise en charge de nombreux débogueurs hôtes, la génération de traces de pile, la génération de rapports sur les séquences d'appels et l'affichage détaillé des résultats des cas de test.
C/C++test et C/C++test CT peuvent instrumenter l'application d'origine pour détecter les problèmes liés à la mémoire, puis effectuer une compilation croisée et un lancement sur la cible afin d'identifier les bogues de mémoire existants et de collecter les données de couverture de code. Les équipes peuvent ensuite combiner ces données de couverture avec celles d'autres tests unitaires exécutés sur l'hôte ou la cible.
Le programme de test comprend un environnement de test construit autour de code source instrumenté et de la bibliothèque d'exécution C/C++. Dans le cas de Parasoft C/C++test, il utilise une version précompilée de cette bibliothèque, fournie avec la distribution C/C++test.
Pour les tests ciblés, les équipes ont besoin d'une bibliothèque d'exécution C/C++test compilée pour une architecture croisée. C/C++test génère automatiquement une version de cette bibliothèque. Dans de rares cas nécessitant une personnalisation non standard, il est possible de compiler manuellement la bibliothèque d'exécution et d'utiliser un compilateur croisé pour générer le code source du banc d'essai.
C/C++test automatise le processus de compilation croisée du banc d'essai et son intégration à la bibliothèque d'exécution C/C++test, ce qui nécessite que C/C++test définisse correctement le compilateur croisé. Cette opération ne requiert aucune intervention de l'utilisateur.
Les bibliothèques d'exécution sont essentielles aux tests ciblés, car les tests nécessitent un environnement d'exécution approprié. Les équipes doivent donc les créer à l'aide d'un compilateur croisé et des bibliothèques nécessaires à l'exécution, telles que l'application et les cas de test.
Parasoft C/C++test est fourni avec une bibliothèque partagée d'exécution complète et précompilée. Cependant, cette bibliothèque est conçue pour les plateformes hôtes sophistiquées. Compte tenu de la multitude de plateformes embarquées sur lesquelles les tests peuvent être effectués, ainsi que de leurs capacités et limitations, les équipes doivent adapter l'environnement d'exécution avant de le compiler pour différents environnements embarqués. C'est pourquoi les sources en C pur de la bibliothèque d'exécution sont également disponibles.
Les équipes peuvent configurer la bibliothèque pour prendre en charge les fonctionnalités disponibles sur la plateforme cible ou bloquer celles qui ne le sont pas. Les développeurs de systèmes embarqués connaissent bien les avantages et les inconvénients des plateformes qu'ils utilisent et devraient être capables de créer une bibliothèque correctement configurée et d'ajouter son chemin d'accès à la ligne de commande de l'éditeur de liens.
Parasoft C/C++test génère automatiquement la bibliothèque d'exécution dans le cadre de la phase de préparation de l'exécutable de test ; le système Teams nécessite une compilation personnalisée de la bibliothèque d'exécution C/C++test.
La bibliothèque d'exécution C/C++test est distribuée sous forme de fichiers source C et de fichiers d'en-tête. Dans la plupart des cas, les équipes peuvent laisser C/C++test la compiler automatiquement. Si elles le souhaitent, elles peuvent également la compiler manuellement à l'aide de l'utilitaire make et de l'une des configurations make préconfigurées pour les plateformes prises en charge. C/C++test fournit des fichiers de projet spécifiques qui facilitent la compilation de la bibliothèque d'exécution pour les environnements de développement intégrés (IDE) les plus courants.
La vérification et la validation logicielles sont essentielles au développement et aux tests de logiciels embarqués. Les tests unitaires sont nécessaires pour garantir que chaque unité logicielle remplit sa fonction. L'automatisation des tests de systèmes embarqués est plus complexe en raison de la difficulté à initier et à observer des tests sur des cibles embarquées.
Les logiciels embarqués utilisent des tests multiplateformes pour tester à la fois sur les systèmes hôtes et cibles. Les environnements cibles sont plus limités en termes de mémoire et de performances que les environnements hôtes, et la chaîne d'outils de compilation/édition de liens/débogueur est généralement différente de celle du processeur cible.
Parasoft C/C++test prend en charge les tests multiplateformes et permet l'automatisation des tests pour les tests ciblés. Ces fonctionnalités contribuent à intégrer les tests ciblés plus tôt dans le cycle de vie du code et à améliorer la couverture de code, tout en facilitant l'intégration de tests ciblés complexes dans les pipelines CI/CD.
Prêt à plonger plus profondément ?