310 likes | 319 Views
Efficient Software Model Checking of Data Structure Properties. Paul T. Darga Chandrasekhar Boyapati The University of Michigan. Software Model Checking. Exhaustively test code On all possible schedules On all possible inputs Within a bounded finite domain. Initial State. Transitions.
E N D
Efficient Software Model Checking of Data Structure Properties Paul T. Darga Chandrasekhar Boyapati The University of Michigan
Software Model Checking • Exhaustively test code • On all possible schedules • On all possible inputs • Within a bounded finite domain
Initial State Transitions Software Model Checking State Space Explosion!
State Space Reduction • Many software model checkers • Verisoft, JPF, CMC, SLAM, Blast, Magic, … • Many state space reduction techniques • Partial order reduction • Predicate abstraction • Effective for control-oriented properties • Our work focuses on data-oriented properties
Our Approach: Tree Example • Our system detects that it suffices to check: • Every operation on every tree path • Rather than every operation on every tree • Red-black tree: O(n3) paths, O(nn) trees • Significant speedup to model checking
0,0 1,0 0,1 0,2 2,0 1,1 0,3 3,0 1,2 2,1 4,0 0,4 3,1 1,3 2,2 Glass Box Model Checking dequeue front back enqueue 0,0 1,0 0,1 0,2 2,0 1,1 0,3 3,0 1,2 2,1 4,0 0,4 3,1 1,3 2,2 Traditional (black-box) model checker Glass Box model checker O(n2) transitions O(n) transitions O(n2) states O(n) states
Outline • Introduction to glass box model checking • Challenges • Experimental results • Related work • Future work and conclusion
Glass Box: Challenges • State space organization
State Space Reachability State is disconnected, but we still need to check one of its transitions! • We cannot use reachability through transitions (black-box approach) • Programmers must provide a class invariant • State space: the set of all type-correct states within a specified bound which satisfy the invariant
Singly-linked list: absence of cycles Invariants: Specification java.util.TreeMap 1670 lines of code 20 lines of invariant class LinkedList { static class Node { Node next; Object value; } Node head; boolean repOk() { Set visited = new java.util.HashSet(); for (Node n = head; n != null; n = n.next) { if (!visited.add(n)) returnfalse; } returntrue; } } class LinkedList { static class Node { treeNode next; Object value; } treeNode head; boolean repOk() { // writing invariants is easy and fun! returntrue; } }
Glass Box: Search Algorithm I = states satisfying the invariant S = I × { transitions } while (S is not empty) { t = any transition in S run t verify the post-condition T = { transitions similar to t } S = S – T } How do we represent these sets, and perform operations on them, efficiently?
Glass Box: Challenges • State space organization • Class invariants • State space representation • Binary decision diagrams
Compact representation of exponentially large yet structured sets Perform set operations directly Binary Decision Diagrams root is null left is null right is null right is null root is red root is red root is red left is red left is red left is red right is red right is red
Glass Box: Challenges • State space organization • Class invariants • State space representation • Binary decision diagrams • State space reduction • Monitoring field access • Monitoring information flow • Pruning isomorphic structures • Ensuring soundness
Monitoring Field Access Object pop() { if (head == null) returnnull; Object v = head.value; head = head.next; return v; } t := op = pop ۸ head = n0۸ n0.value = 3 ۸ n0.next = n1۸n1.value = 7 ۸n1.next = n2۸n2.value = 4 ۸n2.next = n3۸n3.value = 2 ۸n3.next = null 3 2 7 4 head n0 n1 n2 n3 T := op = pop ۸head = n0۸ n0.value = 3 ۸ n0.next = n1 T := op = pop ۸head = n0۸ n0.next = n1
Outline • Introduction to glass box model checking • Challenges • Experimental results • Related work • Future work and conclusion
Performance: Red-Black Tree Only 10 seconds to verify over 270 red-black trees!
Performance: Red-Black Tree Only 10 seconds to verify over 270 red-black trees!
Outline • Introduction to glass box model checking • Challenges • Experimental results • Related work • Future work and conclusion
Related Work • Software model checkers • Verisoft [Godefroid] • Java PathFinder [Visser et al] • CMC [Musuvathi, Park, Chou, Engler, Dill] • Bandera [Corbett, Dwyer, Hatcliff, Robby, et al] • Bogor [Dwyer, Hatcliff, Hoosier, Robby] • SLAM [Ball, Majumdar, Millstein, Rajamani] • Blast [Henzinger, Jhala, Majumdar] • Magic [Chaki, Clarke, Groce, Jha, Veith] • XRT [Grieskamp, Tillmann, Shulte] • JCAT [DeMartini, Iosif, Sisto]
Related Work • State space reduction techniques • Abstraction & refinement [SLAM; Blast; Magic] • Partial order reduction [Godefroid; Flanagan] • Heap canonicalization [Musuvathi, Dill; Iosif] • Symmetry reduction [Ip, Dill]
Related Work • Static analysis tools • TVLA [Sagiv, Reps, Wilhelm] • PALE [Moeller, Schwartzbach] • Formal verification using theorem provers • ESC/Java [Nelson et al] • ACL2 [Kaufmann, Moore, et al]
Outline • Introduction to glass box model checking • Challenges • Experimental results • Related work • Future work and conclusion
Future Work • Data structures are just the beginning • Applicable to any system where we can: • Describe the state space using invariants • Transitions depend on a small part of the state • Can significantly speedup model checking