370 likes | 389 Views
Explore modular verification methods, side-effects analysis, and environment modeling for efficient program model checking. Learn about breaking systems into modules, detecting side-effects, and optimizing verification processes.
E N D
Adapting Side-Effects Analysis for Modular Program Model Checking M.S. Defense Oksana Tkachuk Major Professor: Matthew Dwyer Support US National Science Foundation (NSF CISE/SEL) US Department of Defense Advanced Research Projects Agency (DARPA/IXO PCES) US Army Research Office (ARO CIP/SW)
Software Model Checking • Problems • State space explosion due to large data domains • Solutions • Reduction • Abstraction • Modular Verification
Modular Verification Unit Unit • Break the entire system into modules and verify one at a time. Module under analysis is called unit • Unit is not self-executable system, need to model environment Code Base
Environment Generation Problem • In OO (Java) systems, boundaries and interactions between unit and environment are complex • Control effects: invoking of methods • Data effects: passing data and modifying data Unit • Locking, exceptions, global references • Hard to identify interaction points Code Base
Solutions in Bandera Environment Generator (BEG) • Finds points of interaction (unit interface) • Identifies environment classes that directly interact with the unit • Cuts away classes that don’t directly interact with the unit • Generates models for the remaining classes Unit Code Base
Environment Models • Universal environments • Safe but impractical • Environment assumptions may be used to generate more precise environments • User supplied • Automatically extracted from environment implementation using static analysis techniques
Modular Verification Drivers Unit Stubs Java + modeling primitives Environment classes are broken into • Active classes hold a thread of control (drivers) • Passive classes (stubs) + Unit Properties Java Model Checker Closed Unit Code Base
Current State of Tool Support • Generation of universal stubs and drivers • Generation of drivers from • assumptions (LTL,Regular Expressions) • future work: customized control flow analysis • Generation of stubs from • assumptions (Java-like exprs/assignments) • static analysis results • side-effects analysis to calculate data effects • future work: control effects, safe locks
In This Talk… • Identifying environment data effects using a customized side-effects analysis • Identifying the unit • Identifying environment • Analyzing environment • Modeling environment from analysis results
Identifying the unit/environment Unit Stubs • The unit is user defined based on properties to be checked • BEG scans the unit for external references that drive generation of environment classes
Analyzing Environment • Staged Analysis • Scope-based analysis to eliminate methods that can’t side-effects the unit data • Points-to analysis to approximate objects pointed to by a reference variable in store statements (l.f = r, l[i]=r) • Side-Effects analysis to detect side-effects on the unit data through store statements
Detecting Independent Methods Unit Stubs • BEG builds a call graph for environment methods immediately called from unit Call Graph • Excluding the methods that can’t effect unit data based on scope analysis
Side Effects Analysis • Traditional side-effects analyses are designed to calculate the set of memory locations that may be modified by method execution • Do not approximate the values that are assigned in a store statement (l.f = r, l[i]=r) • Do not distinguish between unit and environment locations • Are usually designed to be fast rather than precise
BEG Side-Effects • Tracks side-effects to unit locations, ignores side-effects to environment locations • Tracks the value on the right hand side of side effecting statements (l.f = r, l[i] = r) • Increases precision • Flow and context-sensitivity (parameterized) • Access-path based with user controlled k-limiting • Tracking type and reachabilty of unit locations • Calculating must side-effects • Incorporating return sensitivity
Example class Node { Node next; Data data; … } class … { … void m(Node n, Data d) { n.next.next.data = d; } } t = n.next; t = t.next; t.data = d;
Assignments through References n.next.next.data = d; n d t = n.next; t = t.next; t.data = d; next // data // t
Assignments through References n.next.next.data = d; n d t = n.next; t = t.next; t.data = d; next // data // t
Assignments through References n.next.next.data = d; n d t = n.next; t = t.next; t.data = d; next // data // t
Assignments through References n.next.next.data = d; n d t = n.next; t = t.next; t.data = d; next // data // t
1-limited Analysis n.next.next.data = d; n d t = n.next; t = t.next; t.data = d; next // data // t
1-limited Analysis n.next.next.data = d; n d t = n.next; t = t.next; t.data = d; next // data // t
1-limited Analysis with Reachability n.next.next.data = d; n t = n.next; t = t.next; t.data = d; d next // data // t
1-limited Analysis with Reachability n.next.next.data = d; n t = n.next; t = t.next; t.data = d; d next // data // t
Abstract Access Paths • Roots: static fields, formal parameters, new instances • We restrict the tracking of access paths through unit fields • The language of abstract access paths
Extension Operator r r root root l=r.f ) f f l l ? r!, l!.f ) r!
Extension Operator r r root root l=r.f ) f f l l
Prefixing Operator arg arg root p’ ret’ ’(p’) p’ ret’ ’(p’) l p’ arg root l = C.m’(arg) return ret’ arg
Prefixing Operator arg root p’ ret’ ’(p’) l
Prefixing Operator arg root p’ ret’ ’(p’) l denote
Data Flow Frameworks • Join semi-lattice L • Partial ordering v • Merge operator t • Least element ? • Flow, initial point and value • Function Space F of monotone functions over lattice • Mapping from labels to transfer functions f in F
Modeling Environment void m(Node n, Data d) { n.next.next.data = d; } • Example code • Analysis summary • Generated model void m(Node param1, Data param2) { if(Bandera.choose()) Bandera.chooseReachable(param1.next,”Data”) = param2; }
Examples and Experience • Container Examples • Identified container properties and how to guide the analysis to preserve such properties in the environment • Replicated Workers • Found a deadlock • Autopilot • Identified mode confusion scenario
Related Work • Side-effects analysis [Landi & Ryder] • Parameterized points-to analysis [Liang & Harrold] • Closing open systems [Godefroid] • Generation of environment data [Stoller] • Environment assumption generation [Giannakopoulou et al.]
Limitations and Future Work • Assumptions • Atomicity of environment methods • Lack of divergence, indefinite blocking, and lock acquisition in the environment • Designing/reusing analyses to discharge the above assumptions • Designing/reusing analyses for drivers • Integration with Bandera and Bogor • Exploiting richer specifications (e.g., JML)
Summary • Overview of BEG capabilities • Presentation of • Side-effects analysis • Environment modeling strategies • BEG work is ongoing • Will be included in the upcoming Bandera release http://beg.projects.cis.ksu.edu