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/