Webinaire en vedette : Tests d'API améliorés par l'IA : une approche de test sans code | Voir le séminaire

Conformité des logiciels ISO 26262 dans l'industrie automobile

Tests unitaires

Vérification et validation du logiciel fait partie intégrante du développement de logiciels automobiles et les tests sont un moyen essentiel de démontrer le comportement correct des logiciels. Les tests unitaires sont la vérification de la conception des modules. Elle garantit que chaque unité logicielle fait ce qu'elle est censée faire.

De plus, les exigences de sûreté et de sécurité peuvent exiger que les unités logicielles ne se comportent pas de manière inattendue et ne soient pas susceptibles d'être manipulées par des entrées de données inattendues.

Le modèle en V du développement logiciel montre la relation entre chaque phase et la validation déduite à chaque étape des tests. Les tests unitaires sont mis en évidence car c'est le sujet de cette page.
Le modèle en V du développement logiciel montrant la relation entre chaque phase et la validation déduite à chaque étape du test.
En termes de modèle de développement classique en V, l'exécution de tests unitaires est une pratique de validation visant à garantir que la conception des modules est correcte. La norme ISO 26262 contient des directives spécifiques sur ce qui doit être testé pour les tests unitaires.

La norme ISO 26262 contient des lignes directrices spécifiques pour les tests conformément aux niveaux d'intégrité de sécurité, où les tests basés sur les exigences, les tests d'interface et l'évaluation de l'utilisation des ressources sont fortement recommandés pour tous les niveaux. L'injection de défauts est recommandée aux niveaux ASIL (Automotive Safety Integrity Levels) A et B inférieurs et fortement recommandée aux niveaux ASIL C et D. De même, la méthode de conduite des cas de test est également spécifiée avec des pratiques recommandées.

ISO 26262 Partie 6, 10.4.2:2018 - Méthodes de vérification de l'intégration du logiciel
ISO 26262 Partie 6, 10.4.2:2018

ISO 26262 Partie 6, 10.4.3:2018 - Méthodes de dérivation des cas de test
ISO 26262 Partie 6, 10.4.3:2018
En les décomposant individuellement, réfléchissez à la manière dont chaque exigence de test unitaire de la norme ISO 26262 peut être satisfaite et accélérée avec des outils d'automatisation de test tels que Parasoft C/C++test. D'ailleurs, si vous utilisez déjà un framework de tests unitaires comme GoogleTest, Cppunit, Boost.Test ou un framework développé en interne, pensez à vous connecter Test CT C/C++. Il ajoute couverture de code, traçabilité des exigenceset génération de rapports à ces cadres de tests ouverts populaires.

Méthodes de test unitaire

Test basé sur les exigences

Ces tests testent directement les fonctionnalités telles que spécifiées dans chaque exigence. Outils d'automatisation des tests doivent prendre en charge la traçabilité bidirectionnelle des exigences par rapport à leurs tests et aux rapports de couverture des tests des exigences pour démontrer la conformité.

Test d'interface

Ces tests garantissent que les interfaces de programmation se comportent et fonctionnent comme spécifié. Les outils de test doivent créer des stubs de fonction et des sources de données pour émuler le comportement des composants externes pour l'exécution automatique des tests unitaires.

Test d'injection de défauts

Ces tests utilisent des entrées inattendues et introduisent des échecs dans l'exécution du code pour examiner la gestion des échecs ou son absence. Les outils d'automatisation des tests doivent prendre en charge l'injection de conditions d'erreur à l'aide de stubs de fonction et la génération automatique de tests unitaires à l'aide d'un ensemble diversifié de conditions préalables, telles que les valeurs minimales, maximales et heuristiques.

Évaluation de l'utilisation des ressources

Ces tests évaluent la quantité de mémoire, d’espace de fichier, d’exécution du processeur ou d’autres ressources matérielles cibles utilisées par l’application.

Pilotes de scénario de test

Analyse des besoins

Chaque exigence génère au minimum un seul cas de test unitaire. Bien que les outils d'automatisation des tests ne génèrent pas de tests directement à partir des exigences, ils doivent prendre en charge la traçabilité bidirectionnelle des exigences vers le code et des exigences vers les tests et conserver les informations sur les exigences, les tests et la couverture du code.

Génération et analyse de classes d'équivalence

Les cas de test doivent garantir que les unités se comportent de la même manière pour une gamme d'entrées, et pas seulement des entrées sélectionnées pour chaque unité. Les outils d'automatisation des tests doivent prendre en charge la génération de cas de test à l'aide de sources de données pour utiliser efficacement une large gamme de valeurs d'entrée. Parasoft C/C++test utilise des fonctions d'usine pour préparer des ensembles de valeurs de paramètres d'entrée pour la génération automatisée de tests unitaires.

Analyse des valeurs limites

Les cas de test générés automatiquement (tels que les valeurs heuristiques, les valeurs limites) utilisent des sources de données pour utiliser une large gamme de valeurs d'entrée dans les tests.

Erreur de devinette

Cette méthode utilise le mécanisme des stubs de fonction pour injecter des conditions de défaut dans les résultats d'analyse du flux de code testé et peut être utilisée pour écrire des tests supplémentaires.

Exécution de tests automatisés et génération de cas de test

L'automatisation des tests offre de grands avantages logiciel automobile embarquéS’éloigner des suites de tests qui nécessitent beaucoup d’intervention manuelle signifie que les tests peuvent être effectués plus rapidement, plus facilement et plus souvent.

Le fait de décharger ces efforts de test manuel permet de libérer du temps pour une meilleure couverture des tests et d'autres objectifs de sécurité et de qualité. Une exigence importante pour l'exécution automatisée des suites de tests est de pouvoir exécuter ces tests à la fois sur les environnements hôte et cible.

Tests basés sur des objectifs pour les systèmes automobiles

L’automatisation des tests pour les logiciels automobiles est plus difficile en raison de la complexité du lancement et de l’observation des tests sur des cibles intégrées, sans parler de l’accès limité au matériel cible dont disposent les équipes logicielles.

L'automatisation des tests logiciels est essentielle pour rendre les tests intégrés réalisables de manière continue, du système de développement hôte au système cible. Tester les logiciels embarqués est particulièrement chronophage. L'automatisation de la suite de tests de régression permet des économies considérables de temps et d'argent. De plus, les résultats des tests et la collecte de données de couverture de code à partir du système cible sont essentiels à 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 conservée. La collecte de données est donc essentielle dans l'exécution des tests.

Parasoft C/C++test est proposé avec son harnais de test optimisé pour prendre en charge un minimum de frais supplémentaires pour l'empreinte binaire et le fournit sous forme de code source, où il peut être personnalisé si des modifications spécifiques à la plate-forme sont nécessaires.

Une vue d'ensemble du déploiement, de l'exécution et de l'observation des tests de l'hôte à la cible dans Parasoft C/C++test et C/C++test CT.
Une vue d'ensemble du déploiement, de l'exécution et de l'observation des tests de l'hôte à la cible dans Parasoft C/C++test et C/C++test CT.
L'un des principaux avantages de la solution de test Parasoft C/C++ réside dans ses intégrations dédiées avec des IDE et des débogueurs intégrés qui rendent le processus d'exécution des cas de test fluide et automatisé. Les environnements IDE pris en charge incluent Eclipse, VS Code, Green Hills Multi, Wind River Workbench, IAR EW, ARM MDK, ARM DS-5, TI CCS, Visual Studio et bien d'autres.

Génération de cas de test automatisée

Explorateur de génération de cas de test automatisés C/C++
Explorateur de génération de cas de test automatisés C/C++

Les outils d'automatisation des tests unitaires prennent universellement en charge une sorte de cadre de test, qui fournit l'infrastructure de harnais pour exécuter des unités de manière isolée tout en satisfaisant les dépendances via des stubs. Parasoft C/C++test ne fait pas exception. Une partie de sa capacité de test unitaire est la génération automatisée de harnais de test et des composants exécutables nécessaires aux tests basés sur l'hôte et la cible.

La génération et la gestion des données de test constituent de loin le plus grand défi des tests unitaires. Les cas de test sont particulièrement importants dans le développement de logiciels critiques pour la sécurité, car ils doivent garantir les exigences fonctionnelles et tester les comportements imprévisibles, la sécurité et les exigences de sûreté. Tout cela tout en satisfaisant les critères de couverture des tests.

Parasoft C/C++test génère automatiquement des cas de test comme le format populaire CppUnit. Par défaut, C/C++test génère une suite de tests par fichier source/en-tête. Il peut également être configuré pour générer une suite de tests par fonction ou une suite de tests par fichier source.

Des définitions de stub sûres sont générées automatiquement pour remplacer les fonctions « dangereuses », qui incluent les routines d'E/S système telles que rmdir(), remove(), rename(), etc. De plus, des stubs peuvent être générés automatiquement pour les définitions de fonctions et de variables manquantes. Des stubs définis par l'utilisateur peuvent être ajoutés selon les besoins.

Bannière bleu foncé avec l'image d'un homme parlant à une femme tenant une tablette à la main dans une salle de serveurs.
Image d'un homme et d'une femme avec une tablette à la main en train de discuter dans une salle de serveurs.

Améliorez vos tests logiciels avec les solutions Parasoft.