Découvrez GoogleTest certifié TÜV avec Agentic AI pour les tests C/C++ !
Plus de détails »
Aller à la section
Blog Parasoft
Tester la robustesse des logiciels est un moyen d'améliorer l'assurance qualité. Lisez pour comprendre quels types de méthodologies de test peuvent améliorer la robustesse des systèmes logiciels.
Aller à la section
Lorsque la plupart des gens prennent le volant d'une voiture, ils ne s'inquiètent pas de la défaillance des freins. Ils ne s'inquiètent pas non plus des blessures causées par un dysfonctionnement lorsque leur enfant reçoit un nouveau jouet. En fait, la plupart des gens ne s'inquiètent pas du tout des dysfonctionnements du système au cours de leur vie quotidienne.
C'est parce qu'un développeur logiciel ou un ingénieur en contrôle qualité comme vous a pris en compte les problèmes de qualité. Si l'objectif est de fournir des systèmes logiciels fiables et de haute qualité , des tests doivent être effectués. Sans tests, les problèmes de qualité ne disparaîtront pas, car plus un produit est fiable, plus il est sûr.
L'un des processus que nous utilisons pour tester la qualité et la fiabilité est appelé test de robustesse, le degré auquel un système fonctionne correctement en présence d'entrées exceptionnelles ou de conditions environnementales stressantes. Si vous êtes nouveau dans ce genre de test, attachez-vous.
Les ingénieurs d'assurance qualité seront responsables d'une défaillance du système, ou pire si cette défaillance provoque une blessure. Mais cela ne permet pas aux développeurs de s'en tirer. Les développeurs doivent créer et tester la robustesse avec les autres tests qu'ils effectuent pendant le processus de validation, tels que les tests de référence.
Les systèmes embarqués critiques pour la sûreté et la sécurité nécessitent des tests approfondis à chaque étape du cycle de vie du développement logiciel, depuis la conception du système et de haut niveau jusqu'aux tests unitaires et aux tests d'intégration.
Lorsque la robustesse des tests logiciels se présente, cela signifie généralement que le système déployé ou encore en cours de développement fonctionne bien dans des conditions normales ou ordinaires. Les tests robustes consistent à améliorer la fiabilité et à trouver ces cas critiques en entrant des données qui imitent les conditions environnementales extrêmes pour aider à déterminer si le système est suffisamment robuste pour fonctionner.
Les tests de robustesse sont plus ciblés que l'analyse comparative de la fiabilité. Les tests robustes consistent à déterminer si nous pouvons ou non lancer le logiciel et s'il est capable de gérer les abus et de fonctionner correctement. Il ne s'agit pas de ces scénarios de journée ensoleillée où tout fonctionne parfaitement. Nous effectuons des tests de robustesse pour découvrir ce qui manque aux autres tests. Notre objectif est de créer des environnements de test capables d'évaluer la robustesse d'un système logiciel. Il est important de suivre les métriques des tests logiciels pour mesurer l'efficacité de vos tests.
En informatique, les programmeurs sont habitués à créer des algorithmes qui font fonctionner les systèmes informatiques. Nous ne sommes pas habitués à créer des algorithmes pour casser les choses, donc les tests de robustesse peuvent sembler contre-intuitifs pour certains. C'est nécessaire pour vérifier la robustesse des systèmes informatiques que nous construisons, quelle que soit la sémantique du langage de programmation. Cela est particulièrement vrai lorsqu'il existe plusieurs dépendances.
Lors de tests de robustesse, nous recherchons les scénarios susceptibles d'entraîner une défaillance du logiciel. Les tests de robustesse constituent une solution de test de bout en bout pour les systèmes embarqués . Ils consistent à injecter des entrées valides et invalides afin de vérifier la fiabilité du logiciel. Les défaillances logicielles pouvant avoir de nombreuses causes, nous testons également les modifications affectant le matériel, l'environnement ou les logiciels externes et indépendants.
La sécurité et la fiabilité sont des avantages évidents des tests de robustesse. Il sauve des vies et réduit les risques de blessures ou de poursuites judiciaires coûteuses. Certaines industries doivent tester plus que d'autres selon des normes réglementaires et de conformité strictes.
L'industrie du transport aérien avec ses nombreux systèmes d'aviation embarqués est un excellent exemple de l'importance de la sécurité et de la fiabilité. La vie des gens est en jeu. Vous feriez mieux de croire qu'ils pensent au cas du coin lors des tests.
Avec un nombre aussi élevé de vols au cours des seize dernières années et le nombre relativement faible d'accidents d'avions civils depuis 1945, l'industrie du transport aérien a un taux de réussite extrêmement élevé. Même avec ce genre de succès, il y a malheureusement des décès, des blessures et des poursuites judiciaires, mais cela constitue un argument efficace pour l'efficacité des tests de robustesse.
La génération automatisée de tests est essentielle pour accélérer les tests. Certaines solutions de tests de robustesse proposent la génération automatique de cas de test, ce qui améliore la qualité et permet de vérifier et de valider les composants logiciels directement sur le matériel cible. Cette exigence est imposée par les niveaux d'intégrité de sécurité les plus stricts, tels que DAL A dans la norme DO-178C .
La sécurité est un autre exemple où les développeurs et les ingénieurs ne peuvent se permettre la moindre erreur. Les institutions financières, les sociétés de traitement des cartes de crédit et l'industrie de la défense ne sont que quelques exemples d'organisations soumises à des exigences de conformité très strictes. Il est possible d'intégrer la conformité aux processus et écosystèmes de développement existants, de la gestion des exigences et du contrôle de version aux environnements de développement intégrés (IDE) et à l'intégration continue et au déploiement continu (CI/CD). En automatisant la conformité aux normes de sécurité fonctionnelle et aux normes critiques de sécurité , les organisations peuvent réaliser des économies de temps et d'argent.
Quel que soit le secteur ou l'application, les tests de robustesse aident les organisations à atteindre et à automatiser la conformité et à fournir des logiciels de qualité. Un bon retour sur investissement est également obtenu, ce qui réduit le coût de livraison des logiciels embarqués.
Bien qu'il existe de nombreuses techniques et outils de test de robustesse, le fuzz est probablement la méthode de test la plus largement utilisée car elle existe depuis des décennies. Les tests Fuzz se sont avérés très efficaces et c'est une méthode relativement simple où vous créez des cas de test avec de multiples variations d'entrées inattendues et surveillez les exceptions. Après des tests exhaustifs, s'il ne plante pas, n'échoue pas aux assertions de code intégrées ou n'a pas de fuites de mémoire potentielles, alors vous avez atteint un degré élevé de robustesse logicielle.
Une autre technique de test de robustesse est le test boîte noire. C'est là que les testeurs QA ou l'équipe d'ingénierie logicielle prétendent être les utilisateurs finaux ou les parties prenantes du produit ou de l'application pour tester des scénarios du monde réel. L'utilisateur se soucie uniquement de savoir si le système logiciel fonctionne ou non comme prévu. C'est le test au niveau humain ou utilisateur pour la fonctionnalité et la fiabilité. Si la sortie ou le comportement correct est généré par le système dans des conditions environnementales stressantes et que le système fonctionne correctement ou fonctionne comme il a été conçu, il est robuste.
D'autres types d'approches de test de robustesse comprennent les tests d'injection de fautes classiques et les tests de mutation. L'objectif des tests d'injection de fautes classiques est de déterminer la robustesse du code du système pendant l'exécution en injectant des types de données corrompus ou des fautes matérielles pour déterminer si le système tombe en panne ou est dangereux. S'il tolère les défauts, il est robuste. L'objectif des tests de mutation est d'évaluer l'efficacité du cas de test pour trouver un bogue. Dans ce test, vous mettez un bogue dans le code pour voir s'il est détecté. Si c'est le cas, votre cas de test est complet.
Astuce ! Si vous êtes développeur Java , la gestion des exceptions est une méthode de test que vous pouvez déployer pour gérer les erreurs d’exécution et ainsi maintenir le bon fonctionnement de l’application.
Les tests d'automatisation sont utilisés pour automatiser des tâches répétitives et d'autres tâches de test difficiles à effectuer manuellement. Il compare le résultat réel avec le résultat attendu. Les cas de test sont construits pour atteindre un objectif de test particulier. Les tests de robustesse peuvent être automatisés lors de la réalisation de tests de régression, une autre approche des tests de robustesse.
Les tests de régression sont un test de l'ensemble de l'application pour déterminer s'il y a des modifications néfastes dans un module ou la fonctionnalité du logiciel. L'automatisation est nécessaire lors de la réalisation de tests de régression, car il est presque impossible d'effectuer des tests de système manuellement. L'automatisation réduit le travail et le temps d'exécution, la méthodologie de test utilisée pour des tests robustes.
Grâce aux outils de test automatisés , vous pouvez générer automatiquement des cas de test pour prendre en charge le fuzzing ou l'exécution symbolique, qui effectue des tests de valeurs minimales, médianes, maximales et autres plages de valeurs. Certains cas de test vérifient également les valeurs hors limites afin de déterminer si vos composants logiciels peuvent les gérer.
Les outils de test automatisés dotés d'interfaces graphiques conviviales simplifient considérablement les tests unitaires en présentant le code sous forme de tableau visuel. L'utilisateur peut ainsi renseigner des champs tels que les valeurs d'entrée et les résultats attendus, puis générer le cas de test à partir de ce tableau. Le recours à des stubs est également possible, même si certaines fonctionnalités logicielles sont indisponibles. De plus, la modification et la mise à jour des cas de test sont simplifiées, permettant de suivre facilement ceux qui nécessitent une modification en cas de changement de code. Enfin, les équipes d'assurance qualité peuvent gérer efficacement les suites de tests, qui comprennent des milliers de cas de test.
Pour les organisations soumises aux normes IEEE , les tests de robustesse sont obligatoires, mais ils peuvent s'avérer excessifs pour les applications non critiques en matière de sécurité et donc ne pas être justifiés pour certaines organisations. Certains tests, comme les tests de mutation, nécessitent un cas de test existant et l'insertion de bogues réalistes, ce qui peut être difficile à mettre en œuvre.
Malheureusement, le temps n'est pas toujours un allié des tests de robustesse en raison du temps et du travail supplémentaires qu'il consomme. Mais si les tests de robustesse des logiciels aident votre organisation à atteindre son objectif de fournir des logiciels de meilleure qualité, des logiciels sûrs et sécurisés, avec un bon retour sur investissement, et de réduire les coûts de livraison, alors vous devrez peut-être envisager des outils d'automatisation qui peuvent fournir la vitesse et les capacités vous devez effectuer des tests de robustesse.
Il est important d'avoir une bonne compréhension des tests de robustesse. À tel point que le Symposium international sur les tests en ligne et la conception de systèmes robustes (IOLTS) a présenté des données à ce sujet pour l'IEEE. L'IEEE a également spécifié une famille de normes pour maintenir la compatibilité
De plus, l'Association for Computing Machinery (ACM) a présenté des études de cas sur les tests de robustesse dans la revue ACM.