J'ai séjourné en mission de longue durée (4 mois) au sein de l'équipe Loop de l'université de Nimègue où je me suis consacré aux études de cas proposées par les partenaires industriels (SchlumbergerSema) du projet Verificard. Je compare en particulier les possibilités respectivement offertes par l'outil Loop développé dans cette équipe et Krakatoa où nos résultats sont mis en œuvre.
Les cartes à puces Java permettent de charger et d'exécuter des programmes écrits dans un sous-ensemble JavaCard du langage Java. Ces programmes sont d'une taille moyenne à cause des contraintes physiques de la carte. Comme il est important de garantir le fonctionnement sûr de ces programmes, on est amené à restreindre les constructions de langage utilisées à un sous-ensemble bien compris. Pour toutes ces raisons, les programmes JavaCard sont des candidats privilégiés à l'utilisation de méthodes de spécification et de preuve formelle.
Résultats.
Nous avons défini deux modèles logiques différents permettant de
représenter les applets JavaCard dans l'assistant de preuve
Coq :
Une réflexion sur différentes approches de représentation du tas d'allocation a conduit au développement de prototypes permettant un traitement de programmes codés en un langage incluant strictement JavaCard, à l'aide de traduction du code source puis de génération des obligations de preuves Coq à partir d'annotations fournies par l'utilisateur.
Notre implantation de cette approche s'est établie suivant une architecture à trois outils :
Mise en œuvre
Je suis coauteur (avec Claude Marché) de l'outil de traduction
fonctionnelle
Krakatoa
. Il fournit, sur
l'entrée d'un programme Java ou
JavaCard
(et donc impératif)
annoté en JML, un programme ayant la même sémantique mais
destiné au générateur d'obligations de preuve Why,
c'est-à-dire fonctionnel avec quelques traits impératifs : exceptions
et références. Ce travail est arrivé à maturité et un premier
prototype a permis de traiter des exemples de programmes simples. Une
version de distribution est prévue pour janvier 2003. Un exposé ainsi
qu'une démonstration ont été présentés au workshop \textsc{Verisafe}
de Nice les 19 et 20 septembre 2002. Un article sur cette approche
paraîtra prochainement dans le journal JLAP
[ps.gz].