1. Le problème
Le problème auquel on s'attache est le suivant : rédiger un programme, dans un langage informatique, s'élabore en plusieurs étapes :
- Dans un premier temps, de saisie du programme, on construit un nouveau programme. A cette étape on bénéficie d'une connaissance complète du programme qu'on construit : on sait à quel point du programme est déclarée une structure, à quel autre point elle est utilisée ; on sait qu'on répète plusieurs fois un même schéma d'algorithme, instancié sur diverses structures de données ; on sait qu'on satistfait des contraintes d'implantation, par exemple dans le séquencement de plusieurs instructions ; etc.
- Dans un deuxième temps, de correction du programme, on relit le texte source saisi, et on le modifie dans une perspective d'évolution ; ceci inclut la phase de mise au point et celle de maintenance du programme – on se place donc une semaine ou six mois plus tard.
La difficulté à laquelle se heurte alors l'Informaticien est de reconstruire, par un effort de synthèse, le processus de rédaction du programme initial, qui tienne compte de toutes les informations cachées, de dépendances implicites entre morceaux du texte source etc.