Tester une machine virtuelle développée ...
Document type :
Thèse
Title :
Tester une machine virtuelle développée dans un générateur de machine virtuelle basé sur une simulation
English title :
Testing a virtual machine developed in a simulation-based virtual machine generator
Author(s) :
Misse-Chanabier, Pierre [Auteur]
Analyses and Languages Constructs for Object-Oriented Application Evolution [RMOD]
Centre de Recherche en Informatique, Signal et Automatique de Lille - UMR 9189 [CRIStAL]
Centre for Digital Systems [CERI SN - IMT Nord Europe]
Analyses and Languages Constructs for Object-Oriented Application Evolution [RMOD]
Centre de Recherche en Informatique, Signal et Automatique de Lille - UMR 9189 [CRIStAL]
Centre for Digital Systems [CERI SN - IMT Nord Europe]
Thesis director(s) :
Stéphane Ducasse
Noury Bouraqadi
Noury Bouraqadi
Defence date :
2022-12-16
Jury president :
Alain Plantec [Président]
Gordana Milosavljević [Rapporteur]
Jannik Laval [Rapporteur]
Gordana Rakić
Gordana Milosavljević [Rapporteur]
Jannik Laval [Rapporteur]
Gordana Rakić
Jury member(s) :
Alain Plantec [Président]
Gordana Milosavljević [Rapporteur]
Jannik Laval [Rapporteur]
Gordana Rakić
Gordana Milosavljević [Rapporteur]
Jannik Laval [Rapporteur]
Gordana Rakić
Accredited body :
Université de Lille
Doctoral school :
École doctorale Mathématiques, sciences du numérique et de leurs interactions (Lille ; 2021-....)
NNT :
2022ULILB047
Keyword(s) :
Mutation de code
English keyword(s) :
Virtual Machine
Testing
Simulation-Based Testing
Code mutation
Testing
Simulation-Based Testing
Code mutation
HAL domain(s) :
Informatique [cs]/Génie logiciel [cs.SE]
Informatique [cs]/Langage de programmation [cs.PL]
Informatique [cs]/Langage de programmation [cs.PL]
French abstract :
Les Machines Virtuelles (MV) sont les implémentations des languages de programmation modernes.Tester et "debugger" une MV est une tache laborieuse sans les outils appropriés.C'est particulièrement le cas pour des MV qui ...
Show more >Les Machines Virtuelles (MV) sont les implémentations des languages de programmation modernes.Tester et "debugger" une MV est une tache laborieuse sans les outils appropriés.C'est particulièrement le cas pour des MV qui implémentent un ramasse miettes (Garbage collector) une compilation JIT (Just in Time compiler) et des optimisation de l'interpréteur.Cette situation est empirée lorsque la MV est compilée et exécutée sur plusieurs architecture de processeurs.Pour faciliter le développement de MVs, les générateurs de MV basés sur une simulation ont été étudiés.Ce genre de frameworks permettent aux développeurs de développer une MV dans un environnement de simulation et de générer la MV quand elle est prête.Les développeurs exploitent l'environnement de simulation pour faciliter non seulement le développement, mais aussi l'outillage et le debug.En revanche, cela créé des fossé d'abstractions entre la MV simulée et la MV généré.Par conséquent, l'exécution de MV simulée et de la MV généré ne sont pas fonctionnellement équivalent.Dans cette thèse, nous étudions comment tester des MVs développées dans des générateurs de MV basés sur une simulation.Premièrement, nous étudions une méthodologie basées sur l'utilisation de multiples mode d'exécution de la MV: les test unitaires,la simulation complète du système et l'exécution sur le matériel.Cette méthodologie exploite les meilleure propriété de chaque mode d'exécution.Par exemple, nous exploitons les tests unitaires pour la vitesse du cycle de feedback et l'exécution sur le matériel pour sa précision d'exécution.Deuxièmement, nous proposons Test Transmutation pour étendre les générateurs de MV basés sur une simulation pour co-générer les test unitaires avec la MV.Co-génerer les tests cases avec la MV permet aux développeurs de réutiliser les test cases de la simulation pour utiliser les test unitaires sur la MV générée.Les résultats des test unitaires sur la MV généré sont comparés avec les résultats de leurs éxécutions sur la MV simulée en utilisant le différentiel de résultats pour les valider.Enfin, les test unitaires sont automatiquement mutés avec des mutations ne préservant pas la sémantique initiale.Les résultats des test unitaire mutés doivent être équivalent.Si ils ne le sont pas, un bug a été trouvé.Ceci permet de créer plus de test unitaires pour stresser le générateur de test unitaire.Cela permet aussi de gagner en confiance dans le générateur de test unitaire et d'explorer différente route d'exécution du code de la MV.Notre évaluation montre que nous détectons des bugs qui sont représentatifs des modifications de la MV typiques.Nous montrons l'efficacité de notre méthode en l'appliquant sur les test unitaires de la MV Pharo.Ceci nous as permis de trouver de multiples problèmes qui n'étaient pas connus de l'équipe de développement la MV Pharo.Notre approche montre des résultats prometteur pour tester des MV développées dans des générateurs de MV basés sur une simulation.Show less >
Show more >Les Machines Virtuelles (MV) sont les implémentations des languages de programmation modernes.Tester et "debugger" une MV est une tache laborieuse sans les outils appropriés.C'est particulièrement le cas pour des MV qui implémentent un ramasse miettes (Garbage collector) une compilation JIT (Just in Time compiler) et des optimisation de l'interpréteur.Cette situation est empirée lorsque la MV est compilée et exécutée sur plusieurs architecture de processeurs.Pour faciliter le développement de MVs, les générateurs de MV basés sur une simulation ont été étudiés.Ce genre de frameworks permettent aux développeurs de développer une MV dans un environnement de simulation et de générer la MV quand elle est prête.Les développeurs exploitent l'environnement de simulation pour faciliter non seulement le développement, mais aussi l'outillage et le debug.En revanche, cela créé des fossé d'abstractions entre la MV simulée et la MV généré.Par conséquent, l'exécution de MV simulée et de la MV généré ne sont pas fonctionnellement équivalent.Dans cette thèse, nous étudions comment tester des MVs développées dans des générateurs de MV basés sur une simulation.Premièrement, nous étudions une méthodologie basées sur l'utilisation de multiples mode d'exécution de la MV: les test unitaires,la simulation complète du système et l'exécution sur le matériel.Cette méthodologie exploite les meilleure propriété de chaque mode d'exécution.Par exemple, nous exploitons les tests unitaires pour la vitesse du cycle de feedback et l'exécution sur le matériel pour sa précision d'exécution.Deuxièmement, nous proposons Test Transmutation pour étendre les générateurs de MV basés sur une simulation pour co-générer les test unitaires avec la MV.Co-génerer les tests cases avec la MV permet aux développeurs de réutiliser les test cases de la simulation pour utiliser les test unitaires sur la MV générée.Les résultats des test unitaires sur la MV généré sont comparés avec les résultats de leurs éxécutions sur la MV simulée en utilisant le différentiel de résultats pour les valider.Enfin, les test unitaires sont automatiquement mutés avec des mutations ne préservant pas la sémantique initiale.Les résultats des test unitaire mutés doivent être équivalent.Si ils ne le sont pas, un bug a été trouvé.Ceci permet de créer plus de test unitaires pour stresser le générateur de test unitaire.Cela permet aussi de gagner en confiance dans le générateur de test unitaire et d'explorer différente route d'exécution du code de la MV.Notre évaluation montre que nous détectons des bugs qui sont représentatifs des modifications de la MV typiques.Nous montrons l'efficacité de notre méthode en l'appliquant sur les test unitaires de la MV Pharo.Ceci nous as permis de trouver de multiples problèmes qui n'étaient pas connus de l'équipe de développement la MV Pharo.Notre approche montre des résultats prometteur pour tester des MV développées dans des générateurs de MV basés sur une simulation.Show less >
English abstract : [en]
Virtual Machines (VMs) are modern programming language implementations.Testing and debugging a VM is a laborious task without the proper tooling.This is particularly true for VMs implementing garbage collection, Just in ...
Show more >Virtual Machines (VMs) are modern programming language implementations.Testing and debugging a VM is a laborious task without the proper tooling.This is particularly true for VMs implementing garbage collection, Just in Time (JIT) compilation and interpreter optimisations.This situation is worsen when the VM builds and runs on multiple target processor architectures.To ease the development of VMs, simulation-based VM generator frameworks were studied.Such frameworks allow developers to work on the VM in a simulation environment and to generate the VM once it's ready.Developers leverage the simulation environment to ease not only the development process, but also tooling and debugging the VM.However it creates abstraction gaps between the simulated and generated VM.Therefore the execution of the simulated and the generated VM are not functionally equivalent.In this thesis we investigate how to test VMs developed in simulation-based VM generator framework.First, we investigate a methodology based on using multiple kinds of VM execution mode: Unit Testing, full-system simulation and real hardware execution.The methodology leverages the best properties of each execution mode.We leverage unit testing for its feedback-cycle speed and real hardware execution for its precision.Second, we propose extit{Test Transmutation} to extend simulation-based VM generator frameworks to co-generate the test cases with the VM.Co-generating the test cases with the VM allow developers to reuse the simulation test cases to apply unit testing on the generated VM.Results of the generated test cases are compared against the simulation test case results using differential testing to validate them.Finally, test cases are automatically mutated with non-semantic-preserving mutations.The mutated test cases results should be equivalent.If they are not, a bug has been found.This allows us to automatically create more test cases to stress the test case generator.This improves our confidence in the test case generator as well as exploring different path of execution in the VM.Our evaluation shows that we detect bugs that are representative of typical VM modifications.We demonstrate its effectiveness by applying it to a set of real test cases of the Pharo VM.It allowed us to find several issues that were unknown to the VM development team.Our approach shows promising results to test VM developed in simulation-based VM generator frameworks.Show less >
Show more >Virtual Machines (VMs) are modern programming language implementations.Testing and debugging a VM is a laborious task without the proper tooling.This is particularly true for VMs implementing garbage collection, Just in Time (JIT) compilation and interpreter optimisations.This situation is worsen when the VM builds and runs on multiple target processor architectures.To ease the development of VMs, simulation-based VM generator frameworks were studied.Such frameworks allow developers to work on the VM in a simulation environment and to generate the VM once it's ready.Developers leverage the simulation environment to ease not only the development process, but also tooling and debugging the VM.However it creates abstraction gaps between the simulated and generated VM.Therefore the execution of the simulated and the generated VM are not functionally equivalent.In this thesis we investigate how to test VMs developed in simulation-based VM generator framework.First, we investigate a methodology based on using multiple kinds of VM execution mode: Unit Testing, full-system simulation and real hardware execution.The methodology leverages the best properties of each execution mode.We leverage unit testing for its feedback-cycle speed and real hardware execution for its precision.Second, we propose extit{Test Transmutation} to extend simulation-based VM generator frameworks to co-generate the test cases with the VM.Co-generating the test cases with the VM allow developers to reuse the simulation test cases to apply unit testing on the generated VM.Results of the generated test cases are compared against the simulation test case results using differential testing to validate them.Finally, test cases are automatically mutated with non-semantic-preserving mutations.The mutated test cases results should be equivalent.If they are not, a bug has been found.This allows us to automatically create more test cases to stress the test case generator.This improves our confidence in the test case generator as well as exploring different path of execution in the VM.Our evaluation shows that we detect bugs that are representative of typical VM modifications.We demonstrate its effectiveness by applying it to a set of real test cases of the Pharo VM.It allowed us to find several issues that were unknown to the VM development team.Our approach shows promising results to test VM developed in simulation-based VM generator frameworks.Show less >
Language :
Anglais
Collections :
Source :
Files
- document
- Open access
- Access the document
- These_MISSE-CHANABIER_Pierre.pdf
- Open access
- Access the document