O metodach weryfikacji formalnej

Transkrypt

O metodach weryfikacji formalnej
O metodach weryfikacji formalnej
Poprawność składniowa Czy specyfikacja jest zgodna z regułami
składniowymi danego języka?
Poprawność semantyczna Czy specyfikacja opisuje właściwie
dziedzinę/system?
Metody weryfikacji
Dowodzenie twierdzeń
Weryfikacja modelowa
Przykład – Dowodzenie twierdzeń
Wydziały mogą grupować w sobie mniejsze wydziały
(podwydziały), tworząc strukturę hierarchiczną. Każdy
podwydział ma tylko jeden swój wydział nadrzędny [...]
0..*
Wydział
jest podwydziałemI
1
Pytanie Czy ta specyfikacja jest poprawna?
W – skończony zbiór wydziałów
R – relacja „ jest podwydziałem”
R ⊆W ×W
∀w ∈ W · |{ y : wRy }| = 1
∀x ∈ W · ¬xRx
(przeciwzwrotność)
∀x, y , z ∈ W · xRy ∧ yRz ⇒ xRz
(przechodniość)
Pytanie Czy W 6= ∅ ? (może istnieć jakiś wydział)
1
Każdy ciąg w1 , w2 , .. taki że wi Rwi+1 jest różnoelementowy
2
Niech w1 , ..., wn będzie najdłuższy
3
|{ y : wn Ry }| = 1 czyli istnieje wn+1 takie że wn Rwn+1
Sprzeczność
Przykład – Weryfikacja modelowa
void AC controller() {
string msg;
int is_room_hot=0;
/* w pokoju nie jest gorąco */
int is_door_closed=1; /* drzwi zamknięte */
int ac=0;
/* klimatyzacja wyłączona */
while (1) {
msg=get_message_from_queue();
if (msg=="room_is_hot") is_room_hot = 1;
if (msg=="room_is_cool") is_room_hot = 0;
if (msg=="open_door") { is_door_closed = 0;
ac=0; };
if (msg=="close_door") { is_door_closed = 1;
if (is_room_hot) ac = 1; };
};
}
h – gorąco, c – drzwi zamknięte, a – włączona klimatyzacja
stan początkowy: h = 0, c = 1, a = 0
room is hot → h = 1
open door → c = 0, a = 0
room is cool → h = 0
close door → c = 1, if (h) a = 1
Pytania Czy zawsze (h = 1 ∧ c = 1 ⇒ a = 1) ?
Czy zawsze (a = 1 ⇒ c = 1) ?
open door
start
h=0
c=1
a=0
h=0
c=0
a=0
room is hot
room is hot
h=1
c=1
a=0
h=1
c=0
a=0
close door
h=1
c=1
a=1

Podobne dokumenty