Logo Parasoft
Image de couverture du livre blanc

Livre blanc

Meilleures pratiques DevOps pour le développement de logiciels automobiles

Avant de vous lancer, consultez l'aperçu ci-dessous.

Vue d'ensemble

Alors que l'industrie automobile continue d'adopter un Méthodologie de développement agileIls commencent alors à identifier d'autres processus pouvant être accélérés, comme la livraison par DevOps, notamment grâce aux tests continus. DevOps vise à automatiser toutes les étapes nécessaires pour que le code applicatif soit déployé auprès de l'utilisateur final.

DevOps Ce système fonctionne comme un tapis roulant pour faire passer le code applicatif à travers les différentes phases. Les initiatives DevOps et d'amélioration continue actuelles exigent la capacité d'évaluer instantanément et en continu les risques associés à une version candidate.

Les tests continus offrent une méthode automatisée et non intrusive pour obtenir un retour d'information immédiat sur les risques métier associés à une version candidate. Ils permettent aux équipes de développement de répondre aux attentes métier et aident les responsables à prendre des décisions éclairées afin d'optimiser la valeur ajoutée de la version candidate. Une grande partie de ce processus est réalisée grâce à l'intégration continue (CI).

Dans ce livre blanc, nous aborderons les points suivants : meilleures pratiques pour le DevOps dans le domaine des logiciels automobiles:

  • Utilisez l'automatisation des tests pour permettre l'intégration continue.
  • Éliminez les obstacles à la validation et à la vérification grâce à des tests continus sur les systèmes hôtes et cibles.
  • Utilisez les conteneurs pour créer des environnements de développement cohérents, reproductibles et sécurisés.
  • Augmentez la couverture des tests grâce à la génération automatisée de tests et à l'exécution intelligente des tests.
  • Prenez des décisions fondées sur les données grâce à des rapports et des analyses centralisés.

Utilisez l'automatisation des tests pour permettre l'intégration continue

Il est essentiel de bien comprendre les phases DevOps et de savoir à quel moment utiliser les outils adéquats pour obtenir les meilleurs résultats. De nombreuses solutions et outils CI/CD éprouvés sont disponibles sur le marché pour faciliter votre déploiement DevOps. Parmi les outils utilisés dans l'industrie automobile, on peut citer Parasoft, Jenkins, GitHub, GitLab, Azure DevOps, Bitbucket, Bamboo, Docker (conteneurs), et bien d'autres.

Intégration continue

L'un des éléments clés du DevOps est l'intégration continue. L'IC consiste à fusionner des fonctionnalités, des correctifs ou des modifications mineures de code selon des processus automatisés, notamment le contrôle de version et la compilation logicielle. L'objectif de l'IC est d'établir une méthode cohérente et automatisée pour compiler, empaqueter et tester les applications au sein d'un pipeline logiciel.

Dans la plupart des cas, les tests constituent le principal obstacle à une intégration continue fluide et efficace. Les tests manuels étant exclus, il faut choisir entre automatiser les tests ou s'abstenir de tout test. L'automatisation des tests Cela va au-delà des simples tests unitaires ; cela inclut également les meilleures pratiques telles que l’analyse statique et les tests de régression. Les tests automatisés génèrent un retour d’information immédiat qui permet d’ajuster et de replanifier l’itération ou le sprint suivant.

Automatisation des tests dans le flux de travail CI/CD

L'automatisation des tests en DevOps consiste à automatiser vos méthodes de test. Il est important de bien connaître chacune des phases de cette méthodologie et de savoir où déclencher vos méthodes de vérification et de validation des tests.

Vous avez peut-être aussi entendu parler du terme DevSecOps, qui désigne la pratique de intégrer la sécurité au flux de travail DevOpsCela nécessite un changement de mentalité au sein des équipes pour intégrer les outils et les pratiques de sécurité à cette méthodologie. La sécurité est devenue primordiale pour de nombreux constructeurs automobiles en raison des exigences réglementaires de la norme WP.29 R155 et de la nécessité d'intégrer les processus issus de normes telles que… ISO 21434.

Un avantage important du pipeline CI/CD réside dans la boucle de rétroaction qu'il offre pour garantir le bon fonctionnement de la partie « continue ». Tout blocage dans cette boucle engendre des inefficacités qui entraînent des retards dans le développement et le déploiement.

Comment les outils d'automatisation des tests facilitent les tests unitaires

Les outils d'automatisation des tests permettent de contourner les obstacles suivants liés aux tests unitaires :

  • Tests unitaires et les frameworks d'assertion fournissent des formats d'exécution standardisés comme CPPUnit.
  • L'intégration à l'IDE permet de transmettre directement les résultats des tests unitaires au développeur.
  • La génération guidée de tests unitaires réduit l'effort de codage.
  • La simulation de fonctions isole le code de ses dépendances.
  • La couverture de code indique quel code a été exécuté.
  • Exécution de tests basée sur l'hôte et la cible.

En optimisant les tests au sein du pipeline CI/CD, il est possible d'améliorer la couverture des tests à chaque cycle et de ne pas entraver l'avancement du projet grâce à des tests continus.

Code

Outils d'analyse statique sont essentiels pendant la phase de codage, tant du point de vue de la qualité que de la sécurité, ainsi que du point de vue de conformité aux normes de codagePour les logiciels automobiles qui doivent être conformes aux normes MISRA C ou C++, par exemple, des rapports clairs lors du codage et de l'intégration sont nécessaires pour garantir une conformité continue.

Se construisent

L'étape de compilation déclenche l'analyse statique et les tests de régression à l'échelle de l'application. À ce stade, les outils d'analyse statique s'exécutent sur l'ensemble du projet, offrant une meilleure précision et permettant de détecter d'éventuelles erreurs au niveau unitaire. C'est également à ce stade que les tests de régression sont lancés. Leurs résultats orientent la phase suivante : les tests.

Test

À ce stade, les tests des nouvelles fonctionnalités débutent, ainsi que la gestion des tests de régression ayant échoué. Les résultats de ces tests orientent le cycle de planification suivant.

Éliminez les obstacles à la validation et à la vérification grâce à des tests continus sur les systèmes hôtes et cibles.

L'intégration continue n'est qu'une partie d'un processus de développement continu qui nécessite des tests et une mise en production pour tirer pleinement parti de cette approche.

Test continu Il offre une méthode automatisée et non intrusive pour obtenir un retour d'information immédiat sur une version candidate d'un logiciel. Les tests continus ne se limitent pas à une simple automatisation accrue des tests. Leur objectif est d'intégrer la qualité et la sécurité au produit dans le cadre d'un processus d'intégration, de déploiement et de livraison continus.

Quelques activités de test continu

  • Utilisez l'analyse statique dès le début pour la détection des bogues et des failles de sécurité. Une détection précoce, généralement sur le poste de travail du développeur, évite que les bogues ne gaspillent du temps lors des tests unitaires et ne s'introduisent dans la version finale du logiciel.
  • Appliquer une norme de codage Pour se conformer aux normes d'entreprise et sectorielles requises, telles que MISRA C/C++ ou SEI CERT C. Le respect d'une norme de codage empêche des catégories entières de défauts et de mauvaises pratiques de codage de s'introduire dans la compilation et de devenir des problèmes plus importants par la suite.
  • Automatiser l'exécution des tests sur les systèmes hôtes et cibles Dès que les unités sont codées et que les sous-systèmes intégrés sont prêts, les tests requis pour vérifier ces unités (tests non fonctionnels, de charge, de sécurité et de performance) sont exécutés directement depuis le système d'orchestration d'intégration continue. Les résultats sont ensuite intégrés à la même compilation et agrégés. Les informations de couverture de code (instructions, branches et MC/DC) sont croisées par unité, fichier, test et numéro de compilation.
  • Assurer la traçabilité des exigences L’objectif est de corréler le code, les tests et autres ressources avec les exigences des parties prenantes. Cela permet d’évaluer objectivement les exigences qui fonctionnent comme prévu, celles qui nécessitent une validation et celles qui présentent des risques.
  • Utiliser l'analyse d'impact des tests L'objectif est de concentrer les efforts de test là où ils sont nécessaires. Du point de vue des risques, toute modification de code a un impact qui dépasse le simple cadre du logiciel lui-même. Elle affecte également les tests et les ressources concernés. Lorsque les équipes modifient le code, des questions se posent : faut-il créer de nouveaux tests ou modifier ceux existants ? Quel est l'impact sur les dépendances ? L'automatisation permet aux équipes de se concentrer uniquement sur les tests impactés.
  • Conserver automatiquement les données de test Pour accroître l'efficacité d'une stratégie de tests continus, il est essentiel d'utiliser des données de test de qualité et de suivre de bonnes pratiques de gestion de ces données afin d'améliorer la couverture et d'obtenir des résultats plus précis. Toutefois, la création ou l'accès à ces données peut représenter un défi considérable en termes de temps, d'efforts et de conformité.
  • S'appuyer sur la génération de tests et de données Pour que les tests continus fonctionnent, vous pouvez générer en continu des données adaptées au scénario que vous souhaitez exécuter, au lieu de vous fier aux données de production et d'espérer que toutes les données nécessaires soient au bon endroit. Combiner la génération de données avec la simulation vous permettra d'injecter les bonnes données au bon endroit et au bon moment.

Tests continus sur les systèmes cibles automobiles hôtes et embarqués

Au niveau du développement, le développement de logiciels automobiles ne diffère guère du développement d'applications classiques. Il requiert des environnements de développement intégrés (IDE), des compilateurs, des outils d'analyse statique et dynamique, ainsi que des outils de compilation. Cependant, ces outils ciblent souvent des architectures différentes de celles sur lesquelles ils fonctionnent, par exemple, l'environnement hôte et l'environnement cible. L'utilisation de versions compatibles avec ces outils est essentielle pour garantir un environnement de développement homogène au sein de l'équipe.

Automatisation des tests pour les logiciels automobiles La complexité du lancement et du suivi des tests sur des systèmes embarqués, ainsi que l'accès limité des équipes logicielles au matériel cible, rendent la tâche plus ardue. L'automatisation des tests logiciels est essentielle pour garantir le bon déroulement des tests automobiles, du système de développement hôte au système cible.

Tester les logiciels automobiles est particulièrement chronophage. L'automatisation des tests de régression permet de réaliser d'importantes économies de temps et de coûts. De plus, 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.

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, ce qui signifie que la collecte de données est essentielle à l'exécution des tests.

Une solution comme Parasoft C / C ++test Il est livré avec un banc d'essai optimisé pour minimiser la surcharge supplémentaire liée à l'empreinte binaire et le fournit sous forme de code source, où il peut être personnalisé si des modifications spécifiques à la plateforme sont nécessaires.

Environnements IDE pris en charge

L'un des principaux avantages de la solution Parasoft C/C++test réside dans son intégration dédiée aux environnements de développement intégrés (IDE) et aux débogueurs embarqués, ce qui simplifie et automatise l'exécution des cas de test. Les environnements IDE compatibles incluent :

  • Eclipse
  • Code VS
  • MS Visual Studio
  • Vert Collines Multi
  • Établi Wind River
  • IAR EO
  • BRAS MDK
  • BRAS DS-5
  • TI CCS et plus encore

Test de régression automatisé

La solution Parasoft permet de créer des référentiels de tests de régression sous forme d'ensemble organisé de tests et vérifie automatiquement tous les résultats. Ces tests s'exécutent automatiquement et régulièrement afin de vérifier si des modifications du code altèrent ou perturbent les fonctionnalités testées lors des tests de régression. En cas de modification, ces cas de test échouent afin d'alerter l'équipe. Lors des tests suivants, C++test signale les tâches s'il détecte des changements de comportement par rapport au test initial.

L'équivalence des capacités d'exécution à distance avec les tests sur hôte signifie que les équipes de développement logiciel automobile peuvent bénéficier des mêmes avantages de l'automatisation que pour tout autre type de développement d'applications.

Tirez parti des conteneurs pour créer des environnements de développement cohérents, reproductibles et sécurisés.

Les équipes de développement savent que les flux de travail CI/CD fonctionnent de la même manière, qu'ils soient conteneurisés ou non. L'avantage des conteneurs pour les équipes DevOps réside dans la facilité de déploiement et de mise à jour des applications. Les organisations peuvent adapter le nombre de conteneurs à leurs besoins afin d'accélérer le développement, les tests et la production dans le cadre des méthodologies Agile et DevOps.

Lorsqu'il s'agit de gérer des environnements de développement complexes, en particulier dans l'espace critique pour la sécurité, les équipes sont généralement confrontées aux défis suivants:

  • Synchroniser les mises à niveau pour toute l'équipe vers une nouvelle version d'un outil comme un compilateur, créer une chaîne d'outils, etc.
  • Réagir dynamiquement à un nouveau correctif de sécurité pour la bibliothèque ou le kit de développement logiciel (SDK).
  • Garantir la cohérence de la chaîne d'outils pour tous les membres de l'équipe et de l'infrastructure automatisée ou CI/CD.
  • Possibilité de versionner l'environnement de développement et de le restaurer pour prendre en charge l'ancienne version du produit certifiée avec une chaîne d'outils spécifique.
  • Intégration et mise en place de nouveaux développeurs.

Tous ces problèmes se résolvent facilement grâce aux conteneurs. Chaque conteneur renferme les versions standardisées de la chaîne d'outils de développement, incluant les outils d'analyse statique, le compilateur, l'EDI et les outils de compilation. Ces conteneurs sont mis à jour de manière centralisée et déployés à la demande, selon les besoins, lorsqu'un développeur travaille sur le code d'un projet.

L'homogénéité de l'environnement de développement élimine les erreurs potentielles liées à des versions légèrement différentes des outils installés sur les postes de travail des développeurs. C'est un excellent moyen de garantir que chacun utilise la version correcte de chaque outil, ce qui peut s'avérer crucial ultérieurement pour la conformité réglementaire. Les conteneurs offrent également une solution centralisée pour la mise à jour des outils et assurent leur diffusion immédiate au sein de l'organisation.

Synthèse

Le DevOps dans le domaine des logiciels automobiles exige une visibilité instantanée et continue sur les risques et la qualité de chaque version candidate, ce que les tests continus permettent grâce à un retour d'information automatisé et en temps réel. Bien que la transition du développement traditionnel en cascade vers les méthodes Agile et CI/CD puisse s'avérer complexe pour les systèmes embarqués critiques, elle reste possible avec une préparation adéquate et des pratiques exemplaires. Celles-ci incluent l'automatisation des tests pour favoriser l'intégration continue, la suppression des goulots d'étranglement liés à la vérification et à la validation par des tests sur les systèmes hôte et cible, l'utilisation de conteneurs pour garantir des environnements de développement cohérents et sécurisés, l'extension de la couverture des tests grâce à la génération automatisée et à l'exécution intelligente des tests, et l'exploitation d'un reporting centralisé pour une prise de décision basée sur les données. Ensemble, ces techniques modernes réduisent considérablement les inefficacités des tests manuels dans le secteur automobile et rendent les approches automatisées actuelles bien plus performantes.

Prêt à plonger plus profondément ?

Téléchargez le livre blanc complet