Projet :
LANDE

Précédent : Composition de l'équipe Remonter :
Conception et validation
de logiciels Suivant : Fondements scientifiques
Présentation et objectifs généraux
Le thème de recherche
central du projet LANDE est la conception de
méthodes et d'outils d'aide au développement et à la validation
de logiciels. Ces méthodes possèdent deux caractéristiques
majeures:
- 1.
- Elles reposent sur des bases formelles (sémantique de
langage, modèle de sécurité, etc.) permettant d'apporter des
garanties quant à la correction des outils.
- 2.
- Elles conduisent, autant que faire se peut, à des outils
automatiques. Les utilisateurs visés sont en effet des
programmeurs ou des valideurs qui ne possèdent pas forcément
d'expertise particulière en matière de méthodes formelles ou de
techniques de preuves.
Pour atteindre ces objectifs, nous distinguons deux types
d'interventions: les traitements postérieurs à la phase de
programmation («actions aval») et ceux qui la concernent ou la
précèdent («actions amont»).
Les traitements «en aval» ou a posteriori
concernent la validation de codes existants (vérification, test,
débogage). Ce type d'actions s'applique à des logiciels dont on
ne maîtrise pas forcément le développement. Nous concevons dans
ce cadre des techniques d'aide à la validation de programmes qui
reposent essentiellement sur des analyses de programmes
(statiques ou dynamiques). Nous avons proposé notamment un cadre
pour la vérification de propriétés de sécurité de programmes.
Nous nous intéressons également à l'analyse dynamique qui sert de
base pour des outils de maintenance dans le cadre de la
programmation impérative ( COCA), de la
programmation logique ( OPIUM), et des bases de
données déductives. Nous considérons aussi l'analyse sémantique
dans une perspective plus large en étudiant la construction
systématique d'analyseurs reposant sur des sémantiques
opérationnelles de langages. Nous avons proposé un
format de sémantique naturelle et nous avons appliqué
notre méthode à l'analyse de slicing. Il a été ainsi
possible de dériver, par simple instanciation d'une définition
générique, des analyses dynamiques et statiques pour un langage
impératif, un langage fonctionnel et un langage de programmation
logique. En nous appuyant sur des résultats récents concernant
l'inférence de types d'intersection et de types polymorphes, nous
avons également conçu un algorithme qui permet de déduire, pour
chaque programme, une propriété principale à partir de laquelle
toute autre propriété démontrable par l'analyse peut être
déterminée. Un avantage de cet algorithme est qu'il traite des
fragments de programmes aussi bien que des programmes entiers. Il
s'agit donc d'une démarche qui, à plus long terme, peut mener à
un cadre général pour l'analyse modulaire. Le test de logiciels
représente un autre centre d'intérêt important du projet. Nous
avons proposé une méthode de génération de suites de test qui a
conduit à l'outil CASTING développé en
collaboration avec la société AQL. Les suites de
test engendrées dépendent de stratégies spécifiées par
l'utilisateur, permettant ainsi d'atteindre la souplesse
d'utilisation exigée pour un usage industriel. La première
version de CASTING prend en entrée des
spécification dans la syntaxe AMN de la méthode
B . Nous travaillons actuellement à la
transposition de ces idées au test structurel (de programmes
C et C++) dans le cadre d'un projet
industriel européen ( TWO).
Les actions «amont» sont utilisables dans le cas, idéal, où il
est possible d'agir dans la phase de développement du logiciel.
Le but visé est alors de fournir des moyens de construction qui
faciliteront la phase ultérieure de validation du logiciel. Les
actions de cette catégorie se traduisent notamment par des
méthodes et des langages qui induisent une discipline de
développement ou de programmation. Nous étudions dans ce
cadre des langages de haut niveau comme les langages déclaratifs
(logiques, fonctionnels) et les langages d'architectures de
logiciels. Ces langages fournissent un pouvoir d'expression
appréciable tout en offrant un niveau de description qui facilite
le raisonnement formel (cf. module 3.5).
S'agissant des langages déclaratifs, les enjeux les plus
importants concernent leur mise en oeuvre efficace et la
conception d'environnements de programmation adéquats. Ces deux
problèmes sont abordés dans le projet LANDE. En
particulier, nous avons proposé un cadre formel pour décrire et
comparer les techniques de compilation des langages fonctionnels.
Cela nous a permis d'établir une taxonomie des mises en oeuvre de
langages fonctionnels. Pour ce qui concerne les environnements de
programmation, nous avons développé l'outil OPIUM,
qui analyse les traces d'exécution de programmes générées par un
traceur Prolog existant; nous concevons actuellement un traceur
pour Mercury, un nouveau langage de programmation logique
développé à l'université de Melbourne.
Une autre action importante dans la catégorie «amont» concerne
les architectures de logiciels. L'objectif en la matière consiste
à spécifier l'organisation globale de logiciels afin d'améliorer
la maîtrise des gros systèmes (développement, analyse, test,
maintenance, etc.). Une ambition majeure dans ce domaine est le
passage à l'échelle de techniques comme l'analyse, le raffinement
ou la vérification de programmes. Nous avons proposé une manière
de spécifier des architectures en terme de graphes. Nos travaux
actuels sur ce thème concernent la possibilité de traiter des
vues multiples d'une architecture tout en assurant une forme de
cohérence globale de la spécification.

Précédent : Composition de l'équipe Remonter :
Conception et validation
de logiciels Suivant : Fondements scientifiques