Génération

publicité
JAG : JML Annotation Generator
Julien Groslambert – Alain Giorgetti
LIFC Besançon
Réunion GECCOO - 25 Octobre 2005
FRE 2661
PLAN
Contexte
Conception de l’outil
Démonstration
Conclusion et travaux futurs
PLAN
Contexte
Conception de l’outil
Démonstration
Conclusion et travaux futurs
Contexte
Extension de JML pour spécifier des propriétés
temporelles (AMAST 02)
Formules temporelles sont traduites en JML standard
Fichier
source
Java
Formule
temporelle
JAG
Fichier
Java
annoté JML
Preuve
Animation
Tests
Rappel sur le langage
E1
s0
Evénements
M called
M normal
M exceptional
M terminates
Etats
Prédicat JML
M enabled
M not enabled
Rappel sur le langage
Always P
P
P
P
P
P
P
Eventually P
P
P
P
P
P
P
Rappel sur le langage
C Until E1
C
E1
C Unless E1
C
E1
C
Rappel sur le langage
After E1 T
E1
Before E1 C
C
E1
T
Exemples d’expressions
Personnalisation unique
After storeData() normal
always storeData() not enabled;
Pas de transactions multiples
After initializeTransaction() called
always initializeTransaction() not enabled until
completeTransaction() called;
Vérification du code PIN
Before completeTransaction() called
eventually pinValidated ==true ;
PLAN
Contexte
Conception de l’outil
Démonstration
Conclusion et travaux futurs
PLAN
Contexte
Conception de l’outil
Démonstration
Conclusion et travaux futurs
Entrée
Spécification Java/JML
Analyse syntaxique avec JML Tools
Fichier contenant une ou plusieurs propriétés
temporelles
Analyse syntaxique faite avec ANTLR
Intégration forte à JML Tools envisageable
Transformation de la propriété
temporelle en primitives
Trois types de primitives
Inv : Partie sûreté de la propriété
Loop : Partie vivacité de la propriété
Witness : Observation d’appel de méthodes ou d’états du
système
Factorisation du travail de génération
Facilite l’ajout d’autres formats d’entrée
Génération des annotations JML à
partir des primitives
Inv : Invariant de classe
Loop : Ensemble d’invariants et de contraintes
historiques qui assurent la terminaison et le non
blocage
Witness : Variables ghost
Sortie
Génération d’un fichier de sortie Java contenant le
code d’origine et les annotations JML
Utilisation avec tous les outils Java/JML
Génération d’une sortie HTML pour la visualisation et
la publication
Conception interne
Formule
temporelle
Classe
Java/JML
Parser
ANTLR
Parser
ANTLR
AST
ANTLR
AST
ANTLR
Réduction
en
primitives
Ensemble de
primitives
temporelles
Ensemble
d’annotations
JML
Génération
d’annotations
Génération
du fichier
de sortie
Classe Java
annotée
Traçabilité des annotations
Traçabilité des annotations générées implantée
A partir d’une annotation, on peut retrouver :
Primitive d’origine
Propriété temporelle d’origine
Expertise facilitée en cas d’échec de la preuve
Transparence future de la génération des annotations
Communication future entre les différentes sorties.
Utilisation
Interface graphique écrite en Swing
Utilisation en ligne de commande
Possibilité d’utilisation sous forme d’API
PLAN
Contexte
Conception de l’outil
Démonstration
Conclusion et travaux futurs
PLAN
Contexte
Conception de l’outil
Démonstration
Conclusion et travaux futurs
Chargement du
fichier de sortie
avec Jack.
Génération des
obligations de
preuve.
Prouveur Symplify
2 O.P. non vérifiées
Un invariant n’est
pas préservé avec
commitTransaction()
Un invariant n’est
pas préservé avec
modify()
Génération des
obligations de
preuve sur le fichier
corrigé.
100% de preuve
automatique avec
Simplify
PLAN
Contexte
Conception de l’outil
Démonstration
Conclusion et travaux futurs
PLAN
Contexte
Conception de l’outil
Démonstration
Conclusion et travaux futurs
Conclusion
Première phase de développement de l’outil achevée
Implantation des travaux sur les propriétés de sûreté
(AMAST02) et les propriétés de vivacité
Traçabilité des annotations
Génération d’un fichier contenant les annotations
+ Fonctionne avec tous les outils JML
- Moins efficace qu’une intégration complète aux outils de sortie
Intégration aux outils
Outil externe
Classe
Java/JML
Parser
JML
AST
JML
Preuve
Animation
…
Intégration aux outils
Formule
temporelle
Parser
AST
Génération
Outil externe
Classe
Java/JML
Parser
JML
AST
JML
AST JML
complété
Preuve
Animation
…
Travaux futurs
Extension en cours de développement pour supporter
en entrer les automates de Büchi et la LTL.
Utilisation pour vérifier des propriétés sur une
spécification JML de Demoney
Intégration aux outils
existants
Intégration à Jack.
JAG comme Plug-in Eclipse
Traçabilité complète des propriétés temporelles.
Analyse et expertise des données du prouveur.
Intégration à Krakatoa : deux possibilités envisagées
Ajout à l’AST de Jml Tools
Ajout au format intermédiaire XML
Problèmes de traçabilité
Collaboration Preuve/Test avec JML-Testing Tools à
moyen terme
Distribution de l’outil
http://lifc.univ-fcomte.fr/~groslambert/JAG/
Téléchargement