Articles techniques

Workflow ISO 26262 pour les applications de conduite autonome avec MATLAB : directives et bonnes pratiques

Par Lars Rosqvist, MathWorks


L'utilisation de Simulink® et Stateflow® pour le développement de logiciels conformes à la norme ISO® 26262 est bien établi pour les calculateurs automobiles (ECU). Il existe une tendance croissante, en particulier dans les applications de conduite automatisée, à mettre en œuvre des designs software à l'aide de fonctions MATLAB® ainsi que de blocs Simulink et de diagrammes Stateflow. Cet article propose les meilleures pratiques pour utiliser un workflow centré sur MATLAB afin de vérifier la conformité aux normes logicielles ISO 26262 [1]. Ces bonnes pratiques complètent le workflow de référence ISO 26262 utilisant l’approche Model-Based Design illustré dans IEC Certification Kit.

Modèle de modélisation recommandé

Dans cet article, nous utilisons un modèle de développement logiciel dans lequel un modèle Simulink intègre un bloc fonctionnel MATLAB (Figure 1). Le modèle Simulink de couche supérieure contient tous les paramètres de configuration pour la génération de code. Le bloc MATLAB Function appelle des fonctions MATLAB externes.

Capture d'écran d'un modèle MATLAB de modélisation utilisant du code MATLAB externe.

Figure 1. Modèle de modélisation à l'aide de code MATLAB externe.

Ce modèle de modélisation exploite tous les outils de vérification et de validation disponibles pour les modèles Simulink tout en permettant l'implémentation de fonctionnalités à l'aide du langage MATLAB [2]. Il exploite également des fonctionnalités étendues disponibles dans MATLAB. Par exemple, le développement ADAS est généralement mis en œuvre à l'aide de MATLAB, car des fonctionnalités mathématiques complexes peuvent être exprimées de manière concise et élégante.

Il existe d'autres façons d'utiliser MATLAB [3] dans un environnement de développement de produits critiques pour la sécurité, ce qui n'est pas mentionné dans cet article.

Workflow de référence MATLAB ISO 26262 : présentation

Comme mentionné précédemment, le workflow décrit dans cet article est basé sur le workflow de référence ISO 26262 dans le kit de certification IEC (Figure 2).

Un diagramme montrant un workflow d'exigences système avec la rédaction des exigences, le développement de l’architecture, la modélisation, la génération de code et un compilateur avec les produits utilisés pour chaque processus.

Figure 2. Activités de vérification et de validation spécifiées dans le kit de certification IEC.

Le workflow basé sur MATLAB comprend des recommandations supplémentaires pour les activités de vérification et de validation suivantes :

  • Rédaction des exigences et vérification de l'architecture
  • Analyse de modèle statique
  • Tests MIL et tests SIL ou PIL comparatifs
  • Analyse statique de code
  • Documentation

Rédaction des exigences et vérification de l'architecture

La norme ISO 26262 exige la preuve que toutes les exigences ont été mises en œuvre et testées. Dans le workflow de référence ISO 26262, les activités de vérification de l'architecture et de rédaction d'exigences mises en évidence dans la figure 3 fournissent cette preuve.

Le même diagramme que la figure 2 mettant en évidence les activités de liaison des exigences : vérification de l'architecture et rédaction des exigences.

Figure 3. Activités de liaison reliant les exigences.

Lier les exigences au code MATLAB

À l'aide de Requirements Toolbox™, vous pouvez lier les exigences aux lignes de code dans les fonctions MATLAB de la même manière que vous liez les exigences aux blocs Simulink. La différence est que la vérification existante des exigences manquantes ne vérifie pas le code MATLAB externe. Il est recommandé d'implémenter une vérification Model Advisor qui recherche les conteneurs MATLAB non liés à une exigence. Un conteneur est généralement un fichier MATLAB externe ou une fonction MATLAB, selon la taille du fichier.

BONNES PRATIQUES pour le workflow MATLAB

Implémentez les vérifications Model Advisor pour rechercher les conteneurs MATLAB non liés aux exigences.

Analyse de modèle statique

Chaque composant du modèle de mise en œuvre doit être vérifié pour sa lisibilité, sa compréhensibilité et sa testabilité (Figure 4). Simulink Check™ est utilisé pour évaluer la conformité du modèle à la norme ISO 26262 et aux directives de haute intégrité de MathWorks.

Le même diagramme que la figure 2 mettant en évidence les activités d’analyse de modèles statiques.

Figure 4. Activités d'analyse de modèle statique spécifiées dans le kit de certification IEC.

Sous-ensemble de langage

La programmation dans MATLAB peut impliquer l'utilisation de fonctions de plusieurs boîtes à outils différentes. MATLAB étant un langage puissant doté d’un haut degré d’abstraction, vous pouvez développer des fonctionnalités complexes avec quelques lignes de code. Dans certains cas, une seule ligne de code MATLAB peut donner naissance à plusieurs lignes de code C, ce qui rend le code généré difficile à vérifier avec une couverture complète. Vous devez savoir que la fonctionnalité que vous implémentez est testable. La norme ISO 26262 stipule l'utilisation d'un sous-ensemble de langage (tableau 1 de la norme ISO 26262) en fonction du type de fonctions que vous utilisez.

Nous vous recommandons de suivre les étapes suivantes pour répondre aux exigences du sous-ensemble de langage :

  • Évaluez les fonctions MATLAB utilisées pour vous assurer qu'aucune d'entre elles ne nécessite un effort de vérification élevé. Model Advisor peut être utilisé pour identifier l’utilisation de fonctions non recommandées en raison de la complexité du code.
  • Remplacez les fonctions MATLAB non recommandées par des implémentations plus simples. Ces fonctions plus simples seront plus faciles à tracer et à tester.

BONNES PRATIQUES pour le workflow MATLAB

Lors de l'examen des modèles, recherchez les opérations ou fonctions MATLAB signalées par la vérification Model Advisor himl_0013. Si possible, remplacez-les par d'autres fonctions.

Si les fonctions ne peuvent pas être remplacées, elles doivent être testées séparément.

  • Vérifiez la fonction en effectuant des tests unitaires séparés avec une couverture élevée. Une fois la couverture atteinte, justifiez l’utilisation de ces fonctions en faisant référence aux tests unitaires externes.

BONNES PRATIQUES pour le workflow MATLAB

Si des opérations ou des fonctions MATLAB qui génèrent beaucoup de code C sont identifiées et ne peuvent pas être remplacées, testez les fonctions en externe avec des tests unitaires. Rédigez des justifications liées à l'endroit où les fonctions sont utilisées et créez un lien vers l'endroit où les résultats des tests sont stockés.

Typage de données fort

La norme ISO 26262 exige que toutes les variables soient fortement typées. Model Advisor vérifie les modèles Simulink pour les blocs fortement typés, y compris l'interface avec le bloc MATLAB Function, mais il ne vérifie pas les fonctions MATLAB externes. Pour surmonter cet obstacle, écrivez une vérification pour vérifier que toutes les fonctions MATLAB sont fortement typées. Il est particulièrement important de vérifier le type et la dimension des données.

BONNES PRATIQUES pour le workflow MATLAB

Ajoutez une vérification Model Advisor pour vous assurer que toutes les variables de votre code MATLAB sont fortement typées.

Tests MIL et tests SIL ou PIL comparatifs

Les tests comparatifs (d’équivalence) permettent de prouver que le code généré se comporte de la même manière que le modèle, comme le préconise la table 7 de la norme ISO 26262, intitulée Méthodes de vérification des unités logicielles. Pour le code objet, utilisez les tests de processor-in-the-loop (PIL) et pour le code C généré, utilisez le software-in-the-loop (SIL) (Figure 5). Les cas de test doivent être les mêmes que ceux utilisés dans les tests model-in-the-loop (MIL). Pour la vérification de l'unité, utilisez SIL. Pour les tests d'intégration, il est recommandé de les exécuter également sur le matériel cible afin de vérifier l'ensemble de la chaîne d'outils de développement.

Le même diagramme que la figure 2 mettant en évidence les activités de vérification du modèle : Tests MIL, tests PIL comparatifs et tests SIL comparatifs.

Figure 5. Activités de vérification du modèle spécifiées dans le kit de certification IEC.

Prévention des fonctionnalités non intentionnelles

Pour prouver qu'aucune fonctionnalité non intentionnelle n'a été ajoutée lors de la génération de code, mesurez la couverture des tests pendant les tests de modèle et de code. La couverture des tests est généralement réalisée à l'aide de tests consécutifs avec Simulink Coverage™. La couverture est utilisée, selon la norme ISO 26262, pour évaluer l'exhaustivité de la vérification et fournir la preuve que les objectifs des tests unitaires sont atteints.

Selon la norme ISO 26262, le code avec une couverture manquante doit être revu et justifié. Lors du développement à l'aide de blocs Simulink, les justifications peuvent être connectées au modèle, ce qui signifie que les justifications sont conservées entre les exécutions de vérification. Cette option n'est pas disponible pour les fonctions MATLAB externes. Pour justifier la couverture manquante pour une fonction MATLAB, ajoutez un filtre de couverture au code, puis connectez-le soit au harnais de test, soit au fichier de test dans Simulink Test™. Notre recommandation est de connecter le fichier de filtre de couverture au fichier de test (Figure 6).

Une capture d'écran du navigateur de test mettant en évidence le nom de fichier du filtre de couverture.

Figure 6. Filtre de couverture connecté au fichier de test.

BONNES PRATIQUES pour le workflow MATLAB

Suivez les justifications de la couverture manquante dans le code MATLAB externe via un filtre de justification connecté au fichier de test.

Analyse statique de code

Comme indiqué dans la norme ISO 26262, les analyses statiques incluent des activités telles que la recherche dans le texte du code source ou dans le modèle de patterns correspondant à des défauts connus ou de conformité aux directives de modélisation ou de codage. Des analyses de code statique sont effectuées sur le code généré (Figure 7).

Le même diagramme que la figure 2 mettant en évidence l'analyse de code statique avec Polyspace.

Figure 7. Activités d'analyse de code statique spécifiées dans le kit de certification EIC.

Conformité à la norme MISRA C

Pour évaluer la conformité à la norme MISRA® C pour le code généré à partir de MATLAB, utilisez un outil d'analyse de code statique tel que Polyspace Bug Finder™ pour détecter le code non conforme à MISRA C et étudier les résultats manuellement. Si le code non conforme provient d'une fonction MATLAB intégrée, vous avez deux options :

  • Remplacer la fonction MATLAB intégrée par une fonction réécrite
  • Rédiger une justification pour l’avertissement MISRA C

Notre recommandation est de remplacer la fonction, si possible. Pour vous assurer que la fonction remplacée n'est pas utilisée par d'autres développeurs, implémentez une vérification Model Advisor pour les fonctions non recommandées.

BONNES PRATIQUES pour le workflow MATLAB

Lors de l'examen des rapports d'analyse de code statique, vérifiez si les avertissements MISRA proviennent des fonctions MATLAB intégrées. Si ces fonctions peuvent être remplacées, ajoutez une vérification Model Advisor qui avertit lorsque des fonctions non recommandées sont utilisées. Si ce n'est pas le cas, justifiez le problème dans le rapport d'analyse du code statique.

Documentation

Dans le dossier de sécurité final qui fournit la preuve de la conformité à la norme ISO 26262, vous devez documenter chaque étape du processus de vérification, des exigences à la vérification. La documentation doit inclure des descriptions du design des fonctionnalités. La figure 8 met en évidence certaines des activités qui doivent être incluses dans la description du design.

Le même diagramme que la figure 2 mettant en évidence la rédaction des exigences, le développement de l'architecture et la modélisation.

Figure 8. Activités à inclure dans la documentation du design.

Description du design du système

Simulink Report Generator™ comprend un modèle de rapport de design système prédéfini. Ce modèle est généralement adéquat pour documenter un composant développé dans Simulink, mais pas pour documenter les fonctions MATLAB externes car elles ne sont pas incluses dans la description du design système par défaut. Nous vous recommandons donc de personnaliser le modèle pour inclure le code MATLAB externe.

BONNES PRATIQUES pour le workflow MATLAB

Personnalisez le modèle System Design Description pour inclure du code MATLAB externe.

Considérations relatives à la SOTIF

Dans des systèmes complexes tels que l'ADAS, une fonction peut se comporter comme prévu mais néanmoins provoquer un comportement dangereux. Conformément à la norme ISO 21448 relative à la sécurité de la fonctionnalité prévue (SOTIF), vous pouvez résoudre ce problème en intégrant des activités de vérification et de validation supplémentaires dans l’approche Model-Based Design. Nous vous recommandons d'ajouter des tests de conditions de fonctionnement randomisés pour étendre les tests et inclure des cas d'utilisation inconnus. Ces tests aléatoires doivent vérifier le comportement du modèle de mise en œuvre et du code objet intégré par rapport aux exigences du système.

Le kit de certification IEC inclut la prise en charge de SOTIF. En ce qui concerne la norme SOTIF, il n'y a pas de différences majeures entre les workflows Simulink et MATLAB. Le kit de certification IEC mis à jour comprend des informations sur l'utilisation d'Automated Driving Toolbox™ pour les tests système.

Résumé

Dans le développement de logiciels conformes à la norme ISO, les différences entre un développement entièrement basé sur Simulink et un workflow plus centré sur MATLAB ne sont pas grandes. La principale différence est la nécessité d’éviter l’utilisation de fonctions non recommandées. Il existe des contrôles spécifiques pour identifier ces fonctions MATLAB dans les contrôles ISO 26262 de Simulink Check, garantissant que l'implémentation de MATLAB génère du code adapté aux applications de haute intégrité. Les autres défis liés à l'utilisation d’un workflow centré sur MATLAB pour la norme ISO 26262 peuvent être résolus par des solutions de contournement simples telles que l'utilisation de filtres de justification ou la connexion des exigences à plusieurs niveaux du modèle.

[1] Les recommandations de cet article sont basées sur MATLAB R2024a. Si vous utilisez une autre version, contactez votre représentant MathWorks pour en savoir plus sur ses capacités d'utilisation de MATLAB et Simulink pour ISO 26262.

[2] Les développeurs choisissent parfois MATLAB plutôt que Simulink car ils pensent que Simulink ne prend pas en charge les différences et les fusions. Si vous travaillez dans Simulink, vous pouvez utiliser les outils intégrés pour gérer les différences et les fusions. Si votre équipe utilise un système de contrôle de version distribué comme Git, vous pouvez effectuer une fusion à trois en cas de conflit.

[3] Dans MATLAB R2023a, MATLAB Test™ a été publié. MATLAB Test fournit des outils pour développer, exécuter, mesurer et gérer des tests dynamiques du code MATLAB. Cela donne aux développeurs la possibilité de rester dans l'environnement MATLAB lors du développement de software à haute intégrité. MATLAB Test vous permet de répondre aux spécifications des applications réglementées et fait partie du kit de certification IEC.

A propos de l'auteur

Lars Rosqvist est responsable d'équipe senior dans le domaine automobile chez MathWorks. Il assiste les clients utilisant l’approche Model-Based Design et MATLAB dans différents secteurs. Il est certifié en tant que professionnel de la sécurité fonctionnelle par le TÜV SÜD et accompagne depuis plusieurs années ses clients avec la certification ISO 26262. Avant de rejoindre MathWorks, Lars a travaillé comme développeur de logiciels dans l'industrie automobile, développant des systèmes de climatisation. Lars a obtenu sa maîtrise en physique appliquée et en génie électrique de Linköping University of Technology, en Suède.

Publié en 2024

Consulter des articles relatifs à des secteurs associés