29
1 Test and Verification Lecture 14 SPIN and promela Ulrik Nyman [email protected]

SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman [email protected]. 2 Plan for today ... chan qname

Embed Size (px)

Citation preview

Page 1: SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman ulrik@cs.aau.dk. 2 Plan for today ... chan qname

1

Test and Verification Lecture 14

SPIN and promela

Ulrik Nyman

[email protected]

Page 2: SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman ulrik@cs.aau.dk. 2 Plan for today ... chan qname

2

Plan for today

Promela Constructs Examples

LTL properties Installation SPIN demo

Page 3: SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman ulrik@cs.aau.dk. 2 Plan for today ... chan qname

3

Promela

Programming Meta Language A modeling language for verification and

simulation Restricted set of constructs and datatypes

Page 4: SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman ulrik@cs.aau.dk. 2 Plan for today ... chan qname

4

Model parts

Processes Message Channels Variables

Page 5: SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman ulrik@cs.aau.dk. 2 Plan for today ... chan qname

5

Executability

No difference between conditions and statements This might seem strange at first

Boolean conditions can be executed when they are true

Else they block until they become true Statement are always executable

Page 6: SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman ulrik@cs.aau.dk. 2 Plan for today ... chan qname

6

Executability

No need for busy loops

Can be replaced with

while (a != b) skip /* wait for a==b */

(a == b)

Page 7: SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman ulrik@cs.aau.dk. 2 Plan for today ... chan qname

7

Variables

Global and local variables

Array variables Message types

bool flag;int state;byte msg;

mtype = {ack, nack, err}

Page 8: SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman ulrik@cs.aau.dk. 2 Plan for today ... chan qname

8

Datatypes

Typename C-equivalent Macro in limits.h Typical Range

bit or bool bit-field - 0..1

byte uchar CHAR_BIT (width in 0..255bits)

short short SHRT_MIN..SHRT_MAX -2^15 - 1 .. 2^15 - 1

int int INT_MIN..INT_MAX -2^31 - 1 .. 2^31 - 1

Page 9: SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman ulrik@cs.aau.dk. 2 Plan for today ... chan qname

9

Proctype

proctype A(){ byte state; state = 3}

One local variable

Page 10: SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman ulrik@cs.aau.dk. 2 Plan for today ... chan qname

10

Proctype

byte state = 2;proctype A(){

(state == 1) -> state = 3}proctype B(){

state = state - 1}

; is only a separator -> is equivalent

Page 11: SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman ulrik@cs.aau.dk. 2 Plan for today ... chan qname

11

Process Instantiation

Special init process

Processes can be started from anywhere

init{

run A(); run B()

}

Page 12: SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman ulrik@cs.aau.dk. 2 Plan for today ... chan qname

12

Passing variables

proctype A(byte state; short foo){ (state == 1) -> state = foo}init{ run A(1, 3)}

Page 13: SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman ulrik@cs.aau.dk. 2 Plan for today ... chan qname

13

Mutual exclusion example#define true 1#define false 0#define Aturn false#define Bturn truebool x, y, t;proctype A(){ x = true; t = Bturn; (y == false || t == Aturn); /* critical section */ x = false}proctype B(){ y = true; t = Aturn; (x == false || t == Bturn); /* critical section */ y = false}init{ run A(); run B()}

Page 14: SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman ulrik@cs.aau.dk. 2 Plan for today ... chan qname

14

Atomic sequences

byte state = 1;proctype A(){ atomic { (state==1) -> state = state+1 }}proctype B(){ atomic { (state==1) -> state = state-1 }}init{ run A(); run B()}

Runtime error if anything but the first statement blocks

Page 15: SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman ulrik@cs.aau.dk. 2 Plan for today ... chan qname

15

Message passing

chan qname = [16] of { short }chan qname = [16] of { byte, int, chan, byte }

Used to model transfer of data Global or local Channels can send channel names

Synchronous communicationchan qname = [0] of { short }

Page 16: SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman ulrik@cs.aau.dk. 2 Plan for today ... chan qname

16

Message passing

chan qname = [16] of { byte, int, chan, byte }

qname!v,y,myChan,a

Sending

Receiving

Receiving with constantsqname?var,cons1,ch,cons2

qname?var,x,ch,b

Page 17: SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman ulrik@cs.aau.dk. 2 Plan for today ... chan qname

17

Example

proctype A(chan q1){ chan q2; q1?q2; q2!123}proctype B(chan qforb){ int x; qforb?x; printf("x = %d\n", x)}init { chan qname = [1] of { chan }; chan qforb = [1] of { int }; run A(qname); run B(qforb); qname!qforb}

Page 18: SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman ulrik@cs.aau.dk. 2 Plan for today ... chan qname

18

Testing for messages

len(qname)

Length – built in function

Testing for reception

True if the message can be received Remember to use atomic(len(qname) < MAX) -> qname!msgtypeqname?[msgtype] -> qname?msgtype

qname?[var,cons1,ch,cons2]

Page 19: SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman ulrik@cs.aau.dk. 2 Plan for today ... chan qname

19

Control Flow

Case selection

Guards Does not need to be mutually exclusive Keyword else

if:: (a != b) -> option1:: (a == b) -> option2fi

Page 20: SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman ulrik@cs.aau.dk. 2 Plan for today ... chan qname

20

Repetition

proctype counter(){ do :: (count != 0) -> if :: count = count + 1 :: count = count - 1 fi :: (count == 0) -> break od}

Page 21: SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman ulrik@cs.aau.dk. 2 Plan for today ... chan qname

21

Unconditional Jumps

proctype Euclid(int x, y){ do :: (x > y) -> x = x - y :: (x < y) -> y = y - x :: (x == y) -> goto done od;done: skip}

Extra skip at the end

Page 22: SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman ulrik@cs.aau.dk. 2 Plan for today ... chan qname

22

Return valuesproctype fact(int n; chan p){ chan child = [1] of { int }; int result; if :: (n <= 1) -> p!1 :: (n >= 2) -> run fact(n-1, child); child?result; p!n*result fi}init{ chan child = [1] of { int }; int result; run fact(7, child); child?result; printf("result: %d\n", result)}

Page 23: SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman ulrik@cs.aau.dk. 2 Plan for today ... chan qname

23

Timeout

Modeling trick

Cannot be implemented

proctype watchdog(){ do :: timeout -> guard!reset od}

Page 24: SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman ulrik@cs.aau.dk. 2 Plan for today ... chan qname

24

Assertions

Produces errors during simulation or verification

assert(any_boolean_condition)

Page 25: SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman ulrik@cs.aau.dk. 2 Plan for today ... chan qname

25

Labels

End state labels end, end1, end_here, ...

Progress progress, progress2, ...

After having compiled ./pan -l Search for non progress loops

Page 26: SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman ulrik@cs.aau.dk. 2 Plan for today ... chan qname

26

SPIN

spin -m -a ex.1a gcc -o pan pan.c ./pan

Page 27: SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman ulrik@cs.aau.dk. 2 Plan for today ... chan qname

27

Bitstate hashing

Coverage Not precise analysis -DBITSTATE

Page 28: SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman ulrik@cs.aau.dk. 2 Plan for today ... chan qname

28

LTL

Propositional formulas defined separately Evaluated over computations

[] Always <> Eventually U (strong) until (p U q) V !(!p U !q) (Also known as release)

Page 29: SPIN and promela - Aalborg Universitetpeople.cs.aau.dk/~ulrik/teaching/E10/ModelChecking/spin.pdf · SPIN and promela Ulrik Nyman ulrik@cs.aau.dk. 2 Plan for today ... chan qname

29

Examples

Nested properties [] p !( <> !q ) p U q p U ([] (q U r))