Top Banner
Technologies for finding Technologies for finding errors errors in object-oriented software in object-oriented software K. Rustan M. Leino Microsoft Research, Redmond, WA Lecture 1 Summer school on Formal Models of Software 2 Sep 2003, Tunis, Tunisia
27

Technologies for finding errors in object-oriented software K. Rustan M. Leino Microsoft Research, Redmond, WA Lecture 1 Summer school on Formal Models.

Mar 26, 2015

Download

Documents

Colin Daley
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Technologies for finding errors in object-oriented software K. Rustan M. Leino Microsoft Research, Redmond, WA Lecture 1 Summer school on Formal Models.

Technologies for finding errorsTechnologies for finding errorsin object-oriented softwarein object-oriented software

Technologies for finding errorsTechnologies for finding errorsin object-oriented softwarein object-oriented software

K. Rustan M. LeinoMicrosoft Research, Redmond, WA

Lecture 1Summer school on Formal Models of Software2 Sep 2003, Tunis, Tunisia

Page 2: Technologies for finding errors in object-oriented software K. Rustan M. Leino Microsoft Research, Redmond, WA Lecture 1 Summer school on Formal Models.

Review: Tool architectureSource programSource program

Verification conditionVerification condition

Counterexample contextCounterexample context

Warning messagesWarning messages

Automatic theorem proverAutomatic theorem prover

Post processorPost processor

Sugared commandSugared command

Primitive commandPrimitive command

Passive commandPassive commandTra

nsl

ato

rTra

nsl

ato

rFocus today

Page 3: Technologies for finding errors in object-oriented software K. Rustan M. Leino Microsoft Research, Redmond, WA Lecture 1 Summer school on Formal Models.

Commands and their possible outcomes• Normal termination

– terminates normally in some state

• Erroneous termination– goes wrong, crashes the computer

• Non-termination– diverges, fails to terminates, results in infinite

recursion

• Miraculous termination– fails to start, blocks

(partial/miraculous commands)

you breach

contract,demon wins

demon breaches contract,you win!

Page 4: Technologies for finding errors in object-oriented software K. Rustan M. Leino Microsoft Research, Redmond, WA Lecture 1 Summer school on Formal Models.

Commands

C ::= w := E| assert P| assume P| var w in C end| C0 ; C1

| C0 [] C1

Page 5: Technologies for finding errors in object-oriented software K. Rustan M. Leino Microsoft Research, Redmond, WA Lecture 1 Summer school on Formal Models.

Semantics• Hoare logic

– {P} C {R} says that if command C is started in (a state satisfying) P, then:• C does not go wrong, and• if C terminates normally, then it

terminates in (a state satisfying) R

• Weakest preconditions– for a given C and R, the weakest P

satisfying {P} C {R}– written wp(C, R) or simply C.R

Page 6: Technologies for finding errors in object-oriented software K. Rustan M. Leino Microsoft Research, Redmond, WA Lecture 1 Summer school on Formal Models.

Command semantics—assignment

• evaluate E and change value of w to E• (w := E).R ≡ R[w := E]

• (x := x + 1).(x ≦ 10)≡ x+1 ≦ 10≡ x < 10

• (x := 15).(x ≦ 10)≡ 15 ≦ 10≡ false

• (y := x + 3*y).(x ≦ 10)≡ x ≦ 10

• (x,y := y,x).(x < y)≡ y < x

replace w by Ein R

Page 7: Technologies for finding errors in object-oriented software K. Rustan M. Leino Microsoft Research, Redmond, WA Lecture 1 Summer school on Formal Models.

Command semantics—assert

• if P holds, do nothing, else go wrong• (assert P).R ≡ P ∧ R

• (assert x < 10).(0 ≦ x)≡ 0 ≦ x < 10

• (assert x = y*y).(0 ≦ x)≡ x = y*y ∧ 0 ≦ x≡ x = y*y

• (assert false).(x ≦ 10)≡ false

logical AND,conjunction

Page 8: Technologies for finding errors in object-oriented software K. Rustan M. Leino Microsoft Research, Redmond, WA Lecture 1 Summer school on Formal Models.

Command semantics—assume

logicalimplication

logical NOT,negation

logical OR,disjunction

• if P holds, do nothing, else block

• (assume P).R ≡ ¬ P ∨ R≡ P ⇒ R

• (assume x < 10).(0 ≦ x)≡ 10 ≦ x ∨ 0 ≦ x≡ 0 ≦ x

• (assume x = y*y).(0 ≦ x)≡ x = y*y ⇒ 0 ≦ x≡ true

• (assume false).(x ≦ 10)≡ true

Page 9: Technologies for finding errors in object-oriented software K. Rustan M. Leino Microsoft Research, Redmond, WA Lecture 1 Summer school on Formal Models.

• introduce w with an arbitrary initial value,then do C

• (var w in C end).R ≡ (∀w ・ C.R)

• (var y in y := x end).(0 ≦ x)≡ (∀y ・ (y := x).(0 ≦ x))≡ (∀y ・ 0 ≦ x)≡ 0 ≦ x

• (var y in x := y end).(0 ≦ x)≡ (∀y ・ (x := y).(0 ≦ x))≡ (∀y ・ 0 ≦ y)≡ false

Command semantics—local variable

provided w does not occur free in R

Page 10: Technologies for finding errors in object-oriented software K. Rustan M. Leino Microsoft Research, Redmond, WA Lecture 1 Summer school on Formal Models.

• do C0, then C1

• (C0 ; C1).R ≡ C0.(C1.R)

• (x := x+1 ; assert x ≦ y).(0 < x)≡ (x := x+1).( (assert x ≦ y).(0 < x) )≡ (x := x+1).(0 < x ≦ y)

≡ 0 < x+1 ≦ y≡ 0 ≦ x < y

• (assume 0 ≦ y+z ; x := y).(0 ≦ x)≡ (assume 0 ≦ y+z).( (x:=y).(0 ≦

x) )≡ (assume 0 ≦ y+z).(0 ≦ y)≡ 0 ≦ y+z ⇒ 0 ≦ y≡ -y ≦ z ⇒ -y ≦ 0≡ 0 ≦ z

Command semantics—sequential composition

Page 11: Technologies for finding errors in object-oriented software K. Rustan M. Leino Microsoft Research, Redmond, WA Lecture 1 Summer school on Formal Models.

• do either C0 or C1 (the demon chooses which)

• (C0 [] C1).R ≡ C0.R ∧ C1.R

• (x := x+1 [] x := x + 2).(x ≦ 10)≡ (x := x+1). (x ≦ 10) ∧ (x := x+2).(x ≦ 10)≡ x ≦ 9 ∧ x ≦ 8

≡ x ≦ 8• (assume false [] x := y).(0 ≦ x)

≡ (assume false).(0 ≦ x) ∧ (x:=y).(0 ≦ x) ≡ true ∧ 0 ≦ y≡ 0 ≦ y

Command semantics—choice composition

Page 12: Technologies for finding errors in object-oriented software K. Rustan M. Leino Microsoft Research, Redmond, WA Lecture 1 Summer school on Formal Models.

Convenient shorthands• skip = assert true = assume true• wrong = assert false• magic = assume false• P C = assume P; C• if P then C0 else C1 end

= P C0 [] ¬ P C1

• havoc w = var w’in w := w’end

Page 13: Technologies for finding errors in object-oriented software K. Rustan M. Leino Microsoft Research, Redmond, WA Lecture 1 Summer school on Formal Models.

Change such that• change w such that P

= havoc w ; assume P

• change x such that y = x+1≡ havoc x ; assume y = x+1≡ x := y-1

• change x such that y < x≡ x := y+1 [] x := y+2 [] …

• change x such that x = x+1≡ havoc x ; assume false≡ magic

• change r such that r*r = y≡ y < 0 magic [] 0 ≦ y r := √y [] 0 ≦ y r := -√y

Page 14: Technologies for finding errors in object-oriented software K. Rustan M. Leino Microsoft Research, Redmond, WA Lecture 1 Summer school on Formal Models.

Specification statementw:[P, Q]

= requires P modifies w ensures Q= assert P ;

var w0 inw0 := w ;change w such that Q

end• x:[true, x0=x+1]

≡ x := x-1• r:[0 ≦ y, r*r = y]

≡ assert 0 ≦ y ; (r := √y [] r := -√y)• x:[0 ≦ x, x2 ≦ x0 < (x+1)2] ≡ ?• x,y,z,n:[1≦x≦y∧1≦z∧2≦n, xn+yn=zn] ≡ ?

Page 15: Technologies for finding errors in object-oriented software K. Rustan M. Leino Microsoft Research, Redmond, WA Lecture 1 Summer school on Formal Models.

Variables with internal structure: maps

• x := a[i] = x := select(a, i)• a[i] := E = a := store(a, i, E)

where

(∀m,i,j,v ・ i ≠j ⇒

select(store(m, i, v), i) = v ∧ select(store(m, i, v), j) = select(m, j))

Page 16: Technologies for finding errors in object-oriented software K. Rustan M. Leino Microsoft Research, Redmond, WA Lecture 1 Summer school on Formal Models.

Example: maps(a[5] := 12 ; a[7] := 14 ; x := a[5]).(x=12)

=(a[5] := 12 ; a[7] := 14).(select(a, 5) = 12)=(a[5] := 12).(select(store(a, 7, 14), 5) = 12)=select(store(store(a, 5, 12), 7, 14), 5) = 12= { select/store axiom, since 7 ≠ 5 }

select(store(a, 5, 12), 5) = 12= { select/store axiom, since 5 = 5 }

12 = 12=true

Page 17: Technologies for finding errors in object-oriented software K. Rustan M. Leino Microsoft Research, Redmond, WA Lecture 1 Summer school on Formal Models.

RefinementB ⊆ C

=(∀R ・ B.R ⇒ C.R )

• change x such that y < x ⊆ x := y+4• assert x < 10 ⊆ skip• skip ⊆ assume x < 10• wrong ⊆ C• C ⊆ magic

command Bis refined bycommand C

• C is “better” than B

• “anyone who requests B would be happy with C”

Page 18: Technologies for finding errors in object-oriented software K. Rustan M. Leino Microsoft Research, Redmond, WA Lecture 1 Summer school on Formal Models.

Compositions are monotonic with respect to refinement• if B ⊆ C then:

– var w in B end ⊆ var w in C end– A;B ⊆ A;C– B;D ⊆ C;D– A [] B ⊆ A [] C

• var x in ... change x such that y < x ... end⊆ var x in ... x := y+4 ... end

Page 19: Technologies for finding errors in object-oriented software K. Rustan M. Leino Microsoft Research, Redmond, WA Lecture 1 Summer school on Formal Models.

Commands form a lattice• Commands form a semi-lattice under

ordering ⊆, with meet operation [], top element magic, and bottom element wrong

• A lattice theorem: B ⊆ C0 ∧ B ⊆ C1 ≡ B ⊆ C0 [] C1

• Corollary: C0 [] C1 ⊆ C0

Page 20: Technologies for finding errors in object-oriented software K. Rustan M. Leino Microsoft Research, Redmond, WA Lecture 1 Summer school on Formal Models.

Example application of lattice theoremLet B = x:[true, x = |x0| ]. Then:• B ⊆ assume 0 ≦ x = C0

• B ⊆ assume x ≦ 0 ; x := -x = C1

• B ⊆ assume x = -3 ; x := 3 = C2

• B ⊆ magic = C3

Therefore:B ⊆ C0 [] C1 [] C2 [] C3

Page 21: Technologies for finding errors in object-oriented software K. Rustan M. Leino Microsoft Research, Redmond, WA Lecture 1 Summer school on Formal Models.

Procedures• proc P(x,y,z) returns (r,s,t) spec S• call to P:

a,b,c := P(E0, E1, E2) =

var x,y,z,r,s,t inx := E0 ; y := E1 ; z := E2 ;S ;a,b,c := r,s,t

end

Page 22: Technologies for finding errors in object-oriented software K. Rustan M. Leino Microsoft Research, Redmond, WA Lecture 1 Summer school on Formal Models.

Example: procedure• proc Add(x) returns (r)

spec requires 0 ≦ xmodifies kensures k = k0+x ∧ r = k0

• a := Add(k+25)= var x,r in

x := k+25 ;k:[0 ≦ x, k = k0+x ∧ r = k0] ;a := r

end

Page 23: Technologies for finding errors in object-oriented software K. Rustan M. Leino Microsoft Research, Redmond, WA Lecture 1 Summer school on Formal Models.

Procedure implementations• proc P(x,y,z) returns (r,s,t) spec S

• impl P(x,y,z) returns (r,s,t) is CProof obligation: S ⊆ C

• Let C0, ..., Cm-1 be the declared implementations of P. Then, the language implementation of a call to P can replace S by:

C0 [] ... [] Cm-1

Page 24: Technologies for finding errors in object-oriented software K. Rustan M. Leino Microsoft Research, Redmond, WA Lecture 1 Summer school on Formal Models.

Exercise• Redefine (in terms of the commands we've

seen) the specification statement so that the postcondition mentions x,x’ instead of x0,x

• Example:– old form:

x:[0 ≦ x, x*x ≦ x0 < (x+1)*(x+1)]– new form:

x:[0 ≦ x, x’*x’≦ x < (x’+1)*(x’+1)]

Page 25: Technologies for finding errors in object-oriented software K. Rustan M. Leino Microsoft Research, Redmond, WA Lecture 1 Summer school on Formal Models.

ExerciseDefine

while {inv J} B do w: S end where:– B is the loop guard– S is the loop body– J is the loop invariant– w is the list of assignment targets in S

in terms of the commands we've seen.

Page 26: Technologies for finding errors in object-oriented software K. Rustan M. Leino Microsoft Research, Redmond, WA Lecture 1 Summer school on Formal Models.

Loop (answer to exercise)

while {inv J} B do w: S end=

assert J ;change w such that J ;if B then

S ; assert J ; magicelse

skipend

Page 27: Technologies for finding errors in object-oriented software K. Rustan M. Leino Microsoft Research, Redmond, WA Lecture 1 Summer school on Formal Models.

Summary• Language is built up from 6 primitive

commands• Semantics can be given by weakest

preconditions• Partial (miraculous) commands are

important and very useful• select/store handle “map” variables• Procedures are names for specifications• Procedure implementations are hints for

compiler