Observation dynamique de programmes
Le but de ce projet est de définir et implémenter des techniques permettant d'observer les
programmes pendant leur exécution. Détecter les accès mémoire, les connexions réseau, ou encore
les opérations de lecture-écriture montrent comment un programme se comporte pendant une
exécution particulière, ceci permettant de compléter les analyses que l'on peut faire en étudiant les
sources du programme.
Evaluation d'outils d'aide à la compréhension de programmes
De nombreux outils permettent de faciliter la tâche de compréhension de programmes : cross-
références, navigation dans les sources, analyses des dépendances de valeurs, représentations
graphiques ou encore détection de modules sont autant de techniques à la disposition du
programmeur.
Manipulation et visualisation de graphes
L'utilisation de graphes pour représenter des informations sur les programmes est chose courante.
Malheureusement, dès qu'un programme dépasse quelques dizaines de lignes, l'ensemble
d'informations à représenter est tellement grand que le graphe ne peut être visualisé sur un écran. La
solution retenue consiste généralement a remplacer un groupe de noeuds par un seul et à simplifier
les arcs en conséquence.
Compréhension de programmes
Ce projet vise à étudier la notion même de
compréhension de programmes. En effet, si tout programmeur est capable
de comprendre des programmes, nous sommes incapables de définir de
manière précise ce que comprendre un programme veut
dire.
Un bon point de départ pour ce projet est d'observer comment des
programmeurs, soi-même ou d'autres, s'y prennent pour comprendre un
programme : quelles informations cherchent-ils ? comment les organisent-ils ?
quelle(s) représentation(s) se forment-ils du programme ? etc.
Un aboutissement possible de ce projet serait de définir une ou plusieurs
formes de représentations qui, si elles étaient construites
automatiquement, de toute évidence aideraient à la
compréhension du programme, ainsi que d'implémenter un prototype
de construction (semi-)automatique de celles-ci.
Par la suite, ce projet pourrait déboucher sur un projet de recherche en
3ème cycle.
Construction d'une base d'informations pour programmes C
Lorsqu'un programmeur entreprend de développer, modifier ou debugger
un programme, il doit nécéssairement rechercher
des informations à l'intérieur des fichiers, des
définitions de fonctions, des déclarations, etc.
Il passe donc une bonne partie de son temps à naviguer, plus ou
moins efficacement, à l'intérieur du programme.
L'objectif de ce projet est d'implémenter un système capable
de construire une base d'informations sur un programme, ainsi que
d'offrir une interface de navigation et/ou interrogation facilitant
effectivement la tâche des programmeurs.
Ce projet s'appuiera sur un outil d'analyse de programmes C existant
qui permettra d'extraire aisément des informations d'un
programme. Il s'agira ensuite de proposer une structure de base de
données ainsi qu'une interface adéquates.
Analyse de programmes binaires
Karine Mordal et Karim Bennai travaillent cette année sur ce sujet.
L'objectif de ce projet est d'étudier s'il est possible
de comprendre un programme dont on ne dispose que de l'exécutable
(binaire). En effet,
il existe des techniques, ainsi que des outils, permettant de comprendre un
programme source (C par exemple). Par ailleurs,
il existe des systèmes, appelés décompilateurs, qui
sont capables de transformer un binaire en un programme C.
La question qui se pose est alors celle de la qualité du programme
décompilé : est-il intelligible pour un programmeur ou seulement
pour un compilateur (donc une machine) ?
Ce projet démarrera par l'analyse de différents
décompilateurs. Il pourra ensuite évoluer vers l'amélioration
de l'un de ces décompilateurs, la mise au point de stratégies
de compréhension de programmes binaires, ou encore la
construction d'outils de compréhension spécifiques.
Par la suite, ce projet pourrait déboucher sur un projet de recherche en
3ème cycle.
Techniques de migration de logiciels (H. Wertz)
Description à venir ...
Le but de ce projet est d'appliquer un sous-ensemble de ces outils à un échantillon de programmes de
manière à évaluer et comparer leurs performances.
Le but de ce projet est d'implémenter de manière efficace les opérations sur les graphes nécessaires
à la manipulation de groupes de noeuds.
Juin 2001