Static analysis of program portability by abstract interpretation

Les logiciels tendent à être utilisés plus longtemps que prévu lors de leur conception, et dans une plus grande variété d'environnements. L'adaptation d'un logiciel à de nouvelles utilisations peut s'avérer difficile et coûteuse. Assurer la portabilité des programmes est un enjeu...

Ausführliche Beschreibung

Gespeichert in:
Bibliographische Detailangaben
1. Verfasser: Delmas, David
Format: Dissertation
Sprache:eng
Schlagworte:
Online-Zugang:Volltext bestellen
Tags: Tag hinzufügen
Keine Tags, Fügen Sie den ersten Tag hinzu!
Beschreibung
Zusammenfassung:Les logiciels tendent à être utilisés plus longtemps que prévu lors de leur conception, et dans une plus grande variété d'environnements. L'adaptation d'un logiciel à de nouvelles utilisations peut s'avérer difficile et coûteuse. Assurer la portabilité des programmes est un enjeu majeur : garantir que leur compilation et leur exécution dans un environnement différent a un effet maîtrisé sur leur sémantique. Cette thèse vise au développement d'analyses statiques par interprétation abstraite pour vérifier de telles propriétés de portabilité. Vérifier la portabilité consiste à prouver l'équivalence de deux versions syntaxiquement proches d'un programme, qui s'exécutent dans des environnements différents. Nous abordons d'abord le cas particulier de la vérification de non régression, qui vise à prouver l'équivalence de deux versions qui s'exécutent dans le même environnement. Nous proposons une analyse statique de patchs logiciels capable d'inférer de telles équivalences, notamment dans le contexte de programmes C de bas niveau comme ceux utilisés dans les systèmes embarqués. Puis nous construisons une analyse portabilité comme une extension de l'analyse de patchs. Notre analyse infère deux propriétés liées à la représentation de la mémoire : la portabilité vis-à-vis d'un changement de représentation des scalaires (endianisme), et vis-à-vis d'une organisation différente de la mémoire (offsets des champs scalaires des structures C). Nous avons implanté un analyseur statique prototype sur la plateforme MOPSA, l'avons expérimenté sur des logiciels open sources et industriels. Il analyse avec succès de grands logiciels avioniques (jusqu'à un million de lignes de C). Computer programs tend to be used much longer than expected at design time, and in a wider variety of environments. Adapting a software product for new usage may turn out to be difficult and costly. Ensuring the portability of programs is a major stake: it amounts to ensuring that their compilation and execution in a different environment will have small controlled impact on their semantics. The goal of this thesis is to develop a novel class of static analyses by abstract interpretation, allowing to verify portability properties of low-level C programs. Portability verification aims at proving the equivalence of two syntactically close versions of a program running in different environments. We first focus on the particular case of regression verification, which aims at proving the equivalence of two p