Académique Documents
Professionnel Documents
Culture Documents
Nicole Levy1
1 CNAM
Spécifier 6= Programmer
Spécification : description précise de ce que doit faire (ou fait) le
logiciel
Programme: description de comment il le fait
Objectifs visés:
Maîtriser la complexité
Permettre la validation des logiciels
Faciliter la maintenance et l’évolution
la preuve
Les preuves:
réalisées au fur et à mesure du développement
effectuées, non pas sur le programme (il n’existe pas encore)
mais sur les différents modèles que l’on est amené à élaborer
Techniques de validation:
test: les erreurs sont (partiellement) découvertes et (en principe)
corrigées après la phase de codage.
Model checking: simulation en laboratoire avec étude exhaustive
de toutes les exécutions possibles.
Modèle initial:
Propriété : transmettre une suite d’éléments, en
respectant l’ordre et la continuité des éléments
entre deux partenaires.
Hypothèse hostile : la transmission peut être totale ou
partielle.
INVARIANT
MACHINE
Somme versee ∈ NAT ∧
DISTRIBUTEUR
Nb demandes ∈ NAT ∧
CONSTANTS
Nb disponibles ∈ NAT ∧
Prix ,
Nb demandes ≤
Valeur piece
Nb disponibles ∧
PROPERTIES
Somme versee ≤
Prix ∈ NAT ∧
(Nb demandes × Prix)
Valeur piece ∈ NAT ∧
INITIALISATION
Prix mod Valeur piece = 0
BEGIN
ABSTRACT VARIABLES
Somme versee := 0 ||
Somme versee,
Nb demandes := 0 ||
Nb demandes,
Nb disponibles :∈ NAT
Nb disponibles
END
OPERATIONS
Indiquer nbre (nbc ) =
PRE nbc ∈ NAT1 ∧ nbc < Nb disponibles ∧
Somme versee = 0 ∧ Nb demandes = 0
THEN
Nb demandes := nbc
END ;
Introduire piece =
PRE Nb demandes > 0 ∧
Somme versee + Valeur piece ≤ Nb demandes × Prix
THEN
Somme versee := Somme versee + Valeur piece
END ;
rendu ← Annuler =
BEGIN
Somme versee := 0 ||
Nb demandes := 0 ||
rendu := Somme versee
END
END
valve de test
bassin
valve du bassin
pompe chemin 1
Max réservoir
Min
Définit la liste
des ensembles abstraits et des ensembles énumérés
qui seront utilisés pour typer les variables
Exemples :
CONSTANTS
Hauteur Max , Hauteur Min
Clause VARIABLES
Clause INVARIANT
Exemple :
VARIABLES
Pompe , /* Etat de la pompe */
Niveau eau , /* Etat du niveau de l’eau dans le réservoir */
V reservoir , V test , V bassin /* Etat des 3 valves */
INVARIANT
Pompe ∈ ETAT POMPE ∧
Niveau eau ∈ ETAT NIVEAU EAU ∧
V reservoir ∈ ETAT VALVE ∧
V test ∈ ETAT VALVE ∧
V bassin ∈ ETAT VALVE ∧
(( Pompe = marche ) ⇒
(V reservoir = ouverte ∧ V test = fermee ∧ V bassin = ouverte )
∨
(V reservoir = fermee ∧ V test = ouverte ∧ V bassin = ouverte ))
∧
(( Pompe = arret) ⇒
(V reservoir = fermee ∧ V test = fermee ∧ V bassin = fermee))
Opérateurs booléens :
¬ (non), ∨ (ou), ∧ (et), ⇒ (implique), ⇔ (équivalent)
Quantificateurs :
∀ x . P (pour tout x tel que P)
∃ x . P (il existe x tel que P )
Prédicat d’égalité : =
INITIALISATION
Pompe := arret || Niveau eau := correct ||
V reservoir := fermee || V test := fermee ||
V bassin := fermee
Preuve:
(( Pompe = arret) ⇒
(V reservoir = fermee ∧ V test = fermee ∧ V bassin = fermee))
(vrai ⇒ (vrai ∧ vrai ∧ vrai)) = vrai
Exemples :
OPERATIONS
Oper1 = ...
Oper2 (param1, param2)= ...
r 1, r 2 ← Oper3 (param1, param2)= ...
INITIALISATION
Pompe := arret ||
Niveau eau := correct ||
V reservoir := fermee ||
V test:= fermee ||
V bassin := fermee
OPERATIONS
Tester =
PRE Niveau eau 6= trop bas THEN
Pompe := marche ||
V reservoir := fermee ||
V test := ouverte ||
V bassin := ouverte
END ;
Arreter =
PRE Niveau eau 6= trop bas THEN
Pompe := arret ||
V reservoir := fermee ||
V test := fermee ||
V bassin := fermee
END ;
Remplir =
BEGIN
Pompe := marche ||
V reservoir := ouverte ||
V test := fermee ; V bassin := ouverte
END
Trop haut =
BEGIN
Niveau eau := trop haut
END ;
Trop bas =
BEGIN
Niveau eau := trop bas
END ;
Correct =
BEGIN
Niveau eau := correct
END
END
Correction partielle: P { S } Q
Si l’état satisfait P avant l’exécution de S et si S termine,
Alors l’état satisfait Q après.
Correction totale : la plus faible précondition wp(S, Q) est notée
en B : [S] Q
Si l’état satisfait [S] Q avant l’exécution de S
Alors S termine et l’état satisfait Q après.
Remarque:
P { S } Q en correction totale est équivalent à P ⇒ [S] Q
Substitution Réduction
x := E||y := F x, y := EF
IF P THEN S CHOICE (SELECT P THEN S END) OR
ELSE T END (SELECT ¬ P THEN T END) END
Synthèse:
1 Un horodateur traite un utilisateur à la fois.
2 Un horodateur ne peut lire qu’une carte à la fois.
3 L’horodateur peut lire la somme mémorisée sur la carte. Celle-ci
peut être nulle.
4 La durée est un nombre entier d’unités de temps. Une unité est
définie pour chaque horodateur et elle est constante.
5 Une carte ne reste pas indéfiniment dans l’horodateur.
Nicole Levy (CNAM) La méthode B 2014-2015 51 / 84
Exemple : les variables de l’horodateur
var ∈ TYPE
signifie qu’à chaque instant la variable var
a pour valeur un des éléments de l’ensemble TYPE.
X × Y Produit cartésien
(x 7→ y ) = (x, y )Correspondance binaire
Exemples:
X = {1, 2, 3}
Y = {4, 5}
X × Y = {(1 7→ 4), (1 7→ 5), (2 7→ 4), (2 7→ 5), (3 7→ 4), (3 7→ 5)}
Déclaration
var ∈ P TYPE signifie qu’à chaque instant la variable var a pour
valeur un ensemble des éléments de l’ensemble TYPE, autrement dit,
une partie de TYPE.
Remarque: l’ensemble des parties de l’ensemble TYPE se note
P TYPE
Exemples:
Lignes d une Station: P LIGNE
Stations d une Ligne: P STATION
CartesOfficielles ∈ P Cartes
CId ∈ CartesOfficielles
Non Appartenance : ∈
/
CV ∈/ CartesOfficielles
{CId, CVit, CF , CV } ∈
/ PCartesOfficielles
x∈/∅
Appartenance : ∈
(a 7→ b) ∈ R ⇔ (a, b) ∈ R
(Pasteur 7→ 12) ∈ Reseau ⇔ (Pasteur , 12) ∈ Reseau
Image : R[A]
Ensemble des valeurs du codomaine de R en relation
avec les valeurs de A
Exemples:
Reseau[{Italie, Jussieu}] = {5, 6, 7, 10}
Reseau[{Jussieu, Pasteur }] = {6, 7, 10, 12}
Reseau[{Jussieu}] = {7, 10}
Pour toute relation R ∈ A ↔ B , A1 ⊆ A et A2 ⊆ A :
R[A1] = {b|b ∈ B ∧ ∃ a.(a ∈ A1 ∧ (a 7→ b) ∈ R)}
R[∅] = ∅
R[A1 ∪ A2] = R[A1] ∪ R[A2]
R[A1 ∩ A2] ⊆ R[A1] ∩ R[A2]
R[dom (R)] = ran (R)
Exemples:
{Italie, Jussieu} C Reseau = {(Italie 7→ 5), (Italie 7→ 6), (Italie 7→ 7),
(Jussieu 7→ 7), (Jussieu 7→ 10)}
{Jussieu, Pasteur } C Reseau = {(Jussieu 7→ 7), (Jussieu 7→ 10),
(Pasteur 7→ 6), (Pasteur 7→ 12)}
Pour toute relation R et tout ensemble A : A C R ⊆ R
dom (R) C R = R
∅CR =∅
dom(A C R) = A ∩ (dom (R))
Restriction de co-domaine : R B B
Relation R restreinte à la partie dont le co-domaine est B
R B B désigne l’ensemble des couples (a 7→ b) de R pour
lesquels b appartient à B :
(a 7→ b) ∈ (R B B) ⇔ (a 7→ b) ∈ R ∧ b ∈ B
Exemples:
Reseau B {6, 7} = {((Italie 7→ 6), (Italie 7→ 7),
(Jussieu 7→ 7), (Pasteur 7→ 6), ...}
Reseau B {7} = {(Jussieu 7→ 7), (Italie 7→ 7), ...}
Pour toute relation R et tout ensemble B : R B B ⊆ R
R B ran (R) = R
RB∅=∅
ran(R B B) = ran (R) ∩ B
Antirestriction de domaine : A − CR
Complément de la relation A C R dans R
A−C R désigne l’ensemble des couples (a 7→ b) de R pour
lesquels a n’appartient pas à A :
(a 7→ b) ∈ (A −C R) ⇔ (a 7→ b) ∈ R ∧ a ∈/ A Pour toute
relation R et tout ensemble A : A −
C R = (X \ A) C R
A−CR ⊆R
(dom (R)) −CR =∅
∅−CR =R
dom(A − C R) = (dom (R)) \ A
(A C R) ∪ (A −
C R) = R
(A C R) ∩ (A −
C R) = ∅
Antirestriction de co-domaine : R − BB
Complément de la relation R − B B dans R
R− B B désigne l’ensemble des couples (a 7→ b) de R pour
lesquels
b n’appartient pas à B :
(a 7→ b) ∈ (R −
B B) ⇔ (a 7→ b) ∈ R ∧ b ∈ /B
Pour toute relation R et tout ensemble B : R −
BB⊆R
R− B ran R = ∅
R− B ∅ = R ran(R −B B) = ran (R) \ B
(R B B) ∪ (R −
B B) = R
(R B B) ∩ (R −
B B) = ∅
Composition avant : R1 o9 R2
Soient R1 ∈ A ↔ B et R2 ∈ B ↔ C
Alors R1 o9 R2 représente la composition de R1 et R2.
Elle contient l’ensemble des couples (a 7→ c) tels que
il existe un élément b de B tel que (a 7→ b) ∈ R1 et
(b 7→ c) ∈ R2 :
(a 7→ c) ∈ R1 o9 R2 ⇔ ∃ b : B.(a 7→ b) ∈ R1 ∧ (b 7→ c) ∈ R2
R1 ∈ A ↔ B & R2 ∈ B ↔ C ⇒ R1 o9 R2 ∈ A ↔ C
(a1 7→ a2) ∈ id A ⇔ a1 ∈ A ∧ a2 ∈ A ∧ a1 = a2
Relation Inverse : R−1
R−1 représente la relation composée des couples
inverses de ceux de R.
(b 7→ a) ∈ R−1 ⇔ (a 7→ b) ∈ R
(R−1 )−1 = R
(id A)−1 = id A
dom (R−1 ) = ran (R)
ran (R−1 ) = dom (R)
Nicole Levy (CNAM) La méthode B 2014-2015 75 / 84
Opérateurs de relations
Surcharge : R1 −
−R2
C
R1 −
−R2 désigne la relation constituée des éléments de
C
R2 et des éléments de R1 dont le premier élément
n’appartient pas au domaine de R2.
Dans R1 −C−R2, les éléments a 7→ c de R2 surchargent les
éventuels éléments a 7→ b de R1.
∀ R1, R2 • (R1 ∈ A ↔ B ∧ R2 ∈ A ↔ B) ⇒
R1 −
−R2 = (dom (R2) −
C C R1) ∪ R2
R−
−R = R
C
∅−
−R = R −
C −∅ = R
C
dom (R1 −
−R2) = dom (R1) ∪ dom (R2)
C
dom (R1) ∩ dom (R2) = ∅ ⇒ R1 − −R2 = R1 ∪ R2
C
SYSTEM
PAYS
SETS
LESPAYS = {B , Lux , NL , Ger , CH };
VARIABLES
relref ∈ LESPAYS ↔ LESPAYS
pays ∈ LESPAYS ↔ LESPAYS
reltrans ∈ LESPAYS ↔ LESPAYS
ens pays ⊆ LESPAYS
INVARIANT
( ∀ aa . (aa ∈ LESPAYS ⇒ (aa 7→ aa) ∈ relref )) ∧
( ∀ (aa, bb) . ( (aa 7→ bb) ∈ pays ⇒ (bb 7→ aa) ∈ pays )) ∧
( ∀ (aa, bb, cc).(((aa 7→ bb) ∈ reltrans ∧ (bb 7→ cc) ∈ reltrans)
⇒ (aa 7→ cc) ∈ reltrans))
INITIALISATION
relref := { (B 7→ B),(NL 7→ NL),(Ger 7→ Ger), (NL 7→ Lux),
(Lux 7→ Lux), (NL 7→ Ger),(Ger 7→ NL),(Ger 7→ CH),
(CH 7→ CH) } ;
pays := { (B 7→ Lux),(B 7→ NL),(Lux 7→ B), (Lux 7→ NL),
(B 7→ Ger),(Lux 7→ Ger),(NL 7→ B),NL 7→ Lux),
((NL 7→ Ger),(Ger 7→ B),(Ger 7→ Lux),(Ger 7→ NL),
(Ger 7→ CH),(CH 7→ Ger) } ;
Une fonction peut être modifiée en lui ajoutant ou en lui retirant des
couples d’éléments :
SYSTEM
STOCK
SETS
ARTICLE ;
MESSAGE = {RAS, erreur}
VARIABLES
stock ∈ ARTICLE → 7 N
INITIALISATION
stock := ∅
OPERATIONS
CompleterStock (art ∈ ARTICLE , qt ∈ N ) =
IF art ∈ dom(stock) THEN
stock := stock −
− { art 7→ stock(art) + qt }
C
ELSE
stock := stock ∪ { art 7→ qt }
END;
mess ← Retirer Article Stock (art ∈ ARTICLE) =
IF art ∈ dom(stock) ∧ stock(art) = 0 THEN
stock := stock - { art 7→ stock(art) } ;
mess := RAS
ELSE
mess := erreur
END
END