Formal Verification by Model Checking



Similar documents
The Model Checker SPIN

tutorial: hardware and software model checking

Today s Agenda. Automata and Logic. Quiz 4 Temporal Logic. Introduction Buchi Automata Linear Time Logic Summary

Fundamentals of Software Engineering

Model Checking: An Introduction

Software Engineering using Formal Methods

Introduction to SPIN. Acknowledgments. Parts of the slides are based on an earlier lecture by Radu Iosif, Verimag. Ralf Huuck. Features PROMELA/SPIN

INF5140: Specification and Verification of Parallel Systems

Model Checking of Software

Formal Verification of Software

Software Model Checking: Theory and Practice

Introduction to Software Verification

Model Checking II Temporal Logic Model Checking

LTL Model Checking with Logic Based Petri Nets

Testing LTL Formula Translation into Büchi Automata

Software safety - DEF-STAN 00-55

T Reactive Systems: Introduction and Finite State Automata

Software Modeling and Verification

Journal of Mathematics Volume 1, Number 1, Summer 2006 pp

Lecture 9 verifying temporal logic

Automata-Based Verification of Temporal Properties on Running Programs Dimitra Giannakopoulou Klaus Havelund

Combining Software and Hardware Verification Techniques

logic language, static/dynamic models SAT solvers Verified Software Systems 1 How can we model check of a program or system?

Automata-based Verification - I

Algorithmic Software Verification

Introduction to Promela and SPIN. LACL, Université Paris 12

Temporal Logics. Computation Tree Logic

CISC422/853: Formal Methods

Static Program Transformations for Efficient Software Model Checking

A Classification of Model Checking-based Verification Approaches for Software Models

The Course.

Constructing Automata from Temporal Logic Formulas : A Tutorial

Formal verification of contracts for synchronous software components using NuSMV

Formal Verification and Linear-time Model Checking

MODEL CHECKING OF SERVICES WORKFLOW RECONFIGURATION: A PERSPECTIVE ON DEPENDABILITY

Model Checking LTL Properties over C Programs with Bounded Traces

VeriTech - A Framework for Translating among Model Description Notations

Development of dynamically evolving and self-adaptive software. 1. Background

Model Checking based Software Verification

Model checking test models. Author: Kevin de Berk Supervisors: Prof. dr. Wan Fokkink, dr. ir. Machiel van der Bijl

Feature Specification and Automated Conflict Detection

Using Patterns and Composite Propositions to Automate the Generation of Complex LTL

System modeling. Budapest University of Technology and Economics Department of Measurement and Information Systems

Finding Liveness Errors with ACO

On the Modeling and Verification of Security-Aware and Process-Aware Information Systems

Fabio Patrizi DIS Sapienza - University of Rome

2 Temporal Logic Model Checking

Stylianos Basagiannis

Validated Templates for Specification of Complex LTL Formulas

Applying Model Checking to Destructive Testing and Analysis of Software System

Software Model Checking: Theory and Practice

Verification of multiagent systems via ordered binary decision diagrams: an algorithm and its implementation

SPIN Beginners Tutorial

LTL Satisfiability Checking

Software Model Checking Extracting Verification Models from Source Code

Fair Model Checking with Process Counter Abstraction

Finding Liveness Errors with ACO

Specification and Analysis of Contracts Lecture 1 Introduction

Automated Domain-Specific C Verification with mbeddr

Business Process Verification: The Application of Model Checking and Timed Automata

Program Synthesis is a Game

Verifying Multi-threaded C Programs with SPIN

Towards a Framework for Generating Tests to Satisfy Complex Code Coverage in Java Pathfinder

Analysis of Boolean Programs

Institut für Parallele und Verteilte Systeme. Abteilung Anwendersoftware. Universität Stuttgart Universitätsstraße 38 D Stuttgart

Traditional Software Development. Model Requirements and JAVA Programs. Formal Verification & Validation. What is a state?

Introduction to Formal Methods. Các Phương Pháp Hình Thức Cho Phát Triển Phần Mềm

An Overview of the Runtime Verification Tool Java PathExplorer

Verification of Agent Behavioral Models

Software Verification: Infinite-State Model Checking and Static Program

Transcription:

Formal Verification by Model Checking Natasha Sharygina Carnegie Mellon University Guest Lectures at the Analysis of Software Artifacts Class, Spring 2005 1 Outline Lecture 1: Overview of Model Checking Lecture 2: Complexity Reduction Techniques Lecture 3: Software Model Checking Lecture 4: State/Event-based software model checking Lecture 5: Component Substitutability Lecture 6: Model Checking Practicum (Student Reports on the Lab exercises) 2 1

What we have learned so far Model Checking Basic Concepts: Systems are modeled by finite state machines Properties are written in propositional temporal logic Verification procedure is an exhaustive search of the state space of the design Diagnostic counterexamples 3 What we have learned so far (2) Complexity Reduction Techniques: Compositional reasoning (reasoning about parts of the system) Abstraction (elimination of details irrelevant to verification of a property) Symbolic Verification (BDDs represent state transition diagrams more efficiently) Partial Order Reduction (reduction of number of states that must be enumerated) Domain specific reductions (syntactic program transformations) Other (symmetry, cone of influence reduction,.) 4 2

Today s Lecture Various approaches to model checking software 5 Hypothesis Model checking is an algorithmic approach to analysis of finite-state systems Model checking has been originally developed for analysis of hardware designs and communication protocols Model checking algorithms and tools have to be tuned to be applicable to analysis of software 6 3

Application of Model Checking to Hardware Verification Simple data structures are used Systems are modular Mostly finite-state systems System components have well defined interfaces Mostly synchronous execution 7 Application of Model Checking to Software Verification Complex data structures are used - Procedural or OO design Non-finite state systems System components do not have well defined interfaces Complex coordination between SW components Synchronous or asynchronous execution 8 4

Re-design Code Model Checking Software (code verification) 1. Design/Implementation/Testing Model No Error track Model Checker Property OUT of M/T Yes 2. Modeling/Property Specification Finite-state model extraction Simplifications Restrictions 3. Verification Abstractions Divide-and-conquer techniques (when applicable) Other complexity reduction techn. 9 Model Checking Software (code verification) Re-design Code Model Property Limitations: Final (expensive) stage in the program development No Model Checker Yes Consistency problem between code and model Mostly limited to simplified systems Error track OUT of M/T 10 5

Model Checking Software (design verification) Code 4. Code Generation (last stage) Re-design Design Model Testing Tool 1. Executable Design Specifications Abstraction from low-level to high-level operations Formal Model Property 2. Modeling/Property Specification Finite-state model extraction No Error track Model Checker OUT of M/T Yes 3. Verification State space reduction techniques 11 Model Checking Software (design verification) Code Re-design Design Model Testing Tool Advantages: Applied earlier in the design cycle (Earlier bug detection) Formal Model Property Direct translation of informal program into formal syntax (no simplifications) No Error track Model Checker OUT of M/T Yes Separation of concerns: abstraction of control from data Domain-specific property specification 12 6

State-of-the-art Software Model Checking Counterexample-guided abstraction refinement framework (CEGAR) [Clarke et al. 00] - CMU [Kurshan et al. 93] Bell Labs/Cadence [Ball, Rajamani 00] - Microsoft Research 13 CEGAR Actual Program Initial Abstraction Concurrent Boolean Program Verification Model Checker No error or bug found Property holds Counterexample Abstraction refinement [Kurshan et al. 93] [Ball, Rajamani 00] [Clarke et al. 00] Refinement Simulator Spurious counterexample Simulation successful Bug found 14 7

Major Software Model Checkers FormalCheck/xUML (UT Austin, Bell Labs) ComFoRT (CMU/SEI) built on top of MAGIC (CMU) SPIN (JPL/formely Bell Labs) Verisoft (Bell Labs) Bandera (Kansas State) Java PathFinder (NASA Ames) SLAM/Bebop (Microsoft Research) BLAST (Berkeley) CBMC (CMU) 15 Class Presentations SPIN: explicit state LTL model checker ComFoRT: explicit state LTL and ACTL* model checker 16 8

SPIN: LTL Model Checking Properties are expressed in LTL Subset of CTL* of the form: A f where f is a path formula which does not contain any quantifiers The quantifier A is usually omitted G is substituted by (always) F is substituted by (eventually) X is (sometimes) substituted by (next) 17 LTL Formulae Always eventually p: p AGFp in CTL* AG AF p in CTL Always after p there is eventually q: ( p ( q ) ) AG(p Fq) in CTL* AG(p AFq) in CTL Fairness: ( p ) ϕ A((GF p) ϕ) in CTL* Can t express it in CTL 18 9

LTL Model Checking An LTL formula defines a set of traces Check trace containment Traces of the program must be a subset of the traces defined by the LTL formula If a trace of the program is not in such set It violates the property It is a counterexample LTL formulas are universally quantified 19 LTL Model Checking Trace containment can be turned into emptiness checking Negate the formula corresponds to complement the defined set: set( φ ) = set( φ) Subset corresponds to empty intersection: A B A B = 0 20 10

Buchi Automata An LTL formula defines a set of infinite traces Define an automaton which accepts those traces Buchi automata are automata which accept sets of infinite traces 21 Buchi Automata A Buchi automaton is 4-tuple <S,I,δ,F>: S is a set of states I S is a set of initial states δ: S 2 S is a transition relation F S is a set of accepting states We can define a labeling of the states: λ: S 2 L is a labeling function where L is the set of literals. 22 11

Buchi Automata S = { s 0, s 1, s 2 } I = { s 0 } a b true s 0 s 1 s 2 δ = { (s 0, {s 0, s 1 }), (s 1, {s 2 }), (s 2, {s 2 }) } F = { s 2 } λ = { (s 0, {a}), (s 1, {b}), (s 2, {}) } 23 Buchi Automata An infinite trace σ = s 0 s 1 is accepted by a Buchi automaton iff: s 0 I i 0: s i+1 δ(s i ) i 0: j > i: s j F 24 12

Buchi Automata Some properties: Not all non-deterministic Buchi automata have an equivalent deterministic Buchi automata Not all Buchi automata correspond to an LTL formula Every LTL formula corresponds to a Buchi automaton Set of Buchi automata closed under complemention, union, intersection, and composition 25 Buchi Automata What LTL formula does this Buchi automaton corresponds to (if any)? a b true s 0 s 1 s 2 a U b 26 13

LTL Model Checking Generate a Buchi automaton for the negation of the LTL formula to check Compose the Buchi automaton with the automaton corresponding to the system Check emptiness 27 LTL Model Checking Composition: At each step alternate transitions from the system and the Buchi automaton Emptiness: To have an accepted trace: There must be a cycle The cycle must contain an accepting state 28 14

LTL Model Checking Cycle detection Nested DFS Start a second DFS Match the start state in the second DFS Cycle! Second DFS needs to be started at each state? Accepting states only will suffice Each second DFS is independent If started in post-order states need to be visited at most once in the second DFS searches 29 LTL Model Checking procedure DFS(s) visited = visited {s} for each successor s of s if s visited then DFS(s ) if s is accepting then DFS2(s, s ) end if end if end for end procedure 30 15

LTL Model Checking procedure DFS2(s, seed) visited2 = visited2 {s} for each successor s of s if s = seed then return Cycle Detect ; end if if s visited2 then DFS2(s, seed) end if end for end procedure 31 References http://spinroot.com/ Design and Validation of Computer Protocols by Gerard Holzmann The Spin Model Checker by Gerard Holzmann An automata-theoretic approach to automatic program verification, by Moshe Y. Vardi, and Pierre Wolper An analysis of bitstate hashing, by G.J. Holzmann An Improvement in Formal Verification, by G.J. Holzmann and D. Peled Simple on-the-fly automatic verification of linear temporal logic, by Rob Gerth, Doron Peled, Moshe Vardi, and Pierre Wolper A Minimized automaton representation of reachable states, by A. Puri and G.J. Holzmann 32 16

SPIN: The Promela Language Process Algebra An algebraic approach to the study of concurrent processes. Its tools are algebraical languages for the specification of processes and the formulation of statements about them, together with calculi for the verification of these statements. [Van Glabbeek, 1987] Describes the system in a way similar to a programming language 33 Promela Asynchronous composition of independent processes Communication using channels and global variables Non-deterministic choices and interleavings 34 17

An Example mtype = { NONCRITICAL, TRYING, CRITICAL }; show mtype state[2]; proctype process(int id) { beginning: noncritical: state[id] = NONCRITICAL; if :: goto noncritical; :: true; fi; trying: state[id] = TRYING; if :: goto trying; :: true; fi; critical: state[id] = CRITICAL; if :: goto critical; :: true; fi; goto beginning;} init { run process(0); run process(1); } NC T C 35 An Example mtype = { NONCRITICAL, TRYING, CRITICAL }; show mtype state[2]; proctype process(int id) { beginning: noncritical: state[id] = NONCRITICAL; if :: goto noncritical; :: true; fi; trying: state[id] = TRYING; if :: goto trying; :: true; fi; critical: state[id] = CRITICAL; if :: goto critical; :: true; fi; goto beginning;} init { run process(0); run process(1); } NC T C 40 18

Enabled Statements A statement needs to be enabled for the process to be scheduled. bool a, b; proctype p1() { a = true; a & b; a = false; } proctype p2() { b = false; a & b; b = true; } These statements are enabled only if both a and b are true. In this case b is always false and therefore there is a deadlock. init { a = false; b = false; run p1(); run p2(); } 43 Other constructs Do loops do :: count = count + 1; :: count = count - 1; :: (count == 0) -> break od 44 19

Other constructs Do loops Communication over channels proctype sender(chan out) { int x; if ::x=0; ::x=1; fi } out! x; 45 Other constructs Do loops Communication over channels Assertions proctype receiver(chan in) { int value; out? value; assert(value == 0 value == 1) } 46 20

Other constructs Do loops Communication over channels Assertions Atomic Steps int value; proctype increment() { atomic { x = value; x = x + 1; value = x; } } 47 Mutual Exclusion Peterson s solution to the mutual exclusion problem flag 0 =1 turn=0 flag 0 =0 flag 1 == 0 turn == 1 flag 1!= 0 && turn!= 1 Critical Section 57 21

Mutual Exclusion in SPIN bool turn; bool flag[2]; proctype mutex0() { again: flag[0] = 1; turn = 0; (flag[1] == 0 turn == 0); /* critical section */ flag[0] = 0; goto again; } flag 1 == 0 turn == 1 flag 1!= 0 && turn!= 1 flag 0 =1 turn=0 flag 0 =0 Critical Section 66 Mutual Exclusion in SPIN bool turn, flag[2]; Active process: automatically creates instances of processes active [2] proctype user() { assert(_pid == 0 pid == 1); again: flag[_pid] = 1; assert: turn = _pid; Checks that there are only at most two instances with identifiers 0 and 1 (flag[1 - _pid] == 0 turn == 1 - _pid); /* critical section */ _pid: Identifier of the process } flag[_pid] = 0; goto again; 67 22

Mutual Exclusion in SPIN bool turn, flag[2]; byte ncrit; active [2] proctype user() { assert(_pid == 0 pid == 1); again: flag[_pid] = 1; turn = _pid; ncrit: Counts the number of Process in the critical section (flag[1 - _pid] == 0 turn == 1 - _pid); } ncrit++; assert(ncrit == 1); /* critical section */ ncrit--; flag[_pid] = 0; goto again; assert: Checks that there are always at most one process in the critical section 68 bool turn, flag[2]; bool critical[2]; active [2] proctype user() { Mutual Exclusion in SPIN assert(_pid == 0 pid == 1); again: } flag[_pid] = 1; turn = _pid; (flag[1 - _pid] == 0 turn == 1 - _pid); critical[_pid] = 1; /* critical section */ critical[_pid] = 0; flag[_pid] = 0; goto again; LTL Properties: [] (critial[0] critical[1]) [] <> (critical[0]) [] <> (critical[1]) [] (critical[0] -> (critial[0] U (!critical[0] && ((!critical[0] &&!critical[1]) U critical[1])))) [] (critical[1] -> (critial[1] U (!critical[1] && ((!critical[1] &&!critical[0]) U critical[0])))) 69 23