Méthode de Model-Checking des Modèles UML en utilisant Maude
3. Exemple II : ATM-BANK
3.1 Modèle UML ATM-BANK
Le modèle UML qui représente le système est modélisé comme suit:
•
Diagramme de classe : la structure statique du modèle est représentée par le diagramme declasses représenté dans la figure (Fig.64). ce diagramme est composé de deux classes ; la classe ATM et la classe Bank. Les deux classes sont reliées par l’association Link.
Trois signaux sont déclarés dans la classe ATM, PINVerified, reenterPIN et abort. La
classe Bank contient trois attributs ; le booléen cardValid, les deux entiers
MaxNumIncorrect et numIncorrect. La classe Bank est composée aussi de la méthode verifyPIN et le signal done.
• Diagramme d'états-transition : Le comportement de l’objet ATM est spécifié par la machine d'états-transitions présenté dans la figure (Fig.65). ce diagramme est composé des états simple CardEntry, PINEntry, Verification, AmountEntry, returningCard et l’état composite GivingMoney.
Le comportement de l’objet Bank est présenté dans le diagramme d’états-transitions figuré dans (Fig.66). Ce diagramme est composé de l’état idle et l’état composite Verifying. Ce dernier est composé de deux régions concurrentes qui spécifient respectivement la vérification de la carte et le code PIN.
ATM <<signal>> PINVerified <<signal>> reenterPIN <<signal>> abort Bank
boolean cardValid = true int numIncorrect = 0 int maxNumincorrect = 2 VerifyPIN() <<signal>> done Link 1 1
•
Diagrammes de collaborations : Les concepteurs du modèle proposent deux diagrammes decollaboration qui représentent des scénarios différents d’interactions entre l’ATM et la Bank. Le diagramme représenté dans la figure (Fig.67) spécifie une collaboration juste c.-à-d. une collaboration dont l’ordre d’interactions peut se produire dans une exécution tel qu’il est prévu dans le diagramme de collaboration.
Par contre, le diagramme de collaboration figuré dans (Fig.68) présente une collaboration erronée dont l’ordre d’interactions entres les objets ne peut jamais se produire dans le
Fig.65 : Diagramme d'état-transition de la classe ATM [62]
Fig.66 : Diagramme d'état-transition de la classe BANK [62] T6
système réel à cause du comportement des objets (les spécifications des diagrammes d’états-transitions).
Nous allons montrer à travers cet exemple une technique de vérification des collaborations vis-à-vis le comportement des objets spécifie par des diagrammes d’états-transitions. Cette technique est basée sur notre méthode de translation et de vérification.
3.2 Translation du Modèle UML
La translation du modèle UML s'effectué de la même manière que l'exemple précédent. La figure (Fig.69) représente le module Maude qui spécifie la classe ATM et son diagramme d'états-transition. Et la figure (Fig.70) représente le module Maude qui spécifie la classe Bank et son diagramme d'états.
La translation montre que notre méthode tient compte aux concepts avancés du diagramme d’états-transitions tels que les états concurrents, les états séquentiels, les transitions complexes qui utilisent le join et le fork et les choix …etc. et les règles de réécritures suivantes représente la transition complexe (T6) dans le diagramme d’états-transitions de la Bank (Fig.66);
crl [T6A] : < BQ : BANK | STATUS : Verifying( CardValid || PINIncorrect ) , cardValid : true , numIncorrect : N , MaxNumIncorrect : N' , Link : L > collaboration(abort(BQ , L ) - s) => < BQ : BANK | STATUS : Idle , cardValid : false , numIncorrect : N , MaxNumIncorrect : N' , Link : L > abort(BQ , L ) collaboration(s) if N >= N' .
crl [T6B] : < BQ : BANK | STATUS : Verifying( CardValid || PINIncorrect ) , cardValid : b , numIncorrect : N , MaxNumIncorrect : N' , Link : L > collaboration(reenterPIN(BQ , L ) - s) => < BQ : BANK | STATUS : Idle , cardValid : b , numIncorrect : N + 1 , MaxNumIncorrect : N' , Link : L > reenterPIN(BQ , L ) collaboration(s) if N < N' .
Tant qu’il s’agit de vérifier des collaborations de cette exemple, nous ne somme pas besoin de définir des propriétés temporelles. Nous allons juste appliquer ce que nous avons expliqué précédemment sur la vérification de collaboration. Ainsi, nous passons directement à la quatrième étape.
a : ATM AT Ban b : BANK
1: VerifyPIN () 3: VerifyPIN()
2: reenterPIN 4: PINVerified
a : ATM AT Ban b : BANK
1: VerifyPIN() 3: VerifyPIN()
2: abort 4: PINVerified
load full-maude ( omod SMATM is
protecting INT . protecting NAT . protecting STRING . protecting BOOL .
*** Objects names are Strings.
subsort String < Oid .
*** definition of the sort state simple state and composed state
sorts SIMSTATE COMSTATE STATE . *** [1]
subsort SIMSTATE < COMSTATE . *** [2]
subsort COMSTATE < STATE . *** [3]
op none : -> COMSTATE [ctor] . *** [4]
op _||_ : COMSTATE COMSTATE -> COMSTATE [ctor assoc comm id: none] . *** [5]
*** Specification of collaboration structure
sort seq col . *** [6]
subsort Msg < seq . *** [7]
op null : -> seq [ctor] . *** [8]
op _-_ : seq seq -> seq [ctor assoc id: null ] . *** [9]
op collaboration : seq -> col .
subsort col < Configuration . *** [10]
ops CardEntry PINEntry Verification AmountEntry ReturningCard Counting Dispensing InitialState FinalState : ->
SIMSTATE *** [11]
op GivingMoney : COMSTATE -> STATE . *** [12]
*** definition of the ATM class
class ATM | STATUS : STATE , BLOCKED : Bool , Link : Oid . *** [13]
*** definition of events
msgs verifyPIN reenterPIN PINverified abort done
ACKverifyPIN : Oid Oid -> Msg . *** [14]
*** Some variables declaration
vars AT L : String . var X : STATE . vars N N' : Nat . var b : Bool . var s : seq . var CF : Configuration .
*** transitions of the State machine are represented by Rewriting Logic rules
*** in order to draw a way to execute the system in respect to the given collaboration. the op Collaboration is added to the rules
*** to get rules that represent only the transition remove collaboration. *** [15]
rl [t1] : < AT : ATM | STATUS : InitialState > => < AT : ATM | STATUS : CardEntry > . rl [t2] : < AT : ATM | STATUS : CardEntry > => < AT : ATM | STATUS : PINEntry > .
rl [t3] : < AT : ATM | STATUS : PINEntry , BLOCKED : false , Link : L > collaboration(verifyPIN(AT , L) - s) => < AT : ATM | STATUS : Verification , BLOCKED : true , Link : L > verifyPIN(AT , L) collaboration(s) .
rl [t3ack] : ACKverifyPIN(L , AT) < AT : ATM | STATUS : Verification , BLOCKED : true , Link : L > => < AT : ATM | STATUS : Verification , BLOCKED : false , Link : L > .
rl [t4] : reenterPIN(L , AT) < AT : ATM | STATUS : Verification , BLOCKED : false , Link : L > => < AT : ATM | STATUS : PINEntry , BLOCKED : false , Link : L > .
rl [t5] : PINverified(L , AT) < AT : ATM | STATUS : Verification , BLOCKED : false , Link : L > => < AT : ATM | STATUS : AmountEntry , BLOCKED : false , Link : L > .
rl [t6] : abort(L , AT) < AT : ATM | STATUS : Verification , BLOCKED : false , Link : L > => < AT : ATM | STATUS : ReturningCard , BLOCKED : false , Link : L > .
rl [t7] : < AT : ATM | STATUS : AmountEntry , BLOCKED : false , Link : L > => < AT : ATM | STATUS : GivingMoney(InitialState) , BLOCKED : false , Link : L > .
rl [t8] : < AT : ATM | STATUS : GivingMoney(InitialState) , BLOCKED : false , Link : L > => < AT : ATM | STATUS : GivingMoney(Counting) , BLOCKED : false , Link : L > .
rl [t9] : < AT : ATM | STATUS : GivingMoney(Counting) , BLOCKED : false , Link : L > => < AT : ATM | STATUS : GivingMoney(Dispensing) , BLOCKED : false , Link : L > .
rl [t10] : < AT : ATM | STATUS : GivingMoney(Dispensing) , BLOCKED : false , Link : L > => < AT : ATM | STATUS : GivingMoney(FinalState) , BLOCKED : false , Link : L > .
rl [t11] : < AT : ATM | STATUS : GivingMoney(FinalState) , BLOCKED : false , Link : L > => < AT : ATM | STATUS : ReturningCard , BLOCKED : false , Link : L > .
rl [t12] : < AT : ATM | STATUS : ReturningCard , BLOCKED : false , Link : L > collaboration( done(AT , L ) - s) => < AT : ATM | STATUS : FinalState , BLOCKED : false , Link : L > done(AT , L ) collaboration(s) .
rl [t13] : < AT : ATM | STATUS : FinalState , BLOCKED : false , Link : L > CF => < AT : ATM | STATUS : FinalState , BLOCKED : false , Link : L > CF .
endom )