Participants : Laurent Angeli, Laurent Hascoët
Cette recherche, effectuée dans le cadre d'une thèse, porte sur les méthodes de détection du degré de ressemblance entre des portions données d'un programme impératif (en FORTRAN par exemple). Les applications d'une telle détection sont multiples. On peut par exemple remplacer les portions équivalentes par des appels à un même sous-programme, qui sera écrit automatiquement. Cette fonctionnalité est fréquemment demandée par les programmeurs.
L'originalité de cette recherche est qu'on ne cherche pas la ressemblance au niveau du programme source, ce qui serait aberrant à cause des variations permises par la syntaxe concrète telles que sauts de ligne, blancs, parenthèses, etc, ni au niveau de la syntaxe abstraite ce qui entraînerait des problèmes de nommage et d'ordre des instructions. Pour ces raisons, on recherche une ressemblance sémantique qui décidera de la ressemblance non pas entre les syntaxes abstraites, mais entre les effets des portions de programme sur leur environnement (valeurs des variables au début et a la fin des portions)
Les outils principaux pour implémenter cela sont les outils de la parallélisation automatique, c'est à dire le graphe de flot de contrôle (Control Flow Graph ou CFG) et le graphe de dépendances. La définition des algorithmes est quasiment terminée. Leur implémentation est en cours. Les premiers tests donnent de bons résultats, y compris si les noms des variables et l'ordre des instructions diffèrent. Le cas des boucles sera testé dans le prochains mois.