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 vous demandez ce que contient le guide ? Commencez par consulter l’aperçu ci-dessous.
L'intégration continue et le déploiement continu (CI/CD) constituent le fondement du développement logiciel continu. La CI fusionne fréquemment de petites unités de compilation en applications, tandis que le CD exige des tests approfondis et peut inclure une certification logicielle avant le déploiement sur site.
Ce livre blanc présente les meilleures pratiques pour intégrer les tests automatisés dans les flux de travail CI afin de détecter les défauts au plus tôt et de fournir un code de haute qualité grâce aux tests continus (CT) — où le développement logiciel se combine avec les tests dans le cadre du processus de construction.
« L’intégration continue est une pratique de développement logiciel où les membres d’une équipe intègrent fréquemment leur travail, généralement au moins une fois par jour, ce qui conduit à plusieurs intégrations quotidiennes. Chaque intégration est vérifiée par une compilation automatisée (incluant des tests) afin de détecter les erreurs d’intégration le plus rapidement possible. »
—Martin Fowler
Sans l'automatisation du processus de construction et des processus liés à la création d'artefacts de déploiement et à la vérification de la construction, l'intégration et la livraison continue (CI/CD) seraient fastidieuses et chronophages, soit l'antithèse de la continuité.
L'intégration continue repose sur un dépôt partagé et des outils de compilation automatisés. Il est crucial d'identifier immédiatement les problèmes d'intégration et les compilations défaillantes. L'étape la plus critique consiste à intégrer les tests continus au pipeline CI/CD afin de garantir que les modifications de code soient testées automatiquement et en continu tout au long du cycle de développement.
Lorsque les développeurs valident des modifications dans le code source, cela déclenche le processus de compilation, qui comprend la compilation du code et la préparation de l'environnement de test. Les développeurs peuvent ainsi effectuer rapidement des analyses statiques, des tests unitaires, des analyses de couverture de code et d'autres méthodes de test, et obtenir un retour d'information immédiat.
Les tests en échec permettent de corriger le code dès les premières étapes du développement. Une fois tous les tests réussis, le déploiement sur la branche principale a lieu. Ce flux de travail continu garantit la vérification constante des modifications de code par des tests automatisés, assurant un retour d'information rapide et préservant la qualité du logiciel tout au long de son cycle de vie.
L'intégration continue et la livraison continue (CI/CD) sont des pratiques courantes et recommandées dans le développement de logiciels embarqués, qui est soumis à des contraintes spécifiques. Des solutions comme Test CT Parasoft C/C++ Facilitez les tests continus en vous intégrant aux solutions populaires frameworks de tests unitaires open source comme GoogleTest, Boost.Test, CppUnit et les solutions personnalisées, améliorées avec la couverture de code, la traçabilité des exigences et des fonctionnalités de reporting.
Outre les contraintes physiques et informatiques des plateformes matérielles cibles, les marchés des logiciels embarqués présentent des exigences spécifiques en matière de sûreté, de sécurité, de confidentialité et de cycles de vie extrêmement longs. Les produits peuvent rester sur le marché pendant des décennies.
Au niveau du développement, les logiciels embarqués nécessitent des environnements de développement intégrés (IDE), des compilateurs, des outils d'analyse statique et dynamique, ainsi que des outils de construction, comme pour le développement d'applications classiques. Cependant, ces outils ciblent souvent des architectures différentes (environnement hôte et environnement cible), ce qui exige des environnements de développement homogènes entre les équipes.
Automatisation des tests pour les logiciels embarqués Le développement de tests sur des systèmes embarqués est complexe en raison de la difficulté à les initier et à les observer, ainsi que de l'accès limité au matériel cible. L'automatisation des tests logiciels est essentielle pour permettre un déploiement continu des tests embarqués, du système hôte au système cible.

Vue d'ensemble du déploiement, de l'exécution et de l'observation des tests de l'hôte vers la cible.
Tests de logiciels embarqués Cette tâche est particulièrement chronophage. L'automatisation de la suite de tests de régression permet de réaliser d'importantes économies de temps et de coûts. La collecte des résultats de tests et des données de couverture de code des systèmes cibles est essentielle à la validation et à la conformité aux normes. La traçabilité entre les cas de test, les résultats, le code source et les exigences doit être enregistrée et maintenue, ce qui rend la collecte de données cruciale.
Les solutions de test C et C++ comme celles de Parasoft offrent des environnements de test optimisés pour une empreinte binaire minimale, fournis sous forme de code source pour une personnalisation spécifique à la plateforme si nécessaire.
L'un des principaux avantages de Parasoft C/C++test réside dans ses intégrations dédiées aux environnements de développement intégrés (IDE) et aux débogueurs embarqués, qui rendent l'exécution des cas de test fluide et automatisée. Parmi les environnements IDE pris en charge figurent Eclipse, Code VS, Green Hills Multi, Wind River Workbench, IAR EW, ARM MDK, ARM DS-5, TI CCS, Visual Studio, et bien d'autres.
C/C++test permet de créer des référentiels de tests de régression sous forme de collections organisées de tests avec vérification automatique des résultats. Les équipes peuvent exécuter automatiquement et régulièrement des tests pour vérifier si des modifications de code altèrent ou perturbent les fonctionnalités couvertes par les tests de régression, et recevoir des alertes en cas d'échec.
Lors de la gestion d'environnements de développement complexes dans le cadre du développement de logiciels critiques pour la sécurité, les équipes rencontrent généralement les difficultés suivantes :
Tous ces problèmes sont faciles à résoudre avec des conteneurs.

Exemple de déploiement de Parasoft C/C++test avec des conteneurs Docker de construction et d'exécution
Parasoft C/C++test Professional fonctionne avec les chaînes d'outils de compilation et les environnements d'exécution déployés dans des conteneurs, prenant en charge les déploiements basés sur des conteneurs Linux et Docker.
Le principal avantage de l'intégration continue et de la livraison continue (CI/CD) est la réduction des risques liés aux projets. Auparavant, trop de projets s'appuyaient sur des efforts d'intégration logicielle « big bang », où les équipes tentaient d'intégrer les logiciels trop près de la fin du développement du produit, ce qui entraînait d'énormes problèmes d'intégration dans des délais extrêmement serrés.
Les tests sont repoussés à la fin du projet, où il devient trop tard et insuffisant. intégration continueLes équipes disposent toujours de versions complètes du produit prêtes pour les tests, le déploiement et la mise en production. Plutôt que d'une intégration brutale et continue, elles procèdent par petites étapes, ce qui leur permet de détecter les problèmes rapidement et de réduire les risques liés à l'intégration en fin de cycle.
Les avantages supplémentaires incluent:
DevOps et Méthodologies DevSecOps L'utilisation de l'automatisation et des processus continus pour établir des cycles de développement collaboratifs est encouragée. Si le DevOps privilégie la rapidité de livraison, le DevSecOps intègre la sécurité dès les premières étapes de développement, ce qui est crucial pour les logiciels embarqués critiques en matière de sûreté et de sécurité.
L'automatisation des tests logiciels joue un rôle important, mais elle ne représente qu'une pièce du puzzle DevSecOps. Les tests constituent souvent l'une des principales contraintes du cycle de vie du développement logiciel (SDLC). Par conséquent, l'optimisation des processus de sécurité permettant de démarrer les tests plus tôt – et d'en réduire le volume – a un impact significatif sur la sécurité du logiciel et l'efficacité du développement.
Adopter un processus de test continu contribue à promouvoir les 6 piliers du DevSecOps : responsabilité collective, collaboration et intégration, mise en œuvre pragmatique, conformité et développement, automatisation et mesure, et surveillance et reporting.
L'intégration de la sécurité dès la conception dans le cycle de vie du développement logiciel (SDLC) découle de la volonté de détecter et de corriger les bogues et les failles de sécurité le plus tôt possible. Il est en effet beaucoup plus facile, moins coûteux et moins risqué de corriger les problèmes en amont.
Les exigences essentielles du « shift left security » reposent sur la nécessité d'intégrer la sécurité à toutes les applications dès leur conception. La sécurité ne peut être ajoutée a posteriori ; elle doit être intégrée dès le départ.
La traçabilité des exigences est définie comme « la capacité à décrire et à suivre le cycle de vie d'une exigence, aussi bien en amont qu'en aval (c'est-à-dire depuis ses origines, en passant par son développement et sa spécification, jusqu'à son déploiement et son utilisation ultérieurs, et à travers les périodes d'amélioration et d'itération continues dans chacune de ces phases) ».
En termes simples, la traçabilité des exigences est nécessaire pour suivre précisément ce que vous développez lors de la création d'un logiciel. Cela signifie s'assurer que le logiciel fonctionne comme prévu et que vous ne développez que les fonctionnalités nécessaires.
La traçabilité fonctionne à la fois pour prouver que vous répondez aux exigences et pour identifier ce qui ne l'est pas. S'il y a des éléments architecturaux ou du code source qui ne peuvent pas être attribués à une exigence, alors c'est un risque et ne devrait pas être là. Les avantages vont au-delà de la preuve de la mise en œuvre. Une traçabilité disciplinée est une visibilité importante sur l'avancement du développement.
Il est important de comprendre que de nombreuses exigences relatives aux logiciels embarqués découlent de l'analyse de sécurité et de la gestion des risques. Le système doit bien sûr remplir ses fonctions prévues, mais il doit également atténuer les risques afin de réduire considérablement les possibilités de blessure. De plus, la traçabilité est essentielle pour documenter et prouver que ces fonctions de sécurité sont pleinement et correctement mises en œuvre et testées.
La tenue de registres de traçabilité à grande échelle exige une automatisation. Ceci est particulièrement important dans un pipeline CI/CD, car une traçabilité gérée manuellement ralentirait chaque itération.
Les outils de test logiciel intégrés peuvent compléter la vérification et la validation des exigences en fournissant une traçabilité bidirectionnelle automatisée jusqu'au cas de test exécutable, qui comprend le résultat de réussite ou d'échec et remonte jusqu'au code source qui implémente l'exigence.
Parasoft s'intègre aux principaux systèmes de gestion des exigences et de planification Agile du marché, tels qu'IBM DOORS Next, Intland, Codebeamer, Polarion de Siemens, Jama Connect, Atlassian Jira, CollabNet, VersionOne et TeamForge. La traçabilité est assurée par un tableau de bord centralisé de reporting et d'analyse : Parasoft DTP.

Traçabilité bidirectionnelle des éléments de travail aux cas de test et aux résultats de test. Les rapports de traçabilité sont affichés et les résultats sont renvoyés au système de gestion des exigences.
La corrélation bidirectionnelle entre les résultats des tests et les éléments de travail constitue la base de la traçabilité des exigences. Parasoft DTP ajoute une analyse de couverture de test et de code pour évaluer l'exhaustivité des tests. Le maintien de cette corrélation bidirectionnelle entre les exigences, les tests et les artefacts qui les implémentent est un élément essentiel de la traçabilité.
L'intégration et le déploiement continus (CI/CD) sont devenus des pratiques courantes en développement embarqué, permettant aux équipes de passer des processus traditionnels en cascade à des flux de travail plus agiles et efficaces. Cette transition réduit les risques et améliore la qualité et la sécurité. La sécurité demeurant une priorité absolue, le CI/CD constitue le socle du DevSecOps en intégrant les exigences et les contrôles de sécurité tout au long du pipeline. Les environnements de développement conteneurisés renforcent cette approche, en prenant en charge la portabilité, le versionnage et le contrôle centralisé, tout en garantissant des environnements d'application reproductibles et sécurisés.
Les tests continus jouent un rôle essentiel dans le bon déroulement d'un pipeline CI/CD, d'autant plus que les tests représentent souvent l'activité la plus gourmande en temps et en ressources dans le développement embarqué. En automatisant stratégiquement les tests et en se concentrant sur les zones à haut risque, les équipes peuvent accélérer les boucles de rétroaction et réduire les délais. L'efficacité des tests continus est accrue grâce à des outils qui optimisent l'automatisation, améliorent la couverture du code, permettent une exécution intelligente des tests et garantissent une traçabilité bidirectionnelle complète tout au long du cycle de vie du logiciel.
Prêt à plonger plus profondément ?