Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction...
Transcript of Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction...
![Page 1: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/1.jpg)
Java PathfinderGeneral Overview and Current General Overview and Current
State of Affairs
Pavel ParizekSchool of Computer Science,
University of Waterloo
Pavel Parizek
![Page 2: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/2.jpg)
Pavel Parizek PLG seminar
Java Pathfinder
• Highly customizable and extensible platform for analysis and verification of Java programsanalysis and verification of Java programs� Primary mechanism: exhaustive state space traversal
• Explicit representation of states (JVM) and transitions (Java code)
• Maintained by NASA Ames Research Center
• Web: http://babelfish.arc.nasa.gov/trac/jpf/
![Page 3: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/3.jpg)
Pavel Parizek PLG seminar
Outline
• Main features of JPF� Supported properties, algorithms, and optimizations� Supported properties, algorithms, and optimizations
• Modular architecture of JPF• Basic principles of internal functioning• Extension points and JPF API• Configuration options and running• Major public extensions• Current projects (GSoC)
![Page 4: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/4.jpg)
Pavel Parizek PLG seminar
Main features of JPF
![Page 5: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/5.jpg)
Pavel Parizek PLG seminar
Usage pattern
![Page 6: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/6.jpg)
Pavel Parizek PLG seminar
JPF stack
![Page 7: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/7.jpg)
Pavel Parizek PLG seminar
Supported properties
• Built-in� Assertion violations� Assertion violations� Uncaught exceptions� Deadlocks� Race conditions
• Custom• Custom� Implemented using JPF’s extension mechanisms
![Page 8: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/8.jpg)
Pavel Parizek PLG seminar
Verification process
• Exhaustive state space traversal� Standard DFS� Standard DFS
• Supported optimizations� Partial order reduction (POR)
� Various search heuristics• maximize thread interleaving, choose-free• maximize thread interleaving, choose-free
� State abstraction (user-defined)� Symmetry reductions
• class loading, heap
![Page 9: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/9.jpg)
Pavel Parizek PLG seminar
Modular architecture of JPF
![Page 10: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/10.jpg)
Pavel Parizek PLG seminar
JPF core
• Java Virtual Machine (JPF VM)� Execution choices (data non-determinism, scheduling)� Execution choices (data non-determinism, scheduling)� Backtracking (restoring of previous states on a path)� State representation and matching
• “Specialized JVM that explores all possible execution paths of a Java program”
• Modular system (built from components)
![Page 11: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/11.jpg)
Pavel Parizek PLG seminar
Architecture of JPF core
![Page 12: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/12.jpg)
Pavel Parizek PLG seminar
Java library classes
• Model classes: object and thread model of JPF� Separated from the underlying host JVM� Separated from the underlying host JVM� Relevant core classes: Thread , Object , Class ,
• Standard classes provided by host JVM� Example: Integer , String , collections (java.util ),
� Exception: classes with native methods� Exception: classes with native methods
![Page 13: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/13.jpg)
Pavel Parizek PLG seminar
Basic principles of internal functioning
![Page 14: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/14.jpg)
Pavel Parizek PLG seminar
On-the-fly state space construction
public Producer extends Thread {void run() {
while (true) {Main.var = ++i;
}
P: start}
}}
public Consumer extends Thread {void run() {
while (true) {i = Main.var;System.out.println(i);
}}
}
P: i++P: var = i
C: start
C: startP: i++P: var = i
}
public class Main {public static int var;
public static void main(...) {(new Producer(var)).start();(new Consumer(var)).start();
}}
P: i++P: var = i
C: i = var
![Page 15: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/15.jpg)
Pavel Parizek PLG seminar
Practical approach to POR
• Goal: elimination of unnecessary thread switches� bytecode instructions with thread-local effect
• Transition boundaries � Scheduling-relevant bytecode instructions (with globally
visible effects)• Example: accessing a shared variable, start of a new thread
• Covers all interleavings of globally visible actions• Covers all interleavings of globally visible actions
• Limitations� Does not look ahead � cannot handle diamond case
![Page 16: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/16.jpg)
Pavel Parizek PLG seminar
Scheduling-relevant instructions
![Page 17: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/17.jpg)
Pavel Parizek PLG seminar
Choice generator (CG)
• Common abstraction of execution choices of all kinds� Original motivation: unification of non-deterministic data selection
and thread schedulingand thread scheduling
• CG object manages the set of explored and unexplored transitions (choices) at each state
![Page 18: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/18.jpg)
Pavel Parizek PLG seminar
Encoding program state
• Current state� Program representation in JPF (data structures)
• Current path� Complete state of the program (JVM) represented by
an integer array• complete image of heap, stacks of all threads, …
� Incremental diffs are stored � most transitions modify only a small part of the stateonly a small part of the state
• Set of all visited states� Hash value � for state matching
![Page 19: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/19.jpg)
Pavel Parizek PLG seminar
Symmetry reductions
• Class loading symmetry� Fixed loading order over all execution paths based on � Fixed loading order over all execution paths based on
the first-time load on some execution path
• Heap symmetry� Canonical addresses of objects are used
• Determined by first-time object allocation by a specific thread • Determined by first-time object allocation by a specific thread at a source code location
![Page 20: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/20.jpg)
Pavel Parizek PLG seminar
How JPF implements state space traversal
![Page 21: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/21.jpg)
Pavel Parizek PLG seminar
Native methods
• JPF supports all bytecode instructions� Custom implementation: for tracking state changes
caused by their execution
• Problem: native methods� State changes cannot be tracked by JPF� Relevant features: file I/O, GUI, networking, …
• Remedy options� Custom implementation in Java � model classes� Delegation to host JVM via the Model-Java Interface
![Page 22: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/22.jpg)
Pavel Parizek PLG seminar
Model-Java Interface (MJI)
• Allows execution of native methods in the host JVM• Similar mechanism to Java-Native interface (JNI)
![Page 23: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/23.jpg)
Pavel Parizek PLG seminar
Remedy for native methods
• Model layer: model classes� Fully observable and backtrackable replacement of � Fully observable and backtrackable replacement of
standard Java class� Part of JPF object model
• Java layer: native peers� Containers for pure Java methods executed instead of � Containers for pure Java methods executed instead of
the intercepted real native methods• Changing program state (model) is possible via internal API
� Executed directly by the host JVM (part of JPF code)
![Page 24: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/24.jpg)
Pavel Parizek PLG seminar
Library abstractions via MJI
• Currently supported features� File I/O + streams (java.io) – partially done� File I/O + streams (java.io) – partially done� Network communication (java.net) – in progress� User interface (java.awt, java.swing) – in progress
![Page 25: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/25.jpg)
Pavel Parizek PLG seminar
Extension points and JPF API
![Page 26: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/26.jpg)
Pavel Parizek PLG seminar
Extension points and JPF API
• Listeners (search, VM)• Custom properties• Custom properties• The Verify API• Bytecode instructions• State management
• Search algorithms� DFS (default), BFS, Simulation, Heuristic search� Several heuristics available in JPF distribution
• Examples: maximize thread interleavings, choose free, …
![Page 27: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/27.jpg)
Pavel Parizek PLG seminar
Listeners
• Basic usage: monitoring � Registered observers are notified about specific events� Registered observers are notified about specific events
• State advanced (transition ended)• Bytecode instruction executed• New thread just started• New object was allocated• (and many other)
• Other ways of usage� Extending program state with custom information
� Forcing termination of transitions at specific points� Custom properties based on monitoring results
![Page 28: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/28.jpg)
Pavel Parizek PLG seminar
SearchListener
• Subject: Search object
• Notification model (for DFS)
• Usage� Monitoring state space traversal
• e.g. construction of the state space graph (visualization)
![Page 29: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/29.jpg)
Pavel Parizek PLG seminar
VMListener
• Subject: JVMobject� Provides access to complete state of the Java program
• Usage� Monitoring execution of Java bytecode instructions
• e.g. monitoring GETFIELD and PUTFIELD instructions for races
� Inspecting the current state of the Java program• e.g. acquiring values of heap object fields, …• e.g. acquiring values of heap object fields, …
� Tracing other JPF VM operations• Examples: thread start, new object allocated, choice selected
� Altering program state and JPF VM behavior• e.g. modifying set of choices for CG and selecting the next one
![Page 30: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/30.jpg)
Pavel Parizek PLG seminar
The Verify API
• Non-deterministic data choiceimport gov.nasa.jpf.jvm.Verify;......boolean b = Verify.getBoolean();if (b) { ... }else { ... }...int x = Verify.getInt(0, 10);// do something with ‘x’
� Supported data types: boolean, int, double
• Search pruning...Verify.ignoreIf(cond);... // search is pruned if the condition is true
![Page 31: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/31.jpg)
Pavel Parizek PLG seminar
Custom bytecode instructions
• Different semantics (non-standard)� Additional runtime checks� Additional runtime checks� Registering custom CGs� Attaching some attributes to data (heap objects)
• Some major extensions use custom instructions� Example: symbolic execution� Example: symbolic execution
![Page 32: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/32.jpg)
Pavel Parizek PLG seminar
State management
• Several components� Serializer: full JVM state � integer array� Serializer: full JVM state � integer array� Backtracker: maintains current path (stack of states)� State set: storage of program states
• Hash value (default) X lossless storage (full state)
• Custom implementations supported• Custom implementations supported� Example: storage of states in a file
• Abstraction: filtering state information� Specific fields and classes (by name)
![Page 33: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/33.jpg)
Pavel Parizek PLG seminar
Configuration options and running
![Page 34: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/34.jpg)
Pavel Parizek PLG seminar
How to configure and run JPF
• Running: several options� Command-line (Ant)� IDE plug-ins (Eclipse, Netbeans)� Embedded in another Java program
• Configuration� Properties (example: search.class = ... )
� Custom modules can introduce their own properties� Several levels
• system, module (core, extension), application, specific JPF run
![Page 35: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/35.jpg)
Pavel Parizek PLG seminar
Output
JavaPathfinder v4.1 - (C) 1999-2007 RIACS/NASA Ames Research Center===================================== system under testapplication: /Users/pcmehlitz/tmp/Racer.java===================================== search started: 5/24/07 12:32 AM <application output><application output>====================================================== error #1 gov.nasa.jpf.jvm.NoUncaughtExceptionsPropertyjava.lang.ArithmeticException:
division by zero at Racer.main(Racer.java:20)====================================================== trace #1…------------------------------------------------------ transition #1 thread: 0gov.nasa.jpf.jvm.choice.ThreadChoiceFromSet {>main,Thread-0} Racer.java:17 : t.start();Racer.java:17 : t.start();Racer.java:19 : doSomething(1000); // (3)Racer.java:6 : try { Thread.sleep(n); } catch (InterruptedException ix) {} [2 insn w/o sources]Racer.java:6 : try { Thread.sleep(n); } catch (InterruptedException ix) {}Racer.java:7 : }Racer.java:20 : int c = 420 / racer.d; // (4) …====================================================== statistics<running time, memory needed, total number of states, …>
![Page 36: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/36.jpg)
Pavel Parizek PLG seminar
Current state of affairs
![Page 37: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/37.jpg)
Pavel Parizek PLG seminar
Major extensions
• Symbolic execution (JPF-SE)• GUI framework (JPF-Shell)• GUI framework (JPF-Shell)• RTSJ and SCJ programs (RTEmbed)• Network applications (Net-IOCache)• UML statecharts model checking• … (and many others)
• IDE support (Eclipse, NetBeans)
![Page 38: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/38.jpg)
Pavel Parizek PLG seminar
Current projects
• Additional library abstractions� java.util.concurrent , java.awt
• Combination of JPF and Junit
• Google Summer of Code (GSoC)� JPF-Inspector, LTL checking, symbolic string analysis,
Java memory model, native collections, …Java memory model, native collections, …� Support for more (Java-based) platforms: Android, X10
• Most active institutions� Nasa AMES, …, UIUC, …, AIST (JP), CUNI/UW, NCSU
![Page 39: Java Pathfinder - PLGolhotak/seminars/PParizek-JPF.pdf · 2010-06-17 · State abstraction (user-defined) Symmetry reductions • class loading, heap. Pavel Parizek PLG seminar Modular](https://reader033.fdocuments.in/reader033/viewer/2022043016/5f38bbca9fd88c29067e141d/html5/thumbnails/39.jpg)
Pavel Parizek PLG seminar
The End