Скачать презентацию 2002 Software Model Checking Willem Visser Research Institute Скачать презентацию 2002 Software Model Checking Willem Visser Research Institute

f629f287936a6cd39231e6621f5b92da.ppt

  • Количество слайдов: 99

2002 Software Model Checking Willem Visser Research Institute for Advanced Computer Science NASA Ames 2002 Software Model Checking Willem Visser Research Institute for Advanced Computer Science NASA Ames Research Center wvisser@email. arc. nasa. gov 24 September 2002 © Willem Visser 2002

Overview 2002 • Introduction to Model Checking – Hardware and Software Model Checking • Overview 2002 • Introduction to Model Checking – Hardware and Software Model Checking • Program Model Checking – Major Trends • Abstraction • Improved model checking technology – A Brief History • • • SPIN Hand-translations State-less model checking Semi-automated translations Fully automated translations – Current Trends • • • Custom-made model checkers for programs SLAM JPF Summary NASA Case Studies - Remote Agent, DEOS and Mars Rover Future of Software Model Checking 24 September 2002 © Willem Visser 2002 2

2002 Model Checking The Intuition • Calculate whether a system satisfies a certain behavioral 2002 Model Checking The Intuition • Calculate whether a system satisfies a certain behavioral property: – Is the system deadlock free? – Whenever a packet is sent will it eventually be received? • So it is like testing? No, major difference: – Look at all possible behaviors of a system • Automatic, if the system is finite-state – Potential for being a push-button technology – Almost no expert knowledge required • How do we describe the system? • How do we express the properties? 24 September 2002 © Willem Visser 2002 3

Labeled State Graph Kripke Structure 2002 x Each state represents all variable values and Labeled State Graph Kripke Structure 2002 x Each state represents all variable values and location counters ~p k Each transition represents an execution step in the system h h y z p ~p ~p ~p The labels represent predicates in each state e. g. (x = 5) K = ({p, ~p}, {x, y, z, k, h}, R, {x}, L) 24 September 2002 © Willem Visser 2002 4

2002 Property Specifications • Temporal Logic – Express properties of event orderings in time 2002 Property Specifications • Temporal Logic – Express properties of event orderings in time – e. g. “Always” when a packet is sent it will “Eventually” be received • Linear Time • Branching Time – Every moment has a unique successor – Infinite sequences (words) – Linear Time Temporal Logic (LTL) 24 September 2002 © Willem Visser 2002 – Every moment has several successors – Infinite tree – Computation Tree Logic (CTL) 5

2002 Safety and Liveness • Safety properties – Invariants, deadlocks, reachability, etc. – Can 2002 Safety and Liveness • Safety properties – Invariants, deadlocks, reachability, etc. – Can be checked on finite traces – “something bad never happens” • Liveness Properties – Fairness, response, etc. – Infinite traces – “something good will eventually happen” 24 September 2002 © Willem Visser 2002 6

2002 Mutual Exclusion Example • Two process mutual exclusion with shared semaphore • Each 2002 Mutual Exclusion Example • Two process mutual exclusion with shared semaphore • Each process has three states • Non-critical (N) • Trying (T) • Critical (C) • Semaphore can be available (S 0) or taken (S 1) • Initially both processes are in the Non-critical state and the semaphore is available --- N 1 N 2 S 0 N 1 T 1 S 0 C 1 S 1 C 1 N 1 S 0 24 September 2002 || N 2 T 2 S 0 C 2 S 1 C 2 N 2 S 0 © Willem Visser 2002 7

2002 Mutual Exclusion Example N 1 N 2 S 0 T 1 N 2 2002 Mutual Exclusion Example N 1 N 2 S 0 T 1 N 2 S 0 N 1 T 2 S 0 T 1 T 2 S 0 C 1 N 2 S 1 C 1 T 2 S 1 N 1 C 2 S 1 T 1 C 2 S 1 K ╞ AG EF (N 1 N 2 S 0) No matter where you are there is always a way to get to the initial state 24 September 2002 © Willem Visser 2002 8

2002 Mutual Exclusion Example N 1 N 2 S 0 T 1 N 2 2002 Mutual Exclusion Example N 1 N 2 S 0 T 1 N 2 S 0 N 1 T 2 S 0 T 1 T 2 S 0 C 1 N 2 S 1 C 1 T 2 S 1 N 1 C 2 S 1 T 1 C 2 S 1 K ╞ AG EF (N 1 N 2 S 0) 24 September 2002 © Willem Visser 2002 9

2002 Mutual Exclusion Example N 1 N 2 S 0 T 1 N 2 2002 Mutual Exclusion Example N 1 N 2 S 0 T 1 N 2 S 0 N 1 T 2 S 0 T 1 T 2 S 0 C 1 N 2 S 1 C 1 T 2 S 1 N 1 C 2 S 1 T 1 C 2 S 1 K ╞ AG EF (N 1 N 2 S 0) 24 September 2002 © Willem Visser 2002 10

2002 Mutual Exclusion Example N 1 N 2 S 0 T 1 N 2 2002 Mutual Exclusion Example N 1 N 2 S 0 T 1 N 2 S 0 N 1 T 2 S 0 T 1 T 2 S 0 C 1 N 2 S 1 C 1 T 2 S 1 N 1 C 2 S 1 T 1 C 2 S 1 K ╞ AG EF (N 1 N 2 S 0) 24 September 2002 © Willem Visser 2002 11

2002 Mutual Exclusion Example N 1 N 2 S 0 T 1 N 2 2002 Mutual Exclusion Example N 1 N 2 S 0 T 1 N 2 S 0 N 1 T 2 S 0 T 1 T 2 S 0 C 1 N 2 S 1 C 1 T 2 S 1 N 1 C 2 S 1 T 1 C 2 S 1 K ╞ AG EF (N 1 N 2 S 0) 24 September 2002 © Willem Visser 2002 12

2002 Mutual Exclusion Example N 1 N 2 S 0 T 1 N 2 2002 Mutual Exclusion Example N 1 N 2 S 0 T 1 N 2 S 0 N 1 T 2 S 0 T 1 T 2 S 0 C 1 N 2 S 1 C 1 T 2 S 1 N 1 C 2 S 1 T 1 C 2 S 1 K ╞ AG EF (N 1 N 2 S 0) 24 September 2002 © Willem Visser 2002 13

2002 Model Checking • Given a Kripke structure M = (S, R, L) that 2002 Model Checking • Given a Kripke structure M = (S, R, L) that represents a finite-state concurrent system and a temporal logic formula f expressing some desired specification, find the set of states in S that satisfy f: { s S | M, s ╞ f } • Normally, some states of the concurrent system are designated as initial states. The system satisfies the specification provided all the initial states are in the set. We often write: M ╞ f 24 September 2002 © Willem Visser 2002 14

2002 • Explicit vs. Symbolic Model Checking • Explicit State – states are enumerated 2002 • Explicit vs. Symbolic Model Checking • Explicit State – states are enumerated on-the-fly – Forwards analysis – Stores visited states in a hashtable • – Memory intensive – Good for finding concurrency errors – Short execution paths are better, but long execution paths can also be handled – Can handle dynamic creation of objects/threads – Mostly used in software 24 September 2002 – Sets of states are manipulated at a time – Typically a backwards analysis – Transition relation encoded by (some variant of) Binary Decision Diagrams (BDDs) or as a satisfiability problem • Characteristics Symbolic Characteristics – Can handle very large state spaces – Not as good for asynchronous systems – Cannot deal well with long execution traces – Works best with a static transition relation, hence doesn’t deal well with dynamic creation of objects/threads – Mostly used in hardware © Willem Visser 2002 15

2002 Overview • Introduction to Model Checking – Hardware Model Checking – Software Model 2002 Overview • Introduction to Model Checking – Hardware Model Checking – Software Model Checking • Program Model Checking • Case Studies • Future of Software Model Checking 24 September 2002 © Willem Visser 2002 16

2002 Hardware Model Checking • BDD-based model checking was the enabling technology – Hardware 2002 Hardware Model Checking • BDD-based model checking was the enabling technology – Hardware is typically synchronous and regular, hence the transition relation can be encoded efficiently – Execution paths are typically very short • The Intel Pentium bug, was the “disaster” that got model checking on the map in the hardware industry – What is it going to take in the software world? • Intel, IBM, Motorola, etc. now employ hundreds of model checking experts 24 September 2002 © Willem Visser 2002 17

2002 Software Model Checking • Although the early papers on model checking focused on 2002 Software Model Checking • Although the early papers on model checking focused on software, not much happened until 1997 • Until 1997 most work was on software designs – Since catching bugs early is more cost-effective – Problem is that everybody use a different design notation, and although bugs were found the field never really moved beyond some compelling case-studies – Reality is that people write code first, rather than design • The field took off when the seemingly harder problem of analyzing actual source code was first attempted 24 September 2002 © Willem Visser 2002 18

2002 Program Model Checking • Why is program analysis with a model checker so 2002 Program Model Checking • Why is program analysis with a model checker so much more interesting? – Designs are hard to come by, but buggy programs are everywhere! – Testing is inadequate for complex software (concurrency, pointers, objects, etc. ) – Static program analysis was already an established field, mostly in compiler optimization, but also in verification. 24 September 2002 © Willem Visser 2002 19

2002 The Trends in Program Model Checking Most model checkers cannot deal with the 2002 The Trends in Program Model Checking Most model checkers cannot deal with the features of modern programming languages • Bringing programs to model checking – Abstraction (including translation) • Bringing model checking to programs – Improve model checking to directly deal with programs as input 24 September 2002 © Willem Visser 2002 20

2002 Overview • Introduction to Model Checking • Program Model Checking – Major Trends 2002 Overview • Introduction to Model Checking • Program Model Checking – Major Trends • Abstraction • Improved model checking technology – A Brief History – Current Trends • Case Studies • Future of Software Model Checking 24 September 2002 © Willem Visser 2002 21

2002 Program Model Checking Enabling Technology Abstraction Model Checker Input Program void add(Object o) 2002 Program Model Checking Enabling Technology Abstraction Model Checker Input Program void add(Object o) { buffer[head] = o; head = (head+1)%size; } Object take() { … tail=(tail+1)%size; return buffer[tail]; } Infinite state 24 September 2002 Finite state © Willem Visser 2002 22

2002 Abstraction • Model checkers don’t take real “programs” as input • Model checkers 2002 Abstraction • Model checkers don’t take real “programs” as input • Model checkers typically work on finite state systems • Abstraction therefore solves two problems – It allows model checkers to analyze a notation they couldn’t deal with before, and, – Cuts the state space size to something manageable • Abstraction comes in three flavors – Over-approximations, i. e. more behaviors are added to the abstracted system than are present in the original – Under-approximations, i. e. less behaviors are present in the abstracted system than are present in the original – Precise abstractions, i. e. the same behaviors are present in the abstracted and original program 24 September 2002 © Willem Visser 2002 23

Under-Approximation 2002 “Meat-Axe” Abstraction • Remove parts of the program deemed “irrelevant” to the Under-Approximation 2002 “Meat-Axe” Abstraction • Remove parts of the program deemed “irrelevant” to the property being checked – Limit input values to 0. . 10 rather than all integer values – Queue size 3 instead of unbounded, etc. • The abstraction of choice in the early days of program model checking – used during the translation of code to a model checker’s input language • Typically manual, with no guarantee that the right behaviors are removed. • Precise abstraction, w. r. t. the property being checked, may be obtained if the behaviors being removed are indeed not influencing the property – Program slicing is an example of an automated under-approximation that will lead to a precise abstraction w. r. t. the property being checked 24 September 2002 © Willem Visser 2002 24

Over-Approximations 2002 Abstract Interpretation • Maps sets of states in the concrete program to Over-Approximations 2002 Abstract Interpretation • Maps sets of states in the concrete program to one state in the abstract program – Reduces the number of states, but increases the number of possible transitions, and hence the number of behaviors – Can in rare cases lead to a precise abstraction • Type-based abstractions – Replace int by Signs abstraction {neg, pos, zero} • Predicate abstraction – Replace predicates in the program by boolean variables, and replace each instruction that modifies the predicate with a corresponding instruction that modifies the boolean. • Automated (conservative) abstraction • Eliminating spurious errors is the big problem – Abstract program has more behaviors, therefore when an error is found in the abstract program, is that also an error in the original program? – Most research focuses on this problem, and its counter-part the elimination of spurious errors, often called abstraction refinement 24 September 2002 © Willem Visser 2002 25

2002 Bringing Model Checking to Programs • Allow model checkers to take modern programming 2002 Bringing Model Checking to Programs • Allow model checkers to take modern programming languages as input, or, notations that are of similar expressive power • Major hurdle is how to encode the state of the system efficiently • Alternatively state-less model checking – No state encoding or storing • Almost exclusively explicit-state model checking • Abstraction can still be used as well – Source to source abstractions 24 September 2002 © Willem Visser 2002 26

Overview 2002 • Introduction to Model Checking • Program Model Checking – Major Trends Overview 2002 • Introduction to Model Checking • Program Model Checking – Major Trends – A Brief History • SPIN • Hand-translations • State-less model checking – Partial-order reductions – Veri. Soft • Semi-automated translations • Fully automated translations – Current Trends • Case Studies • Future of Software Model Checking 24 September 2002 © Willem Visser 2002 27

2002 The Early Years • Hand-translation with ad-hoc abstractions – 1980 through mid 1990 2002 The Early Years • Hand-translation with ad-hoc abstractions – 1980 through mid 1990 s • Semi-automated, table-driven translations – 1998 • Automated translations still with ad-hoc abstractions – 1997 -1999 • State-less model checking for C – Veri. Soft 1997 24 September 2002 © Willem Visser 2002 28

Overview 2002 • Introduction to Model Checking • Program Model Checking – Major Trends Overview 2002 • Introduction to Model Checking • Program Model Checking – Major Trends – A Brief History • SPIN • Hand-translations • State-less model checking – Partial-order reductions – Veri. Soft • Semi-automated translations • Fully automated translations – Current Trends • Case Studies • Future of Software Model Checking 24 September 2002 © Willem Visser 2002 29

2002 SPIN Model Checker • Kripke structures are described as “programs” in the PROMELA 2002 SPIN Model Checker • Kripke structures are described as “programs” in the PROMELA language – Kripke structure is generated on-the-fly during model checking • Automata based model checker – Translates LTL formula to Büchi automaton • By far the most popular model checker – 10 th SPIN Workshop to be held with ICSE – May 2003 • Relevant theoretical papers can be found here – http: //netlib. bell-labs. com/netlib/spin/whatispin. html • Ideal for software model checking due to expressiveness of the PROMELA language – Close to a real programming language • Gerard Holzmann won the ACM software award for SPIN 24 September 2002 © Willem Visser 2002 30

2002 Hand-Translation abstraction Verification model translation Program • Hand translation of program to model 2002 Hand-Translation abstraction Verification model translation Program • Hand translation of program to model checker’s input notation • “Meat-axe” approach to abstraction • Labor intensive and error-prone 24 September 2002 © Willem Visser 2002 31

2002 Hand-Translation Examples • Remote Agent – Havelund, Penix, Lowry 1997 – – http: 2002 Hand-Translation Examples • Remote Agent – Havelund, Penix, Lowry 1997 – – http: //ase. arc. nasa. gov/havelund Translation from Lisp to Promela (most effort) Heavy abstraction 3 man months • DEOS – Penix, Visser, et al. 1998/1999 – – http: //ase. arc. nasa. gov/visser C++ to Promela (most effort in environment generation) Limited abstraction - programmers produced sliced system 3 man months 24 September 2002 © Willem Visser 2002 32

Overview 2002 • Introduction to Model Checking • Program Model Checking – Major Trends Overview 2002 • Introduction to Model Checking • Program Model Checking – Major Trends – A Brief History • SPIN • Hand-translations • State-less model checking – Partial-order reductions – Veri. Soft • Semi-automated translations • Fully automated translations – Current Trends • Case Studies • Future of Software Model Checking 24 September 2002 © Willem Visser 2002 33

State-less Model Checking 2002 • No state storing, hence no state matching • Must State-less Model Checking 2002 • No state storing, hence no state matching • Must limit search-depth to ensure termination • Enabling technology is partial-order reduction – Avoid revisiting some states • Annotate code to allow verifier to detect “important” statements – Communications and nondeterministic choice – Model checker will try all interleavings of these statements, but will consider all other statements “atomic”, i. e. the last statement in any group will be an important one. • Examples include – Veri. Soft • http: //www 1. bell-labs. com/project/verisoft/ – Rivet • http: //sdg. lcs. mit. edu/rivet. html – See also work by Scott Stoller • http: //www. cs. sunysb. edu/~stoller/ 24 September 2002 © Willem Visser 2002 34

2002 Partial-Order Reductions • Reduce the number of interleavings of independent concurrent transitions • 2002 Partial-Order Reductions • Reduce the number of interleavings of independent concurrent transitions • x : = 1 || y : = 1 where initially x = y = 0 x : = 1 00 10 y : = 1 01 y : = 1 x : = 1 11 No Reductions 24 September 2002 x : = 1 00 10 y : = 1 01 y : = 1 x : = 1 00 10 y : = 1 11 Transitions Reduced © Willem Visser 2002 11 States Reduced 35

Partial Order Reductions 2002 Basic Ideas • Independence – Independent transitions cannot disable nor Partial Order Reductions 2002 Basic Ideas • Independence – Independent transitions cannot disable nor enable each other – Enabled independent transitions are commutative • Partial-order reductions only apply during the on-the-fly construction of the Kripke structure • Based on a selective search principle – Compute a subset of enabled transitions in a state to execute • Sleep sets (Reduce transitions) • Persistent sets (Reduce states) 24 September 2002 © Willem Visser 2002 36

2002 Persistent Set Reductions • A subset of the enabled transitions is called persistent, 2002 Persistent Set Reductions • A subset of the enabled transitions is called persistent, when any transition can be executed from outside the set and it will not interact or affect the transitions inside the set – Use the static structure of the system to determine what goes into the persistent set – Note, all enabled transitions are trivially persistent • Only execute transitions in the persistent set • Persistent set algorithm is used within SPIN • See papers by Godefroid and Peled 24 September 2002 © Willem Visser 2002 37

2002 Veri. Soft • The first model checker that could handle programs directly T 2002 Veri. Soft • The first model checker that could handle programs directly T 1 || T 2 T 1 – C programs running on Unix • Relies on partial-order reductions to limit the number of times a state is revisited – Persistent sets T 1 || T 2 • Reduce states visited T 1 – Sleep sets • Reduce transitions executed • Paths must be replayed from the initial state to try new branches – No check-pointing 24 September 2002 T 2 © Willem Visser 2002 T 2 Persistent Sets T 2 T 1 || T 2 T 1 Sleep Sets 38

2002 State-less Example T 1 T 2 T 3 T 3 T 1 T 2002 State-less Example T 1 T 2 T 3 T 3 T 1 T 2 T 4 T 4 T 1 T 2 T 1 ; T 2 || T 3 ; T 4 • DFS with state storage – executes 12 transitions • DFS state-less – executes 24 transitions 24 September 2002 © Willem Visser 2002 39

2002 State-less Example T 1 T 2 T 3 T 3 T 1 T 2002 State-less Example T 1 T 2 T 3 T 3 T 1 T 2 T 4 T 4 T 1 T 2 T 1 ; T 2 || T 3 ; T 4 • DFS with state storage – executes 12 transitions • DFS state-less – executes 24 transitions • DFS state-less with partial-order reduction • Sleep sets - executes 8 transitions (all states) 24 September 2002 © Willem Visser 2002 40

2002 State-less Example T 1 T 2 T 3 T 3 T 1 T 2002 State-less Example T 1 T 2 T 3 T 3 T 1 T 2 T 4 T 4 T 1 T 2 T 1 ; T 2 || T 3 ; T 4 • DFS with state storage – executes 12 transitions • DFS state-less – executes 24 transitions • DFS state-less with partial-order reduction • Sleep sets - executes 8 transitions (all states) • Persistent sets – executes 4 transitions (only 5 states) 24 September 2002 © Willem Visser 2002 41

Overview 2002 • Introduction to Model Checking • Program Model Checking – Major Trends Overview 2002 • Introduction to Model Checking • Program Model Checking – Major Trends – A Brief History • SPIN • Hand-translations • State-less model checking – Partial-order reductions – Veri. Soft • Semi-automated translations • Fully automated translations – Current Trends • Case Studies • Future of Software Model Checking 24 September 2002 © Willem Visser 2002 42

2002 Semi-Automatic Translation • Table-driven translation and abstraction – Feaver system by Gerard Holzmann 2002 Semi-Automatic Translation • Table-driven translation and abstraction – Feaver system by Gerard Holzmann – User specifies code fragments in C and how to translate them to Promela (SPIN) – Translation is then automatic – Found 75 errors in Lucent’s Path. Star system – http: //cm. bell-labs. com/cm/cs/who/gerard/ • Advantages – Can be reused when program changes – Works well for programs with long development and only local changes 24 September 2002 © Willem Visser 2002 43

2002 Fully Automatic Translation • Advantage – No human intervention required • Disadvantage – 2002 Fully Automatic Translation • Advantage – No human intervention required • Disadvantage – Limited by capabilities of target system • Examples – Java Path. Finder 1 - http: //ase. arc. nasa. gov/havelund/jpf. html • Translates from Java to Promela (Spin) – JCAT - http: //www. dai-arc. polito. it/dai-arc/auto/tools/tool 6. shtml • Translates from Java to Promela (or d. Spin) – Bandera - http: //www. cis. ksu. edu/santos/bandera/ • Translates from Java bytecode to Promela, SMV or d. Spin 24 September 2002 © Willem Visser 2002 44

Overview 2002 • Introduction to Model Checking • Program Model Checking – Major Trends Overview 2002 • Introduction to Model Checking • Program Model Checking – Major Trends – A Brief History – Current Trends • • • Custom-made model checkers for programs Abstraction SLAM JPF Summary Examples of other software analyses • Case Studies • Future of Software Model Checking 24 September 2002 © Willem Visser 2002 45

Program Model Checking Current Trends 2002 Program void add(Object o) { buffer[head] = o; Program Model Checking Current Trends 2002 Program void add(Object o) { buffer[head] = o; head = (head+1)%size; } Object take() { … tail=(tail+1)%size; return buffer[tail]; } Abstraction Abstract Program Abstraction Correct Custom Model Checker T 1 > T 2 T 3 > T 4 T 5 > T 6 … Error-trace Abstraction refinement • Custom-made model checkers for programming languages with automatic abstraction at the source code level • Automatic abstraction & translation based transformation to new “abstract” formalism for model checker • Abstraction refinement mostly automated 24 September 2002 © Willem Visser 2002 46

Custom-made Model Checkers 2002 • Translation based – d. Spin • • Spin extended Custom-made Model Checkers 2002 • Translation based – d. Spin • • Spin extended with dynamic constructs Essentially a C model checker Source-2 -source abstractions can be supported http: //www. dai-arc. polito. it/dai-arc/auto/tools/tool 7. shtml – SPIN Version 4 (not released yet) • PROMELA language augmented with C code • Table-driven abstractions – Bandera • Translated Bandera Intermediate Language (BIR) to a number of backend model checkers, but, a new BIR custom-made model checker is under development • Supports source-2 -source abstractions as well as property-specific slicing • http: //www. cis. ksu. edu/santos/bandera/ 24 September 2002 © Willem Visser 2002 47

Custom-made Model Checkers 2002 • Abstraction based – SLAM • C programs are abstracted Custom-made Model Checkers 2002 • Abstraction based – SLAM • C programs are abstracted via predicate abstraction to boolean programs for model checking • http: //research. microsoft. com/slam/ – BLAST • Similar basic idea to SLAM, but using lazy abstraction, i. e. during abstraction refinement don’t abstract the whole program only certain parts • http: //www-cad. eecs. berkeley. edu/~tah/blast/ – 3 -Valued Model Checker (3 VMC) extension of TVLA for Java programs • http: //www. cs. tau. ac. il/~yahave/3 vmc. htm • http: //www. math. tau. ac. il/~rumster/TVLA/ 24 September 2002 © Willem Visser 2002 48

Overview 2002 • Introduction to Model Checking • Program Model Checking – Major Trends Overview 2002 • Introduction to Model Checking • Program Model Checking – Major Trends – A Brief History – Current Trends • • • Custom-made model checkers for programs Abstraction SLAM JPF Summary Examples of other software analyses • Case Studies • Future of Software Model Checking 24 September 2002 © Willem Visser 2002 49

2002 Abstraction • Data type based abstractions – Abstract Interpretation (Patrick Cousot) – E. 2002 Abstraction • Data type based abstractions – Abstract Interpretation (Patrick Cousot) – E. g. replace integer variable with odd-even range or Signs abstraction {negative, zero, positive} – Replace all operations on the concrete variable with corresponding abstract operations • add(pos, pos) = pos • subtract(pos, pos) = negative | zero | pos • eq(pos, pos) = true | false • Predicate Abstraction (Graf, Saïdi see also Uribe) – Create abstract state-space w. r. t. set of predicates defined in concrete system 24 September 2002 © Willem Visser 2002 50

Data Type Abstraction 2002 Collapses data domains via abstract interpretation: Code Data domains int Data Type Abstraction 2002 Collapses data domains via abstract interpretation: Code Data domains int x = 0; if (x == 0) x = x + 1; (n<0) : NEG (n==0): ZERO (n>0) : POS Signs x = ZERO; if (Signs. eq(x, ZERO)) x = Signs. add(x, POS); 24 September 2002 © Willem Visser 2002 Signs NEG ZERO POS 51

2002 Predicate Abstraction T Abstract a : int Concrete F EQ = T bool 2002 Predicate Abstraction T Abstract a : int Concrete F EQ = T bool EQ : = F EQ (x = y) x=y x y x=0 y++ x=0 y=1 • Mapping of a concrete system to an abstract system, whose states correspond to truth values of a set of predicate • Create abstract state-graph during model checking, or, • Create an abstract transition system before model checking 24 September 2002 © Willem Visser 2002 52

2002 Example Predicate Abstraction Predicate: B (x = y) Concrete Statement y : = 2002 Example Predicate Abstraction Predicate: B (x = y) Concrete Statement y : = y + 1 Step 2 a: Use Decision Procedures x=y+1 x y x=y+1 24 September 2002 x=y x y+1 Abstract Statement Step 1: Calculate pre-images {x = y + 1} y : = y + 1 {x = y} {x y + 1} y : = y + 1 {x y} Step 2: Rewrite in terms of predicates {x = y + 1} y : = y + 1 {B} y : = y + 1 {~B} Step 3: Abstract Code IF B THEN B : = false ELSE B : = true | false © Willem Visser 2002 53

Example of Infeasible Counter-example 2002 {NEG, ZERO, POS} [1] if (-2 + 3 > Example of Infeasible Counter-example 2002 {NEG, ZERO, POS} [1] if (-2 + 3 > 0) then [2] assert(true); else [3] assert(false); Signs: n < 0 -> neg 0 -> zero n > 0 -> pos [1] if(Signs. gt(Signs. add(NEG, POS), ZERO)) then [2] assert(true); else [3] assert(false); In ib as fe le [1]: te un co 24 September 2002 [2]: © Willem Visser 2002 [3]: X e pl am ex r- [2]: 54

Overview 2002 • Introduction to Model Checking • Program Model Checking – Major Trends Overview 2002 • Introduction to Model Checking • Program Model Checking – Major Trends – A Brief History – Current Trends • Custom-made model checkers for programs • Abstraction • SLAM – Abstraction Refinement • JPF • Summary • Examples of other software analyses • Case Studies • Future of Software Model Checking 24 September 2002 © Willem Visser 2002 55

SLAM 2002 C Program annotated with API usage rules void add(Object o) { buffer[head] SLAM 2002 C Program annotated with API usage rules void add(Object o) { buffer[head] = o; head = (head+1)%size; } Simplified View Predicate Abstraction C 2 BP Predicates Object take() { … tail=(tail+1)%size; return buffer[tail]; } Symbolic Execution NEWTON Custom Model Checker BEBOP Correct Error-trace False Error-trace is Feasible 24 September 2002 © Willem Visser 2002 56

2002 SLAM • Check API usage rules for sequential C programs – Mostly applied 2002 SLAM • Check API usage rules for sequential C programs – Mostly applied to device driver code • C 2 BP – Inputs: C program and predicates – Output: boolean program over the predicates • BEBOP – Symbolic interprocedural data flow analysis – Concrete CFG and BDD encoding of states • NEWTON – Symbolic execution of C programs – Using Simplify theorem prover for checking feasibility of conditionals 24 September 2002 © Willem Visser 2002 57

Abstraction Refinement Example 2002 Adapted from Ball &Rajamani. POPL 02 Property: if a lock Abstraction Refinement Example 2002 Adapted from Ball &Rajamani. POPL 02 Property: if a lock is held it must be released before reacquiring do { //get the write lock Ke. Acquire. Spin. Lock(&dev. Ext->write. List. Lock); n. Packets. Old = n. Packets; request = dev. Ext->WLHead. Va; if (request){ Ke. Release. Spin. Lock(&dev. Ext->write. List. Lock); . . . n. Packets++; } } while (n. Packets != n. Packets. Old); Ke. Release. Spin. Lock(&dev. Ext->write. List. Lock); 24 September 2002 © Willem Visser 2002 58

Initial Abstraction and Model Checking 2002 Boolean Program [1] do //get the write lock Initial Abstraction and Model Checking 2002 Boolean Program [1] do //get the write lock [2] Acquire. Lock(); [3] if (*) then [4] Release. Lock(); fi [5] while (*); [6] Release. Lock(); Error-trace : 1, 2, 3, 5, 1, 2 24 September 2002 © Willem Visser 2002 59

2002 Symbolic Execution [1] do { [2] Ke. Acquire. Spin. Lock(&dev. Ext->write. List. Lock); 2002 Symbolic Execution [1] do { [2] Ke. Acquire. Spin. Lock(&dev. Ext->write. List. Lock); n. Packets. Old = n. Packets; request = dev. Ext->WLHead. Va; [3] if (request){ [4] Ke. Release. Spin. Lock(&dev. Ext->write. List. Lock); . . . n. Packets++; } [5] } while (n. Packets != n. Packets. Old); [6] Ke. Release. Spin. Lock(&dev. Ext->write. List. Lock); Symbolic execution of 1, 2, 3, 5, 1, 2 shows that when 5 is executed n. Packets == n. Packets. Old hence the path is infeasible. The predicate n. Packets == n. Packets. Old is then added and used during predicate abstraction 24 September 2002 © Willem Visser 2002 60

2002 Next Abstraction and Model Checking New Predicate b : (n. Packets. Old == 2002 Next Abstraction and Model Checking New Predicate b : (n. Packets. Old == n. Packets) [1] do [2] Acquire. Lock(); [3] b = true; // n. Packets. Old = n. Packets [4] if (*) then [5] Release. Lock(); [6] b = b ? False : *; // n. Packets++ fi [7] while (!b); //(n. Packets. Old != n. Packets) [8] Release. Lock(); Now property holds 24 September 2002 © Willem Visser 2002 61

Overview 2002 • Introduction to Model Checking • Program Model Checking – Major Trends Overview 2002 • Introduction to Model Checking • Program Model Checking – Major Trends – A Brief History – Current Trends • Custom-made model checkers for programs • SLAM • JPF – – Abstractions Partial-order and symmetry reductions Heuristics New Stuff • Summary • Examples of other software analyses • Case Studies • Future of Software Model Checking 24 September 2002 © Willem Visser 2002 62

2002 Java Path. Finder(2) Direct Approach • Based on custom-made Java Virtual Machine – 2002 Java Path. Finder(2) Direct Approach • Based on custom-made Java Virtual Machine – Handle all of Java, since it works with bytecodes – Written in Java • Efficient encoding of states • Modular design for easy extensions • Supports LTL checking with properties expressed in Bandera’s BSL notation • Incorporates a number of search strategies – DFS, BFS, A*, Best-first, etc. • Supports source-2 -source abstractions • http: //ase. arc. nasa. gov/jpf 24 September 2002 © Willem Visser 2002 63

2002 Java Path. Finder(JPF) Java Code Bytecode void add(Object o) { buffer[head] = o; 2002 Java Path. Finder(JPF) Java Code Bytecode void add(Object o) { buffer[head] = o; head = (head+1)%size; } Object take() { … tail=(tail+1)%size; return buffer[tail]; } JAVAC 0: 1: 2: 5: 8: 9: 10: iconst_0 istore_2 goto #39 getstatic aload_0 iload_2 aaload JVM Model Checker Special JVM 24 September 2002 © Willem Visser 2002 64

Bandera & JPF Architecture 2002 Property Tool Abstraction Analyses Engine BIRC Translators BIR SPIN Bandera & JPF Architecture 2002 Property Tool Abstraction Analyses Engine BIRC Translators BIR SPIN d. SPIN Java Jimple (BC) Parser SMV Slicer Decompile ; javac Error Trace Display 24 September 2002 Simulator © Willem Visser 2002 JPF 65

2002 Key Points • Models can be infinite state – Unbounded objects, threads, … 2002 Key Points • Models can be infinite state – Unbounded objects, threads, … – Depth-first state generation (explicit-state) – Verification requires abstraction • Handle full Java language – but only for closed systems – Cannot handle native code • no Input/output through GUIs, files, Networks, … • Must be modeled by java code instead • Allows Nondeterministic Environments – JPF traps special nondeterministic methods • Checks for User-defined assertions, deadlock and LTL properties 24 September 2002 © Willem Visser 2002 66

Java Extensions -Verify Class 2002 • Used for annotations • Atomicity – begin. Atomic(), Java Extensions -Verify Class 2002 • Used for annotations • Atomicity – begin. Atomic(), end. Atomic() • Nondeterminism – int random(int); boolean random. Bool(); Object random. Object(String cname); • Properties – Assert. True(boolean cond) • Miscellaneous – Dump states, print, Daikon logs, … 24 September 2002 © Willem Visser 2002 67

2002 JPF Technologies • Predicate abstraction and type based abstractions • Partial order and 2002 JPF Technologies • Predicate abstraction and type based abstractions • Partial order and symmetry reductions • Slicing • Heuristic Search • New Stuff – Symbolic Execution – Error Explanations 24 September 2002 © Willem Visser 2002 68

Type-based Abstractions Abstract Interpretation 2002 abstraction Signs abstracts int TOKENS = { neg, zero, Type-based Abstractions Abstract Interpretation 2002 abstraction Signs abstracts int TOKENS = { neg, zero, pos }; abstraction mapping: n n n < 0 == 0 > 0 -> {neg}; -> {zero}; -> {pos}; +abs zero pos pos neg {zero, pos, neg} 24 September 2002 public class Signs { public static final int NEG = 0; public static final int ZERO = 1; public static final int POS = 2; public static int abs(int n) { if (n < 0) return NEG; if (n == 0) return ZERO; if (n > 0) return POS; } public static int add(int a, int b){ int r; Verify. begin. Atomic(); if (a==NEG && b==NEG) r=NEG; neg if (a==NEG && b==ZERO) r=NEG; neg if (a==ZERO && b==NEG) r=NEG; if (a==ZERO && b==ZERO) r=ZERO; {zero, pos, neg} if (a==ZERO && b==POS) r=POS; if (a==POS && b==ZERO) r=POS; neg if (a==POS && b==POS) r=POS; else r=Verify. choose(2); Verify. end. Atomic(); © Willem Visser 2002 69 return r; }}

2002 JPF Predicate Abstraction • Annotations used to indicate abstractions – Abstract. remove(x); Abstract. 2002 JPF Predicate Abstraction • Annotations used to indicate abstractions – Abstract. remove(x); Abstract. remove(y); Abstract. add. Boolean(“EQ”, x==y); • Tool generates abstract Java program – Using Stanford Validity Checker (SVC) – JVM is extended with nondeterminism to handle over approximation • Abstractions can be local to a class or global across multiple classes – Abstract. add. Boolean(“EQ”, A. x==B. y); – Dynamic predicate abstraction - works across instances 24 September 2002 © Willem Visser 2002 70

Partial Order Reduction in JPF 2002 • Persistent set approach • Find transitions that Partial Order Reduction in JPF 2002 • Persistent set approach • Find transitions that are globally independent – Always independent of all transitions in other threads • Requires static analysis before model checking to determine global independence – Advanced alias analysis 24 September 2002 © Willem Visser 2002 71

Partial-order Reduction 2002 class S 1 { int x; } class S 2 { Partial-order Reduction 2002 class S 1 { int x; } class S 2 { int y; } public class Example { public static void main (String[] args) { First. Task t 1 = new First. Task (); Second. Task t 2 = new Second. Task(); t 1. start(); t 2. start(); }} class First. Task extends Thread { public void run() { int x; S 1 s 1; x = 1; s 1 = new S 1(); x = 3; }} class Second. Task extends Thread { public void run() { int x; S 2 s 2; x = 2; s 2 = new S 2(); x = 3; }} • 43 states with no reduction • 18 states with partial-order reduction • all statements are globally independent (safe) 24 September 2002 © Willem Visser 2002 72

Partial-order Reduction 2002 class S 1 { int x; } class S 2 { Partial-order Reduction 2002 class S 1 { int x; } class S 2 { int y; } public class Example { public static int x = 10; public static void main (String[] args) { First. Task t 1 = new First. Task (); Second. Task t 2 = new Second. Task(); t 1. start(); t 2. start(); }} class First. Task extends Thread { public void run() { int x; S 1 s 1; Example. x = 1; Not s 1 = new S 1(); x = 3; }} Safe class Second. Task extends Thread { public void run() { int x; S 2 s 2; Example. x = 2; s 2 = new S 2(); x = 3; }} • 43 states with no reduction • 27 states with partial-order reduction • 2 statements are not globally independent 24 September 2002 © Willem Visser 2002 73

Symmetry Reduction 2002 1 class S { int x; } public class Example { Symmetry Reduction 2002 1 class S { int x; } public class Example { public static void main (String[] args) { First. Task t 1 = new First. Task (); Second. Task t 2 = new Second. Task(); t 1. start(); t 2. start(); }} class First. Task extends Thread { class Second. Task extends Thread { public void run() { S s 1; S s 2; s 1 = new S 1(); s 2 = new S 2(); 2 }} }} 1 followed by 2 t 1 t 2 s 1 s 2 0 1 2 3 2 followed by 1 t 2 s 1 0 1 2 3 24 September 2002 • Map allocation to Heap position on First Path • Reuse same Positions on later paths © Willem Visser 2002 74

2002 Garbage Collection class gc { public static void main (String[] args) { while(true) 2002 Garbage Collection class gc { public static void main (String[] args) { while(true) { System. out. println(“ 0”); }}} • Infinite State program • Garbage makes the state grow… • JPF supports • Mark-and-Sweep • Reference counting 24 September 2002 © Willem Visser 2002 75

Property-directed Slicing 2002 indirectly relevant Slice mentioned in property Source program Resulting slice • Property-directed Slicing 2002 indirectly relevant Slice mentioned in property Source program Resulting slice • slicing criterion generated automatically from observables mentioned in the property • backwards slicing automatically finds all components that might influence the observables. 24 September 2002 © Willem Visser 2002 76

Property-directed Slicing 2002 /** * @observable EXP Full: (head == tail) */ class Bounded. Property-directed Slicing 2002 /** * @observable EXP Full: (head == tail) */ class Bounded. Buffer { Object [] buffer_; int bound; int head, tail; Slicing Criterion All statements that assign to head, tail. removed by slicing public synchronized void add(Object o) { while ( tail == head ) try { wait(); } catch ( Interrupted. Exception ex) {} buffer_[head] = o; head = (head+1) % bound; notify. All(); Included in slicing criterion. . . } } 24 September 2002 indirectly relevant © Willem Visser 2002 77

2002 Slicing in JPF • JPF uses Bandera’s slicer • Bandera slices w. r. 2002 Slicing in JPF • JPF uses Bandera’s slicer • Bandera slices w. r. t. – Deadlock - i. e. communication statements – Variables occurring in temporal properties – Variables participating in race-violations • Used with JPF’s runtime analysis • More examples of slicing for model checking – Slicing for Promela (Millet and Teitelbaum) • http: //netlib. bell-labs. com/netlib/spin/ws 98/program. html – Slicing for Hardware Description Languages (Shankar et al. ) • http: //www. cs. wisc. edu/~reps/ 24 September 2002 © Willem Visser 2002 78

Heuristic Search 2002 • Best-First, Beam and A* Search • Heuristics based on property Heuristic Search 2002 • Best-First, Beam and A* Search • Heuristics based on property – deadlock • Maximize number of blocked threads – Assertions • Minimize distance to assertion • Heuristics on structure of Program – Interleaving heuristic • Maximize different thread scheduling – Branch Exploration • Maximize the coverage of new branches – Choose-free heuristic • Minimize non-deterministic choice • User-defined heuristics – Full access to JVM’s state via API • Combine heuristics 24 September 2002 © Willem Visser 2002 79

2002 Choose-free state space search • Theorem [Saidi: SAS’ 00] Every path in the 2002 Choose-free state space search • Theorem [Saidi: SAS’ 00] Every path in the abstracted program where all assignments are deterministic is a path in the concrete program. • Bias the model checker – to look only at paths that do not include instructions that introduce non-determinism • JPF model checker modified – to detect non-deterministic choice and backtrack from those points 24 September 2002 © Willem Visser 2002 80

Choose-free Heuristic 2002 che ear es rst d fi © Willem Visser 2002 pac Choose-free Heuristic 2002 che ear es rst d fi © Willem Visser 2002 pac 24 September 2002 te s Sta • Infeasible error elimination during abstraction • Heuristic function returns best value for states with least number of non-deterministic choices enabled • If no “deterministic” error exists it also searches rest of the state space X X 81

2002 Test Coverage for Model Checking • Reality check: – Model Checkers run out 2002 Test Coverage for Model Checking • Reality check: – Model Checkers run out of memory OFTEN! • If no error was found, how confident can we be that none exists? – Require coverage measure • JPF extended with Branch coverage calculations • Can the coverage measure guide the model checker – Yes, as a heuristic – Better heuristic values are given for least explored branches 24 September 2002 © Willem Visser 2002 82

2002 Concurrency Bugs • Often due to unanticipated interleaving • Increased thread interleaving might 2002 Concurrency Bugs • Often due to unanticipated interleaving • Increased thread interleaving might expose them • Interleaving heuristic – Executions in which context is switched more often are given better heuristic values 24 September 2002 © Willem Visser 2002 83

2002 Scaling Program Model Checking Error-Detection DEOS Java-translation JPF Remote Agent Hand-translation SPIN 24 2002 Scaling Program Model Checking Error-Detection DEOS Java-translation JPF Remote Agent Hand-translation SPIN 24 September 2002 Autopilot JPF Mars Rover JPF DEOS Systematic Hand-translation SPIN © Willem Visser 2002 84

2002 JPF Most Recent Extensions • Symbolic execution based model checking – Sarfraz Khurshid 2002 JPF Most Recent Extensions • Symbolic execution based model checking – Sarfraz Khurshid (MIT), Corina Pasareanu and Doron Peled (Warwick) – Traverses all paths and collects and solves constraints on-the-fly during model checking – Using the Omega libraries for constraint solving – Main application is test-case generation • Error Explanations – Alex Groce (CMU) – Find an error, then try and find “similar” paths that lead to errors (negatives) and that don’t lead to an error (positives). – Analyze the positives and negatives • Find smallest change to make a positive a negative • Find invariants on positives and negatives (using Diakon) • Find statements that are on all and only positives (negatives) 24 September 2002 © Willem Visser 2002 85

Overview 2002 • Introduction to Model Checking • Program Model Checking – Major Trends Overview 2002 • Introduction to Model Checking • Program Model Checking – Major Trends – A Brief History – Current Trends • • • Custom-made model checkers for programs SLAM JPF Summary Examples of other software analyses • Case Studies • Future of Software Model Checking 24 September 2002 © Willem Visser 2002 86

2002 Software Model Checking Executive summary • Model checking by itself cannot deal with 2002 Software Model Checking Executive summary • Model checking by itself cannot deal with the complexity of software • Techniques from static analysis are required – Abstract interpretation, slicing, alias&shape analysis, symbolic execution • Even then, we need to borrow some more! – Heuristic search, constraint solving, etc. • Abandon soundness – Aggressive heuristics – Runtime analysis and runtime monitoring 24 September 2002 © Willem Visser 2002 87

More Software Analysis Techniques 2002 A small sample • Program Verification – For example, More Software Analysis Techniques 2002 A small sample • Program Verification – For example, ESC/Java from Compaq • http: //research. compaq. com/SRC/esc/ • Static analysis for runtime errors – For example, Poly. Space for C, Ada and Java • http: //www. polyspace. com/ • Requirements and Design Analysis – Analysis for SCR, RSML, Statecharts, etc. • Runtime analysis – See Runtime Verification Workshops • http: //ase. arc. nasa. gov/rv 2002/ • Analysis Toolsets – IF (Verimag), SAL (SRI), etc. 24 September 2002 © Willem Visser 2002 88

2002 Overview • Introduction to Model Checking • Program Model Checking • Case Studies 2002 Overview • Introduction to Model Checking • Program Model Checking • Case Studies – Remote Agent – DEOS – Mars Rover • Future of Software Model Checking 24 September 2002 © Willem Visser 2002 89

Case Studies 2002 Remote Agent DEOS Mars Rover 24 September 2002 © Willem Visser Case Studies 2002 Remote Agent DEOS Mars Rover 24 September 2002 © Willem Visser 2002 90

Case Study: DS-1 Remote Agent 2002 Spacecraft Commands Sensors Tasks Achieve Property Subscribe Data Case Study: DS-1 Remote Agent 2002 Spacecraft Commands Sensors Tasks Achieve Property Subscribe Data base Property Locks Lock Event Change Event Interrupt Properties Monitor • Several person-months to create verification model. • One person-week to run verification studies. 24 September 2002 © Willem Visser 2002 91

2002 Monitor Logic Case Study: DS-1 Remote Agent DB change? yes Unexpected timing of 2002 Monitor Logic Case Study: DS-1 Remote Agent DB change? yes Unexpected timing of change event no check wait • Five difficult to find concurrency errors detected • “[Model Checking] has had a substantial impact, helping the RA team improve the quality of the Executive well beyond what would otherwise have been produced. ” - RA team • During flight RA deadlocked (in code we didn’t analyze) – Found this deadlock with JPF 24 September 2002 © Willem Visser 2002 92

2002 DEOS Operating System • Integrated Modular Avionics (IMA) – DEOS Guarantee Space and 2002 DEOS Operating System • Integrated Modular Avionics (IMA) – DEOS Guarantee Space and Time partitioning • FAA Certification Process – Requires Structural Testing Coverage (MC/DC) – Inadequate for finding Time Partitioning Errors • Timing Error not found by Testing occurred • Behavioral Analysis of Time Partitioning – NASA Ames and Honeywell HTC collaboration – Model Check slice of DEOS containing timing error 24 September 2002 © Willem Visser 2002 93

2002 DEOS Analysis • Translated C++ 1 -to-1 to PROMELA/SPIN (1500 lines of C++ 2002 DEOS Analysis • Translated C++ 1 -to-1 to PROMELA/SPIN (1500 lines of C++ code) – Found the time-partitioning error without any prior knowledge, what the error was, where it was or what made it show up. – Required very limited abstraction • DEOS Team Reaction – Surprised that error was found by directly checking code – They expected NASA team to ask for smaller “slice” – They now have their own model checking group building on our work • Then translated DEOS to Java and applied JPF – Backwards dependency analysis from the time partitioning assertion being checked revealed candidate variables to abstract – Applied “range” abstraction {0, 1, many} to a specific integer variable – Too much of an over-approximation that led to many spurious errors – However with the choose-free heuristic the non-spurious error was found 24 September 2002 © Willem Visser 2002 94

Error Trace 2002 Idle never ran User 2: 16/21 idle 8 User 2: 21/60 Error Trace 2002 Idle never ran User 2: 16/21 idle 8 User 2: 21/60 15 User 1: 21/60 5 Main: 5/20 12/20 0 24 September 2002 timer delete 12 preempt 12 timer 20 © Willem Visser 2002 8 timer 40 60 95

2002 Analysis of the K 9 Mars Rover “The Experiment” • Rover is 8000 2002 Analysis of the K 9 Mars Rover “The Experiment” • Rover is 8000 lines of code with 6 threads – heavy use of synchronization between the threads – Complex queue manipulation • Purpose – Benchmark current state of the art in model checking, static analysis for runtime error detection and runtime analysis – Use traditional testing as baseline – Original code was in C++ that was translated to Java • About half the code was translated to C for the static analysis that used Poly. Space • Method – Controlled experiment: 4 groups of 2 people, each group uses one technology on the Mars rover code to find seeded bugs – 3 versions created and each group gets 2 days/version – Some bugs are removed/introduced between versions – Any new bugs discovered are not fixed, only known ones 24 September 2002 © Willem Visser 2002 96

Analysis of the K 9 Mars Rover 2002 How did Model Checking do? • Analysis of the K 9 Mars Rover 2002 How did Model Checking do? • Methodology for model checking – Asked never to “run” the code, only model check it • Keep the results clean from any testing influence – Code is heavily dependent on time • Given a gross over-approximation of time, where all time-related decisions became nondeterministic • Found all, but one, of the known concurrency errors and some new ones – Better than any of the other teams – Only team that could always produce not just the error but how to get to it! – Also found all the non-concurrency errors • Interesting observations – Abandoned the time abstraction within the first hour for one that is closer to real-time, but might miss errors • It was too hard for them to determine if errors were spurious not knowing the code well enough – Found a number of bugs in the first version, had a slow 2 nd version, and then found all the remaining bugs in the 1 st hour of the 3 rd version • Took them some time to get their framework setup, but once done, they were flying 24 September 2002 © Willem Visser 2002 97

2002 • • Overview Introduction to Model Checking Program Model Checking Case Studies Future 2002 • • Overview Introduction to Model Checking Program Model Checking Case Studies Future of Software Model Checking 24 September 2002 © Willem Visser 2002 98

2002 • The Future of Software Model Checking Abstraction based approaches – Combine object 2002 • The Future of Software Model Checking Abstraction based approaches – Combine object abstractions (e. g. shape analysis) with predicate abstraction – Automation is crucial • Symbolic Execution – Solving structural (object) and numerical constraints – Acceleration techniques (e. g. widening) • Model checking as a companion to testing – Test-case generation by model checking – Runtime monitoring and model checking • Modular model checking for software – Exploiting the interface between components – Interface automata (de Alfaro & Henzinger ) • Environment generation – How to derive a “test-harness” for a system to be model checked • Result representation – Much overlooked, but without this we are nowhere! – “Analysis is necessary, but not sufficient” – Jon Pincus 24 September 2002 © Willem Visser 2002 99