200 likes | 213 Views
This article discusses the integration of model checking and procedural languages in software development, focusing on the benefits and challenges. It also explores the use of model-based tools like MATLAB for NASA projects and introduces upcoming advancements in model-based development.
E N D
Integrating Model Checking and Procedural Languages (FI03) Tim Menzies West Virginia Universitytim@menzies.us David Owen West Virginia University drobo75@hotmail.com
Model-based tools (MATLAB) for NASA projects STEREO= “solar terrestrial relations observatory” studies 3D structure of coronal mass ejections GLAST= “gamma ray large area space telescope” studies high-energy objects
Coming soon to softwarenear you: model-baseddevelopment Rhapsody from I-Logix Rose Real-Time from Rational Esterel Simulink/ Stateflow Stanley/ Livingston But checking these is hard No longer testing procedural software Test “properties”, not “structure” Issues: Hard when nondeterministic Checking properties on all pathways= HARD (NP-hard; i.e. O(2N) When complete search is too slow Will stochastic search do?
Analysis Testing Visualization Prototyping Specification Model Code Model-Based Development
Why model-based development? Source: Esterel Technologies - 37.5 % - 25 % - 75 % - 50 %
Bandera, JPF: Auto-extract from JAVA Autonoma compiler Dwyer’s temporal logic patterns Random sampling of possible states Costs: write, run, rewrite • Write • System model • Mathematical abstraction of program • Properties model • Temporal logic description of key requirements • Negate, search for counter-examples • PhD-level mathematical expertise • Run • Explore all pathways • Exponential time • Rewrite • Theory too big • Use some abstraction to shrink theory transitions to P-states occur at most 2 times between Q and R: []((Q & <>R) -> ((!P & !R) U (R | ((P & !R) U (R | ((!P & !R) U (R | ((P & !R) U (R | (!P U R))))))))))
Random vs complete search Animation by Bart Selman
Source: IJCAI-01 tutorial Gomes, Hogg, Walsh, Zhang
OR-Nodes White NAYO NO-EdgesDotted LURCH: random search of nondeterministic FSM as NAYOs NAYO graph = <V+,E+> V= and | or; E= yes | no for (each FSM f) for (each state) make an OR-node; draw NO-edges to all other states in f ; for (each transition) make an AND-node a; draw YES-edges: from current (state) to a, from inputs to a, from a to outputs, and from a to next (state); FSM B2
LURCH and “C” enum { UNDEF, X, O } turn = X; int x_turn() { if (t != X) return FALSE; t = UNDEF; return TRUE; } int o_turn() { if (t != O) return FALSE; t = UNDEF; return TRUE; } %% s1_1-blank; (x_turn()); {t = O;}; s1_1-X; s1_1-blank; (o_turn()); {t = X;}; s1_1-O; s1_2-X; s1_2-blank; (x_turn()); {t = O;}; s1_2-X; s1_2-blank; (o_turn()); {t = X;}; s1_2-O; s2_1-blank; (x_turn()); {t = O;}; s2_1-X; s2_1-blank; (o_turn()); {t = X;}; s2_1-O; s2_2-O; s2_2-blank; (x_turn()); {t = O;}; s2_2-X; s2_2-blank; (o_turn()); {t = X;}; s2_2-O; no-win; s1_1-X,s1_2-X; -; win; no-win; s2_1-X,s2_2-X; -; win; no-win; s1_1-X,s2_1-X; -; win; no-win; s1_2-X,s2_2-X; -; win; no-win; s1_1-X,s2_2-X; -; win; no-win; s1_2-X,s2_1-X; -; win; no-win; s1_1-O,s1_2-O; -; win; no-win; s2_1-O,s2_2-O; -; win; no-win; s1_1-O,s2_1-O; -; win; no-win; s1_2-O,s2_2-O; -; win; no-win; s1_1-O,s2_2-O; -; win; no-win; s1_2-O,s2_1-O; -; win;
NAYO search = NP-hard A solution—a DAG ofYES-edges connectingonly compatible (no NO-edges) nodes—can beverified in polynomial time. NAYO Search ∈ NP This NAYO represents the SAT query 3SAT ≤P NAYO Search
Machines with local states Machines= variables with N possible assignments Global state: an assignment to all variables “Global state path”: list of global states path[i] “earlier” than path[j] i < j. 2 ignore 1 frontier Since NP-hard, try stochastic • “Thrash” • Explore transitions in random order • “Frontier”: • Reachable local states that contradict local states found earlier • Asychronous mode: “next” when |fronter|=1 • Synchronous model: “next” when no new local states found • Inputs to path[i] are • FIRST: frontier [i -1] • THEN :reached[i -1] • minus local states that contradict frontier
“Looping” and “Saturation” • Inter- iteration: • global state hashes in any iteration • accumulates over many iterations • Used to detect “saturation” • LURCH stops on “saturation” • stop if less than X% new global states seen in this iteration • lurch –p 0.05 • LURCH “iterates” • One iteration= one global state path • Default # of iterations: 500 • lurch –I 500 • Internally: • each global state hashed to a 32-bit int • Intra- iteration: • keeps hashes found in this iteration • cleared after each iteration • “Collision”: • same global state reached again • checked against inter-iteration memory • “Loop”: • Too many collisions • max collisions default = 10 • lurch –c 10
Ram (MB) spin smv lurch super trace % errors spin smv lurch Tic-tac-toe board size: 2..15 Some LURCHresults spin lurch dining philosophers spin lurch nqueens n=: 4..14
NuSMV Lurch (5 runs) Mats HeimdahlUMN Jimin GaUMN • Flight Guidance System: • RSML-e model from Rockwell Collins Inc. • Pitch and Roll commands, complex mode logic • Convert to LURCH,SMV • Find errors in using historical records that SMV would detect • Compare SMV, LURCH memory (MB) Runtime (secs) • Usually, finds what SMV finds • Often, much faster • Often, uses less memory • Sometimes, (8/40) random search failed • Further work: tunings; larger sample size
Use straight symbolic model checking for rigorous verification for all cases. Ricky Butler NASA Langley Charles Pecheur RIACS,ARC When not to LURCH • When 100% assurance is essential • When other, more complete methods, work • But if the choice is LURCH vs “nothing at all” • Considering LURCH-ing
Linking LURCH to procedures (method #1: spiderweb) • Tiny formal model for the interfaces • Large procedural systems (in “C”) • Execution= traversal FSMs • Call “C” functions as transition side-effects • Advantage: • Usability: most NASA programmers code in “C” (or ADA)
Hyrbid Model (e.g. MATLAB) Lurch Model Numeric part (e.g. Simulkink) C Code Part Discrete part (e.g. Stateflow) Finite-State Machine Part Linking LURCH to procedures (method #2: MATLAB) enum { UNDEF, X, O } turn = X; int x_turn() { if (t != X) return FALSE; t = UNDEF; return TRUE;} int o_turn() { if (t != O) return FALSE; t = UNDEF; return TRUE;} %% s1_1-blank; (x_turn()); {t = O;}; s1_1-X; s1_1-blank; (o_turn()); {t = X;}; s1_1-O; s1_2-X; s1_2-blank; (x_turn()); {t = O;}; s1_2-X; s1_2-blank; (o_turn()); {t = X;}; s1_2-O; s2_1-blank; (x_turn()); {t = O;}; s2_1-X; s2_1-blank; (o_turn()); {t = X;}; s2_1-O; s2_2-O; s2_2-blank; (x_turn()); {t = O;}; s2_2-X; s2_2-blank; (o_turn()); {t = X;}; s2_2-O;
Property (Java) bytecode Counter Example MC JVM DFS search Commercial JVM Yes Program (Java) bytecode Linking LURCH to procedures (method #3: JPF) • NASA’s engineering for complex systems • JAVA pathfinder • Runtime monitoring of JAVA • Or C++ translated to JAVA (automatically) • Used for (e.g.) test case generation or detection of livelocks Is LURCH a better search strategy than depth first search? C++