Webinaire en vedette : MISRA C++ 2023 : tout ce que vous devez savoir | Voir le séminaire

Conformité aux normes de codage pour les tests de logiciels de conduite autonome

Portrait de Ricardo Camacho, directeur de la conformité de la sûreté et de la sécurité
20 octobre 2023
9 min lire

Les normes de codage pour les véhicules autonomes évoluent constamment en raison de l’évolution de la technologie et des besoins des individus. Poursuivez votre lecture pour en savoir plus sur les défis liés aux tests de logiciels de conduite autonome et sur les meilleures pratiques pour garantir la conformité aux normes de codage.

La conduite autonome ajoute des défis supplémentaires en matière de conformité lors du développement de véhicules par rapport aux exigences traditionnelles. De plus, la conduite autonome est un espace extrêmement compétitif. Celui qui sera le premier à commercialiser un produit certifié aura un avantage significatif sur la concurrence. En tant que tel, il est facile pour les développeurs de considérer l’analyse statique et d’autres initiatives de qualité comme un obstacle au développement.

Bien que l'adhésion culturelle puisse constituer un défi pour les équipes de développement, la formation aux processus de qualité requis pour le développement de logiciels critiques pour la sécurité est cruciale pour des flux de travail plus rapides et moins coûteux avec une meilleure documentation et des taux de conformité plus élevés. Alors, comment abordez-vous les tests de logiciels de conduite autonome ?

Explorons le monde des voitures sans conducteur, l'analyse statique, les exigences de sécurité fonctionnelle, et bien plus encore.

Qu’est-ce que la conduite autonome ?

La conduite autonome, c'est le fait que les véhicules fonctionnent eux-mêmes sans intervention humaine. Cette opération utilise diverses technologies, notamment des algorithmes d’intelligence artificielle, des capteurs, des caméras, des microprocesseurs, etc. Gardez à l’esprit que « conduite autonome » et « autonome » ne sont pas la même chose.

Une voiture autonome ou automatisée nécessitera toujours une intervention humaine à un moment donné. Les véhicules entièrement autonomes peuvent détecter et naviguer dans leur environnement sans intervention humaine. Pour catégoriser le niveau d'autonomie d'une voiture, il existe six niveaux développés par SAE International en 2014.

  • Niveau 0. Le système n'a pas de contrôle continu du véhicule et ne peut intervenir que temporairement ou émettre des avertissements.
  • Niveau 1. Ce système avancé d’aide à la conduite (ADAS) est ce dont disposent de nombreuses voitures pour les suites de sécurité telles que les caméras de recul, le régulateur de vitesse adaptatif, les alertes de sortie de voie, etc.
  • Niveau 2. Ce système ADAS nécessite que l'humain agisse en tant que conducteur, mais peut diriger et accélérer ou freiner pendant la conduite.
  • Niveau 3. Cette catégorie de système de conduite autonome ou de système de conduite automatisée (ADS) peut faire des choses comme garer une voiture, mais les humains doivent être prêts à conduire le véhicule car ils restent le principal opérateur de la voiture.
  • Niveau 4. Le véhicule est en grande partie autonome et nécessite peu d’attention d’un conducteur humain.
  • Niveau 5. Un véhicule entièrement autonome capable de rouler dans toutes les situations. Au moment d’écrire ce blog, nous n’avons pas encore pleinement atteint ce niveau de conduite autonome.

Ce système de niveaux suggère que l’automatisation augmente de façon linéaire, ce qui n’est pas toujours le cas. Cependant, il reste un outil utile pour classer les types d’automatisation dans les véhicules.

Qu’est-ce qu’un logiciel de conduite autonome ?

Un logiciel de conduite autonome désigne tout logiciel utilisé sur les plateformes de conduite autonome. Cela va bien au-delà de la simple intelligence artificielle et de l’apprentissage automatique. Cela inclut également les éléments trouvés dans les véhicules capables de conduire non autonomes, tels que les unités de commande électroniques ou les calculateurs. Ces ressources informatisées embarquées contrôlent tout, des freins aux portes en passant par les systèmes d'aide à la conduite. Or, ce sont les réseaux de neurones qui alimentent la conduite autonome.

Ces réseaux peuvent trouver des modèles de données que les algorithmes d’apprentissage automatique peuvent analyser et traduire en actions. Un exemple de situation pourrait être le système de la voiture autonome qui voit un feu vert passer au jaune et ralentir en réponse.

Comment fonctionne un logiciel de conduite autonome ?

Les logiciels de conduite autonome utilisent de nombreux types de capteurs pour percevoir et analyser les données. Ils peuvent déterminer où se trouve un véhicule dans l’espace physique ou par rapport à des objets comme des bordures de trottoir ou d’autres voitures. D'autres logiciels tracent un chemin pour le véhicule vers un emplacement spécifique ou contrôlent l'accélération, le freinage, la direction, etc.

C'est comme si vous conduisiez un véhicule, sauf qu'il s'agit d'une série de programmes, d'algorithmes et d'IA qui le font pour vous.

Qu'est-ce que les tests de logiciels de conduite autonome ?

Comme tout système conçu pour un usage humain, les plateformes de conduite autonome nécessitent des tests rigoureux et répondent à des normes spécifiques. Par exemple, ISO 26262 agit comme norme de sécurité fonctionnelle automobile pour l’ensemble du processus de développement de produits automobiles. Il aide les constructeurs automobiles à détecter, gérer et atténuer les effets des pannes système et matérielles pour garantir la sécurité. Cependant, cela ne suffit pas à couvrir tous les défis techniques liés aux véhicules autonomes. Ils peuvent fonctionner comme prévu, mais ne parviennent pas à faire face à des scénarios réels tels que des conditions météorologiques extrêmes ou le comportement des personnes. Par exemple, considérons le comportement d’un enfant qui se précipite dans la rue ou celui d’un adulte ivre.

Au lieu de nombreux scénarios intéressants et pour faciliter l'analyse du comportement environnemental et humain, la norme automobile ISO 21448:2021 a été ajoutée pour fournir des lignes directrices sur les mesures de conception, de vérification et de validation applicables, ainsi que sur les activités pendant la phase d'exploitation qui sont nécessaires pour atteindre et maintenir la sécurité de la fonctionnalité prévue (SOTIF).

AUTOSAR, ou Automotive Open System Architecture, est un partenariat d'organismes intéressés qui recherchent et développent une architecture logicielle standardisée pour les calculateurs embarqués dans les véhicules. De plus, la MISRA, la Motor Industry Software Reliability Association, crée des lignes directrices permettant aux développeurs de créer des composants électroniques pour l'industrie automobile.

Par conséquent, tester un logiciel de conduite autonome ne se limite pas à vérifier que les composants logiciels garantissent la sécurité même en cas de panne. Cela comprend le test de la réponse autonome du véhicule aux conditions réelles et garantit la sécurité. De plus, les organisations doivent prouver que le logiciel autonome satisfait à toutes les exigences réglementaires.

Comment les véhicules autonomes sont-ils testés ?

Les véhicules autonomes nécessitent des simulations de cas de test réels. Ceux-ci incluent des environnements de conduite réalistes, des modèles d’autres véhicules et des situations auxquelles les voitures automatisées seraient confrontées. Cependant, comme il s’agit de systèmes informatisés, il faut également s’inquiéter des cyberattaques.

Comprendre les normes de codage pour les logiciels de conduite autonome

Les normes de codage pour les véhicules autonomes évoluent constamment grâce à la technologie et aux besoins des personnes qui évoluent également. Malgré cela, les développeurs peuvent toujours s’appuyer sur les normes de conformité traditionnelles critiques en matière de sécurité lorsqu’ils écrivent du code pour les voitures de demain.

Normes de codage communes dans l'industrie du logiciel

Il existe un certain nombre de normes de codage communes aux logiciels destinés à diverses industries. Cependant, une norme de codage en elle-même n’est qu’un ensemble de règles de codage, de bonnes pratiques et de lignes directrices selon lesquelles les développeurs doivent écrire du code.

Cela va au-delà des conseils généraux tels que limiter l’utilisation de conventions de dénomination globales ou standardisées. Il existe des lignes directrices ou des bonnes pratiques émanant d'individus et d'entreprises possédant des décennies d'expérience dans le développement de logiciels qui garantissent une augmentation de la qualité du code.

De l'automobile aux dispositifs médicaux, en passant par l'aviation, le ferroviaire et bien plus encore, les industries ont adopté les normes de codage de sûreté et de sécurité C et/ou C++. Certains d'entre eux incluent :

  1. MISRA C 2023 est la dernière norme de codage du langage de programmation C pour la sécurité, la sûreté, la fiabilité et la portabilité du code pour les systèmes embarqués.
  2. MISRA C++ 2023, qui est la norme de codage qui sera bientôt annoncée pour la sécurité du code C++ 17, la fiabilité de la sécurité et la portabilité des systèmes embarqués.
  3. AUTOSAR C ++ 14 est la norme de codage pour la sûreté, la sécurité, la fiabilité et la portabilité du code C++ 14 pour les systèmes embarqués. Il sera remplacé par MISRA C++ 2023.
  4. SEI CERT C est la norme de codage sécurisée du langage de programmation C permettant d'identifier les risques de sécurité des logiciels et de réduire efficacement les vulnérabilités des applications développées.
  5. SEI CERT C++ est la norme de codage sécurisé du langage de programmation C++ qui contribue à accroître la sécurité des logiciels et à réduire les vulnérabilités des applications développées.

Normes de codification spécifiques à la conduite autonome

En matière de conduite autonome, les équipes doivent utiliser les normes de codage répertoriées précédemment. Ce sont celles-ci qui seraient fortement recommandées, mais en raison de la nature des véhicules autonomes, ces normes de codage de sûreté et de sécurité ne suffisent pas.

D'autres normes, comme CWE et OWASP, comportent des règles et des lignes directrices en matière de codage, mais vont au-delà de la portée du code. Ils prennent également en compte le flux de travail global de développement, les politiques organisationnelles et les processus que les utilisateurs doivent suivre pour garantir la sûreté et la sécurité des véhicules autonomes.

Des normes et réglementations supplémentaires entrent en jeu lors de l’examen des véhicules autonomes et des systèmes d’IA avancés impliqués dans les processus autonomes. Cette liste n'est pas exhaustive, mais fournit des conseils généraux :

  1. ISO 26262 , sécurité fonctionnelle des véhicules routiers
  2. ISO 21434 , cybersécurité des véhicules routiers
  3. ISO 21448 , SOTIF (Sécurité des Fonctionnalités Prévues)
  4. SPICE automobile, gestion de la qualité
  5. CEE-ONU WP.29, cybersécurité des véhicules

Les principaux aspects des véhicules autonomes pris en compte par ces normes et d’autres sont les suivants :

  • Contraintes en temps réel. L’automatisation de la conduite nécessite le traitement des données en temps réel. En tant que tels, les systèmes doivent être capables de traiter rapidement des quantités importantes de données pour prendre des décisions en une fraction de seconde.
  • Cybersécurité. Un véhicule piraté est une mauvaise nouvelle. Les normes de codage devraient garantir des imprévus pour de tels scénarios.
  • Interactions homme/machine. Les humains sont imprévisibles. En conséquence, les développeurs devront anticiper l’inattendu.

Défis liés aux tests de logiciels de conduite autonome

La nature critique inhérente à la sécurité du développement de logiciels de conduite autonome conduit naturellement à la nécessité de tests approfondis et continus. Mais, comme tout type de développement logiciel, la création de systèmes basés sur l’IA comporte ses propres pièges et défis.

  • Conformité à plusieurs normes de codage. Cette tâche nécessite une planification, des tests cohérents et que les développeurs soient attentifs à la manière dont ils écrivent le code.
  • Risques de cybersécurité. Tous les systèmes informatisés sont vulnérables aux risques de sécurité. Un mauvais acteur qui reprend un véhicule autonome, par exemple, est une situation réelle qui doit être anticipée tout au long du développement et des tests.
  • Code hérité Qu'il s'agisse de votre propre ancien code ou de quelque chose hérité, le code hérité peut constituer un obstacle au développement. Abordez-le avec deux mantras : « nettoyer au fur et à mesure » et « zéro nouvelle violation ».
  • Collecte de données sur les véhicules. Des tonnes de nouvelles données devront être collectées, analysées et examinées en temps réel pour une conduite véritablement autonome. En tant que tel, des systèmes robustes autour de la collecte de données sont importants.
  • Dette technologique. Certains développeurs souhaitent travailler plus efficacement en ne rendant pas tout ce qu'ils écrivent conforme aux normes de codage avant les tests. Cela pourrait conduire à prototyper quelque chose avec un code non conforme à la sécurité, entraînant des retards. Il vaut mieux nettoyer au fur et à mesure.
  • Limites des tests. Tester un seul prototype à la fois ralentit toutes les mises à jour possibles et les erreurs peuvent s'avérer coûteuses.
  • Infrastructure conviviale pour l’automatisation. Les routes et autoroutes publiques dans leur état actuel constituent un obstacle important pour les véhicules autonomes. Ils sont conçus autour de conducteurs humains. Le développement de logiciels pour ces systèmes peut ainsi être entravé.
  • Technologie en évolution. L’IA et l’apprentissage automatique évoluent rapidement, tout comme les technologies auxiliaires de la conduite autonome telles que les capteurs, les radars, etc.

Meilleures pratiques pour garantir la conformité aux normes de codage

Parvenir à la conformité n’est pas une tâche facile. Même les professionnels les plus expérimentés peuvent échouer dans une certaine mesure. Mais il existe des bonnes pratiques générales en dehors du développement de logiciels de conduite autonome qui profitent à tous les ingénieurs logiciels.

Établir des normes de codage dès le départ

Quels que soient la portée, le calendrier ou le budget du projet, il est crucial de définir dès le départ des attentes et des normes. Non seulement cela garantira que votre code sera plus facilement compris par tous les membres d’une équipe, mais cela garantira également qu’il y aura moins de problèmes liés à la résolution rapide des bogues. Personne n’aura à jouer au téléphone ou à un jeu de devinettes.

Examens et audits réguliers du code

Tout comme les tests continus, la révision régulière du code vous permet de mieux appliquer les normes et de résoudre les problèmes plus tôt. Cela vous permet de détecter des éléments tels que l'imbrication profonde, le code illisible, les conventions de dénomination correctes, etc.

Formation continue et développement des compétences

Posséder un état d'esprit étudiant, même en tant qu'expert dans un domaine, peut vous aider à renforcer et à améliorer vos capacités. En tant que tel, il est avantageux d’investir dans vos développeurs en leur offrant une éducation et une formation allant au-delà de ce pour quoi ils auraient pu être initialement embauchés. De plus, la technologie évolue constamment. Cela signifie que votre équipe doit suivre le rythme.

Utiliser l'automatisation et les outils

Les tests d'analyse statique ne sont pas la chose préférée de tous les développeurs. Mais l’automatisation a permis de tirer beaucoup plus facilement parti des avantages de ces types de tests. Utiliser tous les outils de l’arsenal, y compris l’IA et l’apprentissage automatique, est une évidence dans une configuration Agile ou Shift-Left.

Documentation et rapports

Encore une fois, le moyen le plus simple d’éviter les problèmes est de les prévenir en premier lieu. La documentation et les rapports permettent aux équipes d'établir des références croisées si nécessaire, au lieu de prendre plus de temps pour retrouver la personne qui a initialement écrit le code. Ou pire, ils pourraient simplement faire une hypothèse et avancer sur quelque chose qui ne sera pas utilisable.

Avantages des tests

En introduisant l’analyse statique avec les normes de codage MISRA C++ 2023, qui seront bientôt annoncées, et les anciennes normes de codage AUTOSAR C++ 14, la conformité en tant que processus durable peut sembler intimidante. Mais les tests restent partie intégrante des bonnes pratiques, même dans un domaine aussi innovant que la conduite autonome.

Tests à l'aide d'outils tels que Test C/C++ de Parasoft intègre des avantages dans votre flux de travail, notamment :

  1. Certification et conformité. Toutes les organisations automobiles reconnaissent la norme ISO 26262 comme la principale norme de sécurité fonctionnelle qui simplifie l'approbation et la certification. Les logiciels de voiture autonome doivent être approuvés et certifiés avant d’être produits en série. Des tests précoces et fréquents peuvent donc vous permettre d’obtenir la certification plus rapidement.
  2. La qualité à moindre coût. La création d'un code conforme et de haute qualité dès le début et les tests le plus tôt possible permettent de résoudre plus rapidement les problèmes. Vous éviterez les pièges courants car les développeurs commenceront à adopter les meilleures pratiques dès le début. Il est essentiel de tester pendant l'écriture du code pour créer rapidement des logiciels complexes. L’analyse statique est l’une des méthodes qui s’intègre bien dans ce tableau.
  3. Responsabilité et documentation. Avec des millions de voitures sur les routes, des accidents vont se produire et certains d’entre eux seront imputés à des erreurs logicielles. Les organisations doivent être en mesure de montrer qu’elles ont fait tout ce qui était pratiquement possible pour prévenir les risques pour la sécurité. Disposer d’un processus documenté de conformité aux normes de codage s’avérera bénéfique.
  4. Tests dans des systèmes en boucle fermée. La création de cas de test dans des environnements virtuels permet de réduire les coûts et le temps de test. La simulation de diverses situations à des fins d'analyse permet des ajustements infimes ou des révisions majeures tout au long du processus de test pour permettre des données plus exploitables.

Tendances et considérations futures pour les tests de logiciels de conduite autonome

De nombreuses entreprises tentent d’être les premières à proposer un véhicule véritablement autonome sur le marché. Cette technologie nécessite des tests complets pour protéger la vie, fonctionner correctement et s’adapter à la vie quotidienne.

Bien qu'il ne s'agisse pas d'un document officiel de la National Highway Traffic Safety Administration (NHTSA), l'Institute of Electrical and Electronics Engineers (IEEE) a publié un ensemble préliminaire de lignes directrices pour les normes ADS en 2022. Projet de norme IEEE P2846 pour les hypothèses relatives aux modèles relatifs au comportement des véhicules automatisés liés à la sécurité cherche à résoudre les problèmes uniques liés à l’autonomie et à la conduite. Cependant, disposer d’une ligne directrice standard pour ce cas d’utilisation n’est pas la seule considération future.

Comme mentionné précédemment, les tests de logiciels de conduite autonome s’appuient également sur le monde réel pour accueillir de véritables voitures autonomes. La technologie traditionnelle et les manières dont nous naviguons devront peut-être changer avec l’adoption généralisée de la conduite automatisée. Cela soulève la question suivante : et si les villes étaient conçues autour de l’utilisation humaine et non du stationnement des voitures ?

Résumé

Incorporation analyse statique ou d'autres types de tests continus dans votre flux de travail fournissent des résultats tangibles. Mais avec des outils tels que l'une des nombreuses solutions de Parasoft, atteindre la conformité en matière de sécurité avec les logiciels pour voitures automatisées est d'autant plus réalisable. N'oubliez pas de procéder comme suit :

  1. Expliquez clairement pourquoi vous testez.
  2. Réglez le coût des versions retardées.
  3. Rendre l’adoption aussi pertinente et fluide que possible.
  4. Soyez intentionnel lorsque vous implémentez votre outil d’analyse statique.
  5. Sélectionnez les bonnes règles et vérificateurs pour un flux de travail qui s'intègre dans les processus des développeurs.

Avec pour objectifs d’être efficace, minutieux et orienté développeur, vous atteindrez la conformité en matière de sécurité plus tôt que vous ne le pensez.

Découvrez le rôle crucial que joue la norme ISO 26262 dans l'industrie automobile pour fournir des logiciels sûrs et sécurisés.