Model Checking
Model Checking
E’ una tecnica per la verifica automatica di software e
di sistemi reattivi
Consiste nel verificare alcune proprietà, espresse in
logiche temporali, di un modello del sistema.
La base dei modelli operazionali sui quali si applica
questa tecnica sono gli automi
Tino Cortesi
Tecniche di Analisi di Programmi
2
Automi
Un automa è una rappresentazione di un sistema:
l’evoluzione da uno stato all’altro del sistema è legata
all’applicazione di transizioni.
Esempio:
Un orologio digitale può essere rappresentato da un automa
in cui ogni stato rappresenta l’ora e minuto corrente. Ci
possono essere quindi 24x60=1440 possibili stati
. . .
Tino Cortesi
11.12
11.13
Tecniche di Analisi di Programmi
11.14
. . .
3
Rappresentazione di un automa
Un automa viene rappresentato denotando con cerchi
gli stati del sistema e con frecce le transizioni da uno
stato all’altro
Esempio
Un “contatore modulo 3” può essere rappresentato in
forma completa dal seguente automa
inc
dec
0
dec
inc
Tino Cortesi
1
dec
2
Tecniche di Analisi di Programmi
inc
4
Automi finiti ed infiniti
L’orologio digitale può essere visto come un contatore modulo
1440.
Abbiamo visto che il “contatore modulo 3” ha tre stati
Una variabile intera può essere modellata con un automa che ha
un numero infinito di stati (uno per ogni possibile valore) e
avente una transizione per ognuna delle operazioni elementari
(incremento, decremento, cambio di segno, ecc.)
Anche se esistono tecniche di model checking che si applicano a
classi ristrette di automi con numero infinito di stati, il model
checking si applica usualmente a sistemi rappresentabili come
automi a stati finiti.
Tino Cortesi
Tecniche di Analisi di Programmi
5
Digicode
Supponiamo di voler modellare un luchetto a
combinazione, con sole tre chiavi A,B,C. Il luchetto si
apre solo quando la combinazione ABA viene inserita.
Questo sistema può essere rappresentato con un
automa con 4 stati e 9 transizioni.
Tino Cortesi
Tecniche di Analisi di Programmi
6
Digicode
B,C
1
A
B
A
2
A
3
4
C
B,C
Tino Cortesi
Tecniche di Analisi di Programmi
7
Esecuzioni
Una esecuzione è una sequenza di stati che descrive una
possibile evoluzione del sistema
Ad es. 1121, 12234, 112312234 sono esecuzioni del
digicode
Le possibili esecuzioni del digicode sono
1
11,12
111,112,121,122,123
1111,1112,1121,1122,1123,1211,1212,1221,1222,1223,1231,1234
…
Queste possono essere organizzate sotto forma di albero
Tino Cortesi
Tecniche di Analisi di Programmi
8
Albero delle esecuzioni
1
1
1
1
Tino Cortesi
2
2
2
1
2
2
1
3
1
2
Tecniche di Analisi di Programmi
1
2
3
3
1
4
9
Proprietà
Il nostro obiettivo è verificare proprietà del sistema, o meglio
verificare proprietà del modello del sistema
Associamo quindi ad ogni stato dell’automa delle proprietà
elementari che sappiamo essere soddisfatte in quello stato
Ad esempio la proprietà “il luchetto è aperto” vale nello stato 4,
ma non vale negli stati 1,2 e 3.
Ma vorremmo dimostrare di più. Ad esempio:
Se il luchetto si apre, allora le ultime lettere digitate sono
ABA, in questo ordine
Digitando una qualsiasi sequenza che termini con ABA si
apre il luchetto
Tino Cortesi
Tecniche di Analisi di Programmi
10
Proposizione atomiche
Per distinguere proprietà elementari da proprietà più complesse,
parliamo di proposizione atomiche per denotare proprietà che sono
vere o false in un dato stato.
Nell’esempio del digicode, possiamo definire come proprietà
elementari:
PA : è stato appena digitato un A
PB : è stato appena digitato un B
PC : è stato appena digitato un C
pred2 : lo stato precedente è il 2
pred3 : lo stato precedente è il 3
Tino Cortesi
Tecniche di Analisi di Programmi
11
Automa con proposizioni atomiche
B,C
A
1
2
PA
A
B
3
pred2
PB
A
4
pred3
PA
C
B,C
Tino Cortesi
Tecniche di Analisi di Programmi
12
B,C
A
1
2
PA
A
B
3
pred2
PB
A
4
pred3
PA
C
B,C
Dimostriamo che se il luchetto si apre, allora le ultime lettere digitate
sono ABA, in questo ordine
Consideriamo un’esecuzione che apre il luchetto, cioè che finisce sullo
stato 4
Poiché in 4 vale pred3, l’esecuzione deve finire con 34
Ma in 3 vale pred2. quindi l’esecuzione deve finire con 234.
In 2 e 4 vale PA, ed in 3 vale PB . quindi le ultime tre lettere digitate
devono essere ABA.
Tino Cortesi
Tecniche di Analisi di Programmi
13
Automi
Dato un insieme di proposizioni elementari Pi, un automa è una
tupla A =<Q,E,T,q0,l> in cui:
Q è un insieme finito di stati
E è un insieme finito di etichette di transizioni
T  Q x E x Q è un insieme di transizioni
q0 è lo stato iniziale
l è la funzione che associa ad ogni stato di Q l’insieme delle
proprietà elementari che sono vere in quello stato
Tino Cortesi
Tecniche di Analisi di Programmi
14
L’automa digicode
B,C
A
1
2
PA
A
B
3
pred2
PB
A
4
pred3
PA
C
B,C
Q= {1,2,3,4}
E={A,B,C}
q0 = 1
l = { 1a, 2a {PA},3a {PB, pred2}, 4a {PA,pred3} }
T={ (1,A,2),(1,B,1),(1,C,1),(2,A,2),(2,B,3),(2,C,1),
(3,A,4),(3,B,1),(3,C,1) }
Tino Cortesi
Tecniche di Analisi di Programmi
15
Paths, Esecuzioni, Stati raggiungibili
Un path in un automa A è una sequenza s, finita o infinita, di
transizioni (qi, ei, q’i) di A tale che per ogni i q’i= qi+1.
La lunghezza di un path è il numero (potenzialmente infinito) di
transizioni del path
Una esecuzione parziale è un path che parte dallo stato iniziale
Una esecuzione completa è un’esecuzione che non può essere
estesa
Uno stato è raggiungibile se esiste almeno un’esecuzione
parziale (quindi che parte dallo stato iniziale) in cui esso appare.
Tino Cortesi
Tecniche di Analisi di Programmi
16
PRINTER MANAGER
W= wait
P = print
R = rest
0
RA RB
endB
endA
reqA
6
PA RB
begA
reqB
1
2
WA RB
RA WB
reqB
endB
4
WA PB
begB
reqA
3
WA WB
7
RA PB
endA
5
PA WB
reqA
reqB
Tino Cortesi
begA
begB
Tecniche di Analisi di Programmi
17
Proprietà che vorremmo verificare sul Printer Manager
In ogni esecuzione, ogni stato in cui vale PA è preceduto da uno stato
in cui vale WA
Questa si può verificare! (… anche a mano)
In ogni esecuzione ogni stato in cui vale WA è seguito (non
necessariamente subito) da uno stato in cui vale PA.
Questa non vale! E le tecniche di model checking in questo caso
ci forniscono un controesempio…
Tino Cortesi
Tecniche di Analisi di Programmi
18
IL PRINTER MANAGER
NON E’ FAIR
0
RA RB
endB
endA
reqA
6
PA RB
begA
reqB
1
2
WA RB
RA WB
reqB
endB
4
WA PB
begB
reqA
3
WA WB
begA
begB
7
RA PB
endA
5
PA WB
reqA
reqB
Controesempio: 0 1 3 4 1 3 4 1 3 4 1 3 4 1 3 4 1 3 4 …
Tino Cortesi
Tecniche di Analisi di Programmi
19
Automi con variabili
Quando si vuole modellare un sistema, dobbiamo considerare
anche variabili legate agli stati
Se programma = controllo + dati
la coppia <stati, transizioni> rappresenta il controllo
Le variabili rappresentano dati
Esempio: Nel sistema di “apertura luchetto”, se volessimo
contare il numero di errori fatti dall’utente e volessimo tollerare
al massimo 3 errori, dovremo introdurre una variabile intera ctr
con valore iniziale 0, per accumulare il numero degli errori
Tino Cortesi
Tecniche di Analisi di Programmi
20
Interazione variabili-automa
L’automa interagisce con le variabili in due modi:
Assegnamento: una transizione può modificare il valore di
una o più variabili
Guardia: una transizione può essere determinata da una
condizione sulle variabili: una transizione non può avvenire
finché non vale una certa condizione sulle variabili.
Tino Cortesi
Tecniche di Analisi di Programmi
21
int ctr;
if ctr<3
B,C
ctr++
ctr=0
if ctr<3
A
ctr++
A
1
if ctr<3
C
ctr++
if ctr=3
B,C
ctr++
Tino Cortesi
if ctr<3
B,C
ctr++
B
2
if ctr=3
A,C
ctr++
3
A
4
if ctr=3
B,C
ctr++
err
Tecniche di Analisi di Programmi
22
Unfolding
Per applicare le tecniche di model checking è spesso necessario
fare l’unfolding di automi con variabili in uno state graph in cui
appaiono solo le possibili transizioni
In questi casi si parla più propriamente di sistema di transizioni
(transition system)
Gli stati di un unfolded automa sono chiamati stati globali
Tino Cortesi
Tecniche di Analisi di Programmi
23
1
ctr=0
A
2
ctr=0
A
B
3
ctr=0
A
4
ctr=0
3
ctr=1
A
4
ctr=1
3
ctr=2
A
4
ctr=2
3
ctr=3
A
4
ctr=3
B,C
B,C
1
ctr=1
A
A
B,C
1
ctr=2
A
2
ctr=2
A
B,C
1
ctr=3
2
ctr=1
A
2
ctr=3
B
B,C
B
B,C
B
err
ctr=4
Tino Cortesi
Tecniche di Analisi di Programmi
24
Sincronizzazione
Quando si ha a che fare con sistemi reali, questi sono composti
da sottosistemi o moduli.
Un automa globale si ottiene dalla cooperazione e
sincronizzazione degli automi che corrispondono alle
sottocomponenti del sistema
La situazione più semplice è quando le sottocomponenti non
interagiscono tra di loro. In questo caso l’automa globale è
ottenuto facendo il prodotto cartesiano degli automi che
rappresentano le componenti. Ad esempio, per modellare un
sistema costituito da un contatore modulo 2, un contatore
modulo 3 ed un contatore modulo 4, costruiremo un automa
con 2x3x4 stati.
Tino Cortesi
Tecniche di Analisi di Programmi
25
1,0,3
0,0,3
1,1,3
0,1,3
1,0,2
0,0,2
1,1,2
1,0,1
Tino Cortesi
1,2,2
0,2,2
1,1,1
0,1,1
1,0,0
0,0,0
0,2,3
0,1,2
0,0,1
1,2,3
1,2,1
0,2,1
1,1,0
0,1,0
Tecniche di Analisi di Programmi
1,2,0
0,2,0
26
Sincronizzazione mediante
scambio di messaggi
Distinguiamo tra le etichette delle transizioni quelle associate
all’emissione di un messaggio !m e quelle associate alla
ricezione di un messaggio ?m
Nel prodotto sincronizzato saranno permesse solo le transizioni
in cui una data emissione è eseguita contemporaneamente alla
corrispondente ricezione
Tino Cortesi
Tecniche di Analisi di Programmi
27
Ascensore: la cabina
?down
?up
?up
?down
Tino Cortesi
2
1
0
?up
?down
Tecniche di Analisi di Programmi
28
Ascensore: la i-esima porta
?open_i
?close
?open_i
Open
Closed
?close_i
Tino Cortesi
Tecniche di Analisi di Programmi
29
Ascensore: il controller
!close_2
free2
on2
2->0
!close_1
free1
!up
!down
!open_2
!down
on1
free0
!up
!close_0
!down
!open_1
0->2
on0
!open_0
Tino Cortesi
Tecniche di Analisi di Programmi
30
Ascensore: l’automa prodotto
L’automa che modella l’ascensore si può quindi ottener come
prodotto sincronizzato di questi 5 automi (3 porte, cabina,
controller)
Uno stato dell’automa risultante avrà quindi 5 componenti,
corrispondenti allo stato della porta 0, porta 1, porta 2, cabina e
controller
I vincoli di sincronizzazione riducono le possibili transizioni alle
emissioni sincronizzate con ricezioni si messaggi espresse da:
Sync={ (?open0,-,-,-,!open0),
(-,?open1,-,-,!open1),
(-,-,?open2,-,!open2),
(-,-,-,?down,!down),
Tino Cortesi
Tecniche di Analisi di Programmi
(?close0,-,-,-,!close0),
(-,?close1,-,-,!close1),
(-,-,?close2,-,!close2),
(-,-,-,?up,!up) }
31
Proprietà verificabili (1)
La porta di un certo piano non si apre se la cabina è ad un
piano diverso
Per la porta 0 questa si traduce nel fatto che ogni stato che ha
Open come prima componente ha 0 come quarta componente
Questa proprietà si può esprimere usando proposizioni atomiche
Idem per le altre porte
Tino Cortesi
Tecniche di Analisi di Programmi
32
Proprietà verificabili (2)
La cabina non si muove se una delle porte è aperte
Provare questa proprietà è più delicato: dobbiamo provare che
in ogni esecuzione, uno stato in cui una delle prime 3
componenti è Open non può essere seguito immediatamente da
uno stato in cui la quarta componente è diversa
Una proprietà di questo tipo può essere verificata
automaticamente da un model checker
Tino Cortesi
Tecniche di Analisi di Programmi
33
Sincronizzazione
con variabili condivise
Un altro modo per permettere la comunicazione tra sottosistemi
è quello di lasciarli condividere alcune variabili
Ad esempio, se vogliamo migliorare l’automa della stampante
unfair descritta precedentemente, possiamo introdurre una
variabile turn che indichi quale dei due utenti ha diritto di
stampare
Tino Cortesi
Tecniche di Analisi di Programmi
34
Utente A ed utente B
If turn=A printA
x
y
turn=B
If turn=B printB
z
t
turn=A
Tino Cortesi
Tecniche di Analisi di Programmi
35
Stampante: automa globale
L’automa globale che descrive il sistema includendo sia l’utente
A che l’utente B può essere costruito da questi due automi e dal
valore della variabile condivisa turn
x,z,A
printA
turn=A
x,t,B
Tino Cortesi
y,z,A
turn=B
printB
Tecniche di Analisi di Programmi
x,z,B
36
Osservate che…
Questo protocollo garantisce che non si raggiunga mai lo stato
(y,t,-)
Garantisce che non possa mai essere usata la stampante
contemporaneamente
Ma impedisce anche che ci possano essere due stampe
consecutive da parte dello stesso utente!!!
Tino Cortesi
Tecniche di Analisi di Programmi
37
Scarica

1 2 A 3 4