Webinaire en vedette : Tests d'API améliorés par l'IA : une approche de test sans code | Voir le séminaire
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.
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.
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.
Génération de cas de test automatisée
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.
Améliorez vos tests logiciels avec les solutions Parasoft.
Explorez les chapitres
- Introduction "
- 1. Aperçu »
- 2. Analyse statique »
- 3. MISRA »
- 4. AUTOSAR C++ 14 »
- 5. SEI/CERT »
- 6. CWE »
- 7. Tests unitaires »
- 8. Tests de régression »
- 9. Tests d'intégration de logiciels »
- 10. Test du système logiciel »
- 11. Couverture du code structurel »
- 12. Matrice de traçabilité des exigences »
- 13. Qualification des outils »
- 14. Rapports et analyses »