Mémoire de maîtrise (2012)
Résumé
La qualité d'un logiciel est une notion très importante de nos jours. Un des moyens de s'assurer de la bonne qualité d'un logiciel est de le tester afin d'en détecter, et de corriger, le plus grand nombre de bogues possible. L'approche proposée dans ce mémoire de maîtrise consiste à utiliser la programmation orientée aspect (AOP, pour Aspect Oriented Programming) afin de tester des programmes ecrit en C++. Elle consiste de plus en la création d'un langage dédie (DSL, pour Domain Specific Language) et d'un logiciel capable de le lire, ACRE (Automatic aspeCt cREator). Ces deux outils permettent la génération automatique d'aspects écrits en AspectC++, aspects permettant d'effectuer des tests de mémoire, d'invariants ou d'interférence dans des programmes écrits en C++. La programmation orientée aspect est un paradigme basé sur le principe de la séparation des préoccupations, qui veut que chaque module d'un programme s'occupe uniquement d'une préoccupation et ne s'implique pas dans les autres. L'AOP a déjà été utilisée afin de tester des logiciels, mais uniquement pour des programmes écrits en Java et pour des programmes embarques écrits en C++. De plus très peu de solutions ont été proposées afin d'automatiser la création des aspects et leur utilisation. Lorsque de telles solutions ont été proposées, elles l'étaient uniquement pour des programmes écrits en Java. Notre approche permet donc la génération automatique d'aspects pour des programmes écrits en C++. Ceci est fait grâce au DSL non-intrusif (dans le sens qu'il ne modifie pas le comportement du code source) introduit sous forme de commentaires dans le code source du programme à tester. L'écriture des lignes de DSL au plus près du code à tester est par ailleurs la seule modification requise à effectuer dans le code source du programme. Les aspects générés sont écrits dans des fichiers séparés et sont ensuite tisses au moment de la compilation avec le code source du programme. Notre approche permet ainsi aux développeurs de pouvoir tester un programme sans avoir à en modifier le comportement. Une première étude de cas pour notre approche est son application afin de tester NOMAD, logiciel d'optimisation de fonctions de type boite noire, utilisé tant en recherche qu'en industrie. Nous avons donc généré automatiquement des aspects permettant la découverte de bogues dans NOMAD. Un test de mémoire nous a permis de détecter une fuite mémoire importante, rapportée par un relevé de bogues d'un utilisateur, grâce à un aspect généré automatiquement. Une deuxième étude de cas nous a permis de rassurer l'équipe de développement de NOMAD. Nous avons en effet pu vérifier la validité d'un point mathématique crucial de l'algorithme implémenté. Ce test d'invariant a été là encore effectué grâce à un aspect généré automatiquement et sans modifier le comportement du code source de NOMAD. Une troisième étude de cas concerne la détection de bogues de type interférence dans des programmes parallèles Un bogue de type interférence se produit lorsque qu'au moins deux fils d'exécution d'un programme tentent d'écrire en même temps dans une même variable. Ce type de bogue fait partie des bogues affectant les programmes parallèles les plus difficiles à détecter et peu de logiciels actuels permettent de les découvrir à coup sûr. Notre approche permet l'obtention, grâce à des aspects, des temps d'accès en lecture et en écriture d'attributs du programme, ces temps étant ensuite utilisés par une approche mathématique qui aide les logiciels actuels dans leur détection de ce type de bogue. Il y a cependant des limites à l'utilisation de notre approche, notamment dues à des limitations inhérentes à AspectC++, limitations dont nous discutons.
Statistiques
Total des téléchargements à partir de PolyPublie
Téléchargements par année
Provenance des téléchargements
