Affiner les tests métamorphiques pour une meilleure validation des logiciels
Une nouvelle méthode améliore les tests logiciels en affinant les relations métamorphiques.
― 9 min lire
Table des matières
Les tests de logiciels sont une étape clé pour s'assurer que le logiciel fonctionne bien. Un des gros défis dans les tests de logiciels, c'est ce qu'on appelle le "problème de l'oracle de test." Ça arrive quand on n'a pas de moyen clair pour vérifier si le logiciel donne les bons résultats pour certaines entrées. Les Tests Métamorphiques (MT) sont une méthode qui aide avec ce problème. Au lieu de comparer la sortie d'une seule entrée à une sortie attendue, le MT regarde les relations entre les entrées et les sorties sur plusieurs exécutions du logiciel, qu'on appelle Relations métamorphiques (MRs). Les MRs définissent comment on s'attend à ce que la sortie change si on modifie l'entrée d'une certaine manière.
Quand une MR n'est pas respectée pendant les tests, ça suggère qu'il pourrait y avoir un souci dans le logiciel. Mais juste parce qu'une MR est respectée, ça ne veut pas dire que le logiciel est complètement correct. Ça crée un défi : comment savoir si une MR est violée à cause d'un bug dans le logiciel ou parce que la MR ne s'applique pas vraiment à cette situation ?
Comprendre les Relations Métamorphiques
Les Relations Métamorphiques sont au cœur des Tests Métamorphiques. Elles montrent comment on s'attend à ce que les sorties changent quand on modifie les entrées d'une manière particulière. Par exemple, si on a une fonction qui additionne deux nombres, une MR pourrait dire que si on ajoute 1 à un de ces nombres, la sortie doit aussi augmenter de 1. Si le logiciel échoue ce test, ça suggère qu'un bug pourrait être présent. Cependant, s'il réussit, on ne peut toujours pas dire avec certitude que le logiciel est sans bug.
Identifier et choisir des MRs appropriées peut être compliqué. Ça nécessite une bonne compréhension de ce que fait le logiciel et des types d'entrées qu'il attend. À cause de cette nécessité d'expertise, découvrir automatiquement des MRs est difficile. De plus, faire la différence entre un échec de MR qui indique un bug et un échec qui montre que la MR ne s'applique pas est généralement fait manuellement. Ça peut prendre beaucoup de temps.
Le Besoin de Raffiner les Relations Métamorphiques
Étant donné la complexité d'interpréter les MRs, on a une question de recherche pressante : comment peut-on affiner les MRs en fonction des données d'entrée utilisées dans les tests ? On propose une méthode pour faciliter ce processus. Cette méthode aide à suggérer si un échec à respecter une MR est dû à un vrai bug dans le logiciel ou parce que la MR ne correspondait pas au cas particulier testé.
La méthode qu'on a développée utilise une combinaison de tests de fuzzing, de tests passifs et d'une technique appelée Extraction de Règles d'Association (ARM).
Tests de Fuzzing
Le fuzzing consiste à envoyer des données aléatoires ou inattendues dans le logiciel pour voir comment il se comporte. Ça peut aider à découvrir des bugs que les tests normaux pourraient manquer. Dans notre approche, la première étape est d'utiliser un fuzzer pour créer une variété d'entrées pour le logiciel testé (SUT).
Tests Passifs
Une fois qu'on a les entrées aléatoires, on applique les changements nécessaires en fonction de nos MRs prédéfinies. Ensuite, on enregistre les sorties du SUT. Ces logs contiennent des informations sur les entrées, les sorties et les violations de MR.
Extraction de Règles d'Association
Le cœur de notre analyse repose sur l'Extraction de Règles d'Association. Cette technique nous aide à trouver des motifs dans de grands ensembles de données. Avec nos logs, on peut chercher des relations intéressantes entre les entrées utilisées et si les MRs ont été violées ou non. Cette information peut être cruciale pour décider si une MR est pertinente ou non.
Notre Méthode en Action
Pour démontrer notre méthode, on a réalisé une expérience de preuve de concept en utilisant un exemple simple. Cet exemple impliquait un programme qui effectue des opérations arithmétiques de base : addition, soustraction et multiplication. On a validé notre approche avec cet exemple simplifié, et ça nous a permis de voir à quel point notre méthode pouvait fournir des suggestions utiles pour améliorer le processus de test.
Phase 1 : Évaluation des Relations Métamorphiques
Dans la première phase, on s'est concentré sur comment les MRs s'appliquaient à nos tests. Cette phase a trois parties principales : générer des données de test, réaliser les tests métamorphiques, et analyser les résultats.
Génération de Données de Test
La première étape consiste à générer un ensemble de données de test aléatoires via le fuzzing. Pour notre exemple, on a créé des paires de nombres aléatoires à utiliser comme entrées pour le SUT. Ces nombres ont été générés avec une distribution uniforme pour garantir une variété de scénarios.
Tests Métamorphiques
Après avoir généré les données de test, on applique les MRs pour voir comment les sorties changent. On vérifie à la fois les données originales et transformées par rapport aux MRs. Cette comparaison nous aide à voir si le logiciel se comporte comme prévu.
Analyse des Résultats
Les résultats des tests sont ensuite organisés et enregistrés pour une analyse ultérieure. Le log contient des détails sur chaque test et le verdict sur si les MRs ont été violées ou non. On utilise ensuite ces données de log pour découvrir des connexions entre les données de test et les violations de MR.
Phase 2 : Création de la Suite de Tests
La phase suivante se concentre sur l'utilisation des informations acquises dans la Phase 1 pour construire un ensemble de tests pour les futures versions du logiciel. L'objectif ici est que la suite de tests garantisse que le logiciel reste fiable et se comporte comme prévu après des mises à jour.
Génération de la Suite de Tests Finale
Avec les informations collectées, on peut créer une suite de tests de régression robuste. Cette suite sera basée sur les MRs raffinées qu'on a identifiées dans la Phase 1. Pour chaque fonction dans notre programme d'exemple, on a généré des tests qui assurent que le logiciel peut traiter correctement différents types d'entrées.
Efficacité de la Méthode
En utilisant notre approche, la sélection des MRs peut être réalisée de manière plus efficace que traditionnellement. Notre méthode aide à identifier quelles MRs peuvent être appliquées avec succès, ce qui fait gagner du temps et de l'effort dans le processus de test. Le temps passé à déterminer la validité des MRs est réduit parce que la méthode automatise certaines parties de ce processus.
Si notre approche fonctionne bien, ça pourrait mener à des tests de logiciels plus rapides et plus efficaces. Cependant, comme toutes les méthodes de test, son succès dépend de la sélection soignée des données de test. Les travaux futurs exploreront comment on peut améliorer la sélection des données de test pour augmenter l'efficacité de notre méthode.
Adresser les Menaces à la Validité
Lors de la mise en œuvre de notre méthode, il est essentiel de considérer les menaces à sa validité. Deux catégories significatives sont la validité interne et externe.
Validité Interne
Pour assurer la validité interne de notre méthode, on s'est basé sur des outils et des techniques bien connus. Cependant, l'efficacité des algorithmes ARM dans différents scénarios nécessite encore des investigations supplémentaires. Les travaux futurs exploreront différentes approches ARM pour mieux comprendre leur applicabilité.
Validité Externe
Concernant la validité externe, nos premières expériences étaient limitées à un programme simple. Des tests plus étendus à travers divers scénarios seront nécessaires pour confirmer à quel point notre méthode performe dans des situations réelles.
Travaux Connus
Les Tests Métamorphiques ont été reconnus comme une technique précieuse depuis leur introduction. Ils ont été appliqués avec succès dans divers domaines où les méthodes de test traditionnelles sont en difficulté, comme dans les situations où un oracle est difficile à établir.
Plusieurs études ont exploré des méthodes pour améliorer le MT, y compris la priorisation des MRs en fonction de leur efficacité ou de leur impact sur la détection de bugs. Ces méthodes ont montré des promesses pour réduire le nombre de cas de test nécessaires, minimisant ainsi le temps d'inspection manuelle.
Conclusion et Directions Futures
On a introduit une nouvelle méthode pour affiner les Relations Métamorphiques en utilisant des techniques comme le fuzzing et l'Extraction de Règles d'Association. Cette méthode vise à clarifier si un échec à respecter les MRs est dû à un bug dans le logiciel ou simplement à un décalage avec les données d'entrée utilisées.
Notre méthode fonctionne en deux phases : la première évalue l'applicabilité des MRs, et la seconde utilise ces informations pour créer une suite de tests pour la régression. La preuve de concept démontrée dans notre expérience montre que notre approche est viable et peut ajouter de la valeur au processus de test logiciel.
À l'avenir, on prévoit de réaliser plus de tests avec différents types de logiciels et d'explorer comment améliorer la sélection des données de test. Notre objectif est de créer une méthode qui trouve précisément les bugs et offre des solutions de test robustes pour une plus large gamme d'applications logicielles.
Titre: Bug or not Bug? Analysing the Reasons Behind Metamorphic Relation Violations
Résumé: Metamorphic Testing (MT) is a testing technique that can effectively alleviate the oracle problem. MT uses Metamorphic Relations (MRs) to determine if a test case passes or fails. MRs specify how the outputs should vary in response to specific input changes when executing the System Under Test (SUT). If a particular MR is violated for at least one test input (and its change), there is a high probability that the SUT has a fault. On the other hand, if a particular MR is not violated, it does not guarantee that the SUT is fault free. However, deciding if the MR is being violated due to a bug or because the MR does not hold/fit for particular conditions generated by specific inputs remains a manual task and unexplored. In this paper, we develop a method for refining MRs to offer hints as to whether a violation results from a bug or arises from the MR not being matched to certain test data under specific circumstances. In our initial proof-of-concept, we derive the relevant information from rules using the Association Rule Mining (ARM) technique. In our initial proof-of-concept, we validate our method on a toy example and discuss the lessons learned from our experiments. Our proof-of-concept demonstrates that our method is applicable and that we can provide suggestions that help strengthen the test suite for regression testing purposes.
Auteurs: Alejandra Duque-Torres, Dietmar Pfahl, Claus Klammer, Stefan Fischer
Dernière mise à jour: 2023-05-16 00:00:00
Langue: English
Source URL: https://arxiv.org/abs/2305.09640
Source PDF: https://arxiv.org/pdf/2305.09640
Licence: https://creativecommons.org/licenses/by/4.0/
Changements: Ce résumé a été créé avec l'aide de l'IA et peut contenir des inexactitudes. Pour obtenir des informations précises, veuillez vous référer aux documents sources originaux dont les liens figurent ici.
Merci à arxiv pour l'utilisation de son interopérabilité en libre accès.