Thèse soutenue

Analyse dynamique de programme : Mise en oeuvre automatisée d'analyseurs performants et spécifications de modèles d'exécution

FR
Auteur / Autrice : Erwan Jahier
Direction : Mireille Ducassé
Type : Thèse de doctorat
Discipline(s) : Informatique
Date : Soutenance en 2000
Etablissement(s) : Rennes, INSA
Partenaire(s) de recherche : Autre partenaire : Département informatique

Résumé

FR  |  
EN

De nombreuses études montrent que la plus grande partie du coût de production d'un logiciel est générée lors de la phase de maintenance. Lors de cette phase, pour corriger des erreurs, pour optimiser des programmes, ou pour ajouter des fonctionnalités, il est essentiel de comprendre les programmes, et en particulier de comprendre leur comportement. Les analyseurs dynamiques d'exécutions tels que les profileurs, les moniteurs, ou les débogueurs, sont alors des outils indispensables. Cependant, ces outils d'analyse dynamique sont extrêmement coûteux à mettre en oeuvre : (1) d'abord, parce qu'il est généralement nécessaire de modifier le système de compilation utilisé, ce qui est fastidieux et pas toujours envisageable ; (2) en outre, les besoins en outils d'analyse de programmes varient d'un utilisateur à l'autre, en fonction de sa compétence, de son expérience du système de programmation utilisé, ainsi que de sa connaissance du code à maintenir ; (3) et enfin, parce que ces outils sont difficilement réutilisables. Il est donc souhaitable que chaque utilisateur puisse spécifier facilement les analyses dynamiques dont il a besoin. C'est pourquoi nous proposons dans cette thèse une architecture qui permet de faciliter leur mise en oeuvre. Cette architecture est basée : (1) sur une instrumentation systématique du programme qui produit une image très détaillée de l'exécution, la trace ; (2) sur un ensemble de primitives qui permettent d'analyser cette trace efficacement. Les analyseurs résultants ont des performances du même ordre de grandeur que leurs équivalents implémentés <<à la main>> par modification du système de compilation. Ils peuvent être mis en oeuvre par des utilisateurs sans connaissance particulière du système de compilation, qu'ils n'ont pas à modifier. Cette architecture leur permet d'implémenter les outils qui leur conviennent, adaptés à leur niveau de compréhension du code qu'ils sont chargés de maintenir. De plus, la structure modulaire de l'architecture proposée devrait permettre de faciliter la réutilisation de ces analyseurs pour d'autres systèmes. Notre propos est illustré dans le cadre du langage de programmation logique et fonctionnelle Mercury. Cependant, les concepts utilisés sont indépendants du paradigme de programmation. La trace sur laquelle nous basons la mise en oeuvre de nos analyseurs se doit de refléter le plus fidèlement possible la sémantique opérationnelle du langage. C'est pourquoi nous proposons également dans cette thèse un cadre de modélisation des traces d'exécutions basé sur une sémantique opérationnelle du langage à analyser. Cette spécification formelle de la trace nous permet de valider expérimentalement les traceurs et de prouver leur correction. Cette étude a été menée dans le cadre du langage de programmation logique Prolog.