Vous êtes sur la page 1sur 4

Licence SIL -ACPI

Mthodes formelles
Les mthodes formelles sont des techniques permettant de raisonner rigoureusement, l'aide de la logique sur des programmes afin de dmontrer leur validit par rapport leur spcification Ces mthodes permettent d'obtenir une trs forte assurance de l'absence de bug elles sont coteuses en ressources (humaines et matrielles) et actuellement rserves aux logiciels les plus critiques
1 2

Mthode Formelle Java Modeling Language


Colette Johnen johnen@labri.fr www.labri.fr/~johnen

Diffrentes phases du cycle de vie d'un logiciel


analyse : comprendre le problme, les besoins conception : dcomposer en sous-problmes, trouver une architecture pour rsoudre le problme ralisation : dvelopper les diffrents morceaux intgration : faire marcher ensemble les diffrents morceaux validation : s'assurer qu'on a bien rpondu au problme
3

Spcification
Chaque phase produit son lot de spcifications = document qui dcrit tout ou partie de l'application, un niveau d'abstraction donn, dans un formalisme qui peut tre plus ou moins formel Une spcification est un ensemble explicite d'exigences que doit satisfaire le programme/systme
4

Java Modeling Language (JML)


JML est un langage de spcification formelle pour Java. Il utilise la logique de Hoare : Pr et Post condition aux mthodes Les spcifications sont ajoutes au code en Java (en commentaire) Il existe des logiciels (Esc/Java) vrifiant que le code Java ralise la spcification

PQ des Spcifications Formelles ?


Trs peu utilises en pratique. Mais raisonner en termes de spcification est un + : identification rigoureuse des pr-conditions et rflexion sur leur mise en uvre rflexion sur ce que fait la mthode : postcondition et invariant du code mieux pens, et mieux document = code de meilleure qualit ! Aide la ralisation des tests et validation du code
5 6

MF - DVI

Validation versus Test dun logiciel


La validation est une opration destine dmontrer qu'un logiciel produit effectivement les rsultats escompts . Un jeu de tests sert mettre en vidence des dfauts du logiciel via un ensemble de tests Test : les donnes, les rsultats escompts Test et validation sappuie sur une spcification
7

Validation dun code Java laide de JML et Esc/Java


1. Spcifier le code (JML) 2. Ecrire le code (Java) 3. Excuter Esc/Java : il vrifie que le code Java correspond la spcification.
message derreurs le code ne ralise pas la spcification Message dalerte, impossible de vrifier que le code ralise la spcification
8

Dfauts de la Validation laide dune spcification formelle


1. vrifie que le code ralise la spcification formelle : Spcification partielle, car le langage de spcification est limit Spcification incomplte Spcification errone 2. Outil de validation est lui-mme bogu
9

Implmenter une pr-condition


indiquer la pr-condition dans la doc (IMPERATIF) 1. 2. 3. 4. ne pas protger la mthode (beurk !) ne rien faire si la pr-condition est viole (beurk !) lever une exception si la pr-condition est viole Traiter les cas o la pr-condition est viole (complexifi le code). 5. protger la mthode par une assertion Dans les 4 premiers cas, la fonction est totale. Dans le dernier cas, la fonction est partielle.

10

Exemple dannotation JML (1)


public class CompteBancaireExemple {
public static final int MAX = 1000; private int sol; // Invariant en JML : une formule qui // doit tre valide //@ invariant sol >= 0 && sol <= MAX;

JML et visibilit
Souvent, la spcification d'une mthode Java publique utilise des attributs privs de la classe. Par dfaut, ce n'est pas autorise en JML : la spcification d'une mthode publique est publique ; et on ne peut pas mentionner dans une spcification publique des attributs privs . solution : /*@ spec_public @*/
11 12

MF - DVI

Exemple dannotation JML (1 corrig)


public class CompteBancaireExemple {
public static final int MAX = 1000; private /*@ spec_public @*/ int sol; // Invariant en JML = une formule valide //@ invariant sol >= 0 && sol <= MAX;

Exemple dannotation JML (2)


// post condition (mot clef : ensures) //@ ensures sol == 0; public CompteBancaireExemple() { ... }

13

14

Exemple dannotation JML (3)


// pr-condition (mot clef : requires) //@ requires mont > 0; //@ requires mont <= MAX - sol; // liste des variables modifis //@ modifies sol; /* \old(sol) est la valeur de la variable sol avant lexcution de la mthode */ //@ ensures sol == \old(sol) + mont; public void crediter(int mont) { ... }
15

Exemple dannotation JML (4)


//@ requires mont > 0; //@ ensures sol == \old(sol) - mont; //@ modifies sol public void debiter(int mont) { ... }

16

Exemple dannotation JML (4 Corrig)


//@ requires sol >= mont; //@ requires mont > 0; //@ modifies sol ; //@ ensures sol == \old(sol) - mont; public void debiter(int mont) { ... }

Exemple dannotation JML (5)


/* \result est la valeur retourne par la fonction */ //@ ensures \result == sol; public int getSolde() { ... } }

17

18

MF - DVI

JML : Invariant de boucle


//@ requires b > 0; //@ ensures \result == a+b; static int add (int a, int b) { int res = a; int cpt = b; //@ loop_invariant cpt >= 0; //@ loop_invariant cpt <= b; //@ loop_invariant a+b == res+cpt; while (cpt > 0) { res = res + 1; cpt = cpt - 1; } return res; }
19

JML : Notation
\forall ==> <==> == && \exists <=!=> != ||

Exemple : (\forall int i; i < Max ==> a[i] < a[Max]) Consulter les documents de
\\info\net\Bibliotheque\MF-dev\TP_EscJava\doc
20

Remerciement
Cours de SVL (Spcification et Validation de Logiciel) http://www.lifl.fr/~nebut/ens/svl/ Mirabelle Nebut, MdC, l'Universit Lille 1. Exercice et TP de Mthode formelle,
http://www.labri.fr/perso/ly/enseignement/smv/

Olivier Ly, MdC, lIUT Bordeaux 1.

21

MF - DVI