Raffinement de modèles JML
Julien Groslambert
LIFC Besançon
Réunion GECCOO - 25 Octobre 2005
FRE 2661
PLAN
Contexte et enjeux
Raffinement préservant les sûretés
Conclusion et travaux futurs
Contexte et enjeux
Politique de
sécurité
Cahier des charges
Code Java de l’application
Propriétés de
sécurité
Expression sur un cahier des charges souvent informel
Détails et décisions d’implémentations cachés
Difficile d’exprimer des erreurs de bas niveau.
Vérification à l’aide d’annotations JML
Détection des erreurs type NullPointerException…
Propriétés de haut niveau pas facilement exprimable
AnnotationsJML
Contexte et enjeux
Politique de
sécurité
Cahier des charges
Code Java de l’application
Propriétés de
sécurité
AnnotationsJML
Vérificationdirecte difficile
Contexte et enjeux
Politique de
Sécurité
Cahier des charges
Code Java de l’application
Propriétés de
sécurité
Modèle abstrait JML
VérificationsimplifiéeExpression
simplifiée
Vérificationcomplexe
Vérification des propriétés de haut niveau sur un modèle de haut niveau (abstrait)
Problème du lien avec l’application
Contexte et enjeux
Politique de
Sécurité
Cahier des charges
Code Java de l’application
Propriétés de
sécurité
AnnotationsJML du code
Modèle abstrait JML
Modèle raffiné 1
Modèle raffiné n
Préservation
Proposition : Introduire un raffinement de modèle JML qui préserve les propriétés du modèle abstrait
PLAN
Contexte et enjeux
Raffinement préservant les sécurités
Conclusion et travaux futurs
Raffinement
Idée du raffinementAjouter des détails à un modèle abstrait pour le rendre plus concret
Préserver les propriétés vérifiées sur le modèle abstrait.
Notion différente du sous-typage
Pour un type de propriété donné, trouver la bonne relation de raffinement pour préserver ce type de propriété
Exemple : Spécification de Demoney
Modélisation d’une interface de Demoney d’après le cahier des charges
1er modèle abstrait : Modélisation de la personnalisation
Exemple: Spécification de Demoney
public interface model1{boolean personnalized;
/*@ behavior @ requires @ personnalized == false; @ assignable personnalized; @ ensures personnalized == true; @*/void storeData();
/*@ behavior @ requires @ personnalized == true; @ assignable \nothing; @*/void initializeTransaction();
/*@ behavior @ requires @ personnalized == true; @ assignable \nothing; @*/void completeTransaction();
/*@ assignable \nothing; @*/void pinChangeUnblock();
…
}
Vérification de propriété
Expression d’une propriété de sûretéAfter storeData() normal always storeData() not enabled; (AMAST’02)
Génération d’annotations avec JAG
Vérification de la consistance du modèle complétée (ZB’05)
Raffinement de données
Notations Cr raffine Ca Ca Cr
Ca vérifie une propriété Ca |=
Raffinement des donnéesPrédicat JML Ic.
Lien entre variables abstraites et raffinées.
Changement d’espace d’état.
Ajout de nouvelles variables durant le raffinement.
Raffinement de classes
Classe Ca {
//@ initially Inita
//@ invariant Ia;
//@ constraint Ha;…
Classe Cr {
//@ initially Initr
//@ invariant Ir;
//@ constraint Hr;…
Renforcement de l’initialisation
Initr && Ic ==>Inita
Renforcement de l’invariant
Ir && Ic ==> Ia
Renforcement des contraintes
Hr && Ic && \old(Ic) ==> Ha
Raffinement de méthodes
/*@ behavior
@ requires Pa;
@ diverges Da;
@ assignable Aa;
@ ensures Qa;
@ signals (Ea e) Ra
@*/
Ma();
/*@ behavior
@ requires Pr;
@ diverges Dr;
@ assignable Ar;
@ ensures Qr;
@ signals (Er e) Rr
@*/
Mr();
Renforcement des préconditions
Obligation de preuve
Pr && Ic ==> Pa
/*@ behavior
@ requires Pa;
@ diverges Da;
@ assignable Aa;
@ ensures Qa;
@ signals (Ea e) Ra
@*/
Ma();
/*@ behavior
@ requires Pr;
@ diverges Dr;
@ assignable Ar;
@ ensures Qr;
@ signals (Er e) Rr
@*/
Mr();
Renforcement des conditions de divergence
Obligation de preuve
Dr && Ic ==> Da
/*@ behavior
@ requires Pa;
@ diverges Da;
@ assignable Aa;
@ ensures Qa;
@ signals (Ea e) Ra
@*/
Ma();
/*@ behavior
@ requires Pr;
@ diverges Dr;
@ assignable Ar;
@ ensures Qr;
@ signals (Er e) Rr
@*/
Mr();
Pas d’ajout d’effet de bord
Obligation de preuve (Anew nouvelles variables)
X. (X Ar && Ic ==> (X Aa || X Anew))
/*@ behavior
@ requires Pa;
@ diverges Da;
@ assignable Aa;
@ ensures Qa;
@ signals (Ea e) Ra
@*/
Ma();
/*@ behavior
@ requires Pr;
@ diverges Dr;
@ assignable Ar;
@ ensures Qr;
@ signals (Er e) Rr
@*/
Mr();
Renforcement des post-conditions
Obligation de preuve
Qr && Ic && Pa && !Da && Pr && ! Dr ==> Qa
/*@ behavior
@ requires Pa;
@ diverges Da;
@ assignable Aa;
@ ensures Qa;
@ signals (Ea e) Ra
@*/
Ma();
/*@ behavior
@ requires Pr;
@ diverges Dr;
@ assignable Ar;
@ ensures Qr;
@ signals (Er e) Rr
@*/
Mr();
Inclusion des types d’exceptions
Obligation de preuve
\typeof(Er) \typeof(Ea)
/*@ behavior
@ requires Pa;
@ diverges Da;
@ assignable Aa;
@ ensures Qa;
@ signals (Ea e) Ra
@*/
Ma();
/*@ behavior
@ requires Pr;
@ diverges Dr;
@ assignable Ar;
@ ensures Qr;
@ signals (Er e) Rr
@*/
Mr();
Renforcement des post-conditions exceptionnelles
Obligation de preuve
Rr && Ic && Pa && !Da && Pr && ! Dr ==> Ra
/*@ behavior
@ requires Pa;
@ diverges Da;
@ assignable Aa;
@ ensures Qa;
@ signals (Ea e) Ra
@*/
Ma();
/*@ behavior
@ requires Pr;
@ diverges Dr;
@ assignable Ar;
@ ensures Qr;
@ signals (Er e) Rr
@*/
Mr();
Théorème
Soit une propriété de sûreté
(Ca |= ) && (Ca Ic Cr) ==> (Cr |= )
Idée de la preuve : on montre que les exécutions de Cr sont simulées par les exécutions de Ca
Idée de la preuve
Appel de Mr
Idée de la preuve
Appel de Mr
Pr
Idée de la preuve
Appel de Mr
Pr
Pa
Idée de la preuve
Mrcalled
Pr
Pa Macalled
Mr normal
Qr
Idée de la preuve
Mrcalled
Pr
Pa Macalled
Mr normal
Qr
Qa
Idée de la preuve
Mrcalled
Pr
Pa Macalled
Mr normal
Qr
QaMr normal
Idée de la preuve
Mrcalled
Pr
Pa Macalled
Mr normal
Qr
QaMr normal
Mr exceptional
Rr
Idée de la preuve
Mrcalled
Pr
Pa Macalled
Mr normal
Qr
QaMr normal
Mr exceptional
Rr
Ma exceptional
Ra
Exemple sur Demoney
Modèle abstrait: Modélisation de la personnalisation
1er raffinement : Modélisation des niveaux d’accèsIntroduction d’une variable AccessLevel représentant le niveau d’accès
Mise à jour des spécifications de méthode
Exemple sur Demoney
public interface model2{ boolean personnalized; int accessLevel; /*@ invariant 1 <= accessLevel @ && accessLevel <= 4; @*/
/*@ requires @ personnalized == false @ & accessLevel == 4; @ assignable personnalized; @ ensures personnalized == true; @*/
void store_data();
/*@ requires @ personnalized == true @ && accessLevel >=2 @ && accessLevel <= 3; @ assignable \nothing; @*/
void initialize_transaction();
/*@ behavior @ requires @ personnalized == true; @ && accessLevel >=2 && @ accessLevel <= 3; @ assignable \nothing; @*/void complete_transaction();
/*@ requires accessLevel == 4 @ assignable \nothing; @*/void pin_change_unblock();
…
}
Spécification de Demoney
Specification de Demoney en suivant la specification publique.
Modèle Abstrait : Personnalisation
Raffinement 1 : Niveaux d’accès
Raffinement 2 : Code Pin
Raffinement 3 : Balance et transactions
…
But : vérifier à chaque niveau les propriétés et s’approcher de l’implantation
Propriétés supplémentaires
Ajout de nouvelles méthodes lors du raffinement.Les nouvelles méthodes ne peuvent modifier les variables abstraites
Préservation de l’atomicitéLes nouvelles méthodes ne peuvent pas être déclenchées sous certaines conditions
Préservation des vivacitésLe système ne doit pas comporter de nouveaux blocages
Les nouvelles méthodes doivent faire décroître un variant.
PLAN
Contexte et enjeux
Raffinement préservant les sécurités
Conclusion et travaux futurs
Conclusion
Premières réflexions sur une notion de raffinement
Différentes applicationsDéveloppement étape par étape d’une spécification
Exemple de Demoney en cours.
Développement étape par étape d’un algorithmeExemple du Dutch National Flag.
Vérification de l’intégration d’une classe dans un environnement
Travaux futurs
Ecriture d’un outil de génération d’obligations de preuve de raffinement.
OP au format Why (modèle de Krakatoa) et Jack
Environnement de développement par raffinementDéveloppement par raffinement d’algorithmes avec pointeurs.
Schorr-Wait, inversion de liste chaînée…Intégration des travaux de Sylvain Boulmé
Lien raffinement / sous-typageComparaison fine des deux notionsCollaboration