JPF workshop '08 schedule

The first day, we plan to start with overview talks, and then proceed to presentations of various topics about ongoing JPF projects. Talks are mostly ~30 min, and we allocate them in 45 min slots so that there is plenty of room for discussions. We expect the audience to be small enough to keep things informal and on-demand, so the schedule might change. This is the overview and applications day. Based on the preceeding talks, at the end of it we will decide about the Q&A sessions for the next day.

For the second day, we want to do three things:

  1. focus on the symbolic execution topics (this is the hotspot of this years workshop)
  2. have talks that broaden the scope beyond JPF and Java
  3. have hands-on sessions about on-demand topics (i.e. JPF introduction, listeners vs. bytecode factories etc.)

If there is enough interest, we can also split up sessions, e.g. to do JPF introduction and project specific discussions in separate tracks

Thursday, May 1st
Title Presenter Time
Welcome, Roadmap and the 360° Perspective Peter Mehlitz, PSGS/NASA Ames
9:00am - 9:30am

A quick roadmap of the next two days, followed by a 10,000mi overview of what happened during the last year, what is going on right now, and what will drive JPF's development in the forseeable future.

It's been 3 years now since JPF has been open sourced, so we will reflect a bit on what has been achieved, and what has yet to come. There always has been a struggle about what programs to check with JPF - models or Java production code. The jury stayed out for so long that it finally became obsolete: we do both. We will talk about this both on the basis of JPF's design, and a classification of JPF application types that are:

  • JPF unaware
  • JPF enabled
  • JPF dependent

For each of these categories, we will highlight the strengths and needs of JPF.

Downloadable presentation material:
Tales from all Corners of the Realm Peter Mehlitz, PSGS/NASA Ames 9:30am - 10:00am

In this talk, we will cover major infrastructure developments and examples for all three of the aforementioned application types, namely:

  • the UML statechart model checking framework (JPF extensions / dependent apps)
  • the generic Attribute System (JPF core / independent apps)
  • Bytecode Factories to change execution semantics (JPF core / independent apps)
  • the extensible Reporting System to produce structured output (JPF core)
  • using Java annotations for JPF test specs and programming-by-contract support (JPF aware apps)

There are two intentions for this talk: (1) present new extension mechanisms and potential examples, (2) confuse the audience with a wild hodgepodge of topics. In fact, (2) is what puts the classification of the first talk to test, so that we never get lost in the realm of JPF (and the following talks).

Downloadable presentation material:
break
Java PathFinder and Google's Summer of Code John Penix, Google 10:15am - 11:00am

Google's Summer of Code program provides funding for students to spend their summer working on open-source software. This year, Java PathFinder applied and was one of 175 projects accepted into the program. I'll provide an overview of the goals of GSoC and how it works. Then I'll briefly present the students we selected and the projects they will be working on this summer.


Optimizing Generation of Object Graphs in Java PathFinder Sarfraz Khurshid, University of Texas 11:05am - 11:50am

Java PathFinder (JPF) was used to generate object graphs as test inputs for object-oriented programs. Specifically, JPF was used as an implementation engine for the Korat algorithm. Korat takes two inputsÑa Java predicate that encodes properties of desired object graphs and a bound on the size of the graphÑand generates all graphs (within the given bound) that satisfy the encoded properties.

This talk presents our results on speeding up Korat search in JPF. The experiments on ten data structure subjects show that our modifications of JPF reduce the search time by over an order of magnitude.

Joint work with Milos Gligoric, Tihomir Gvero, Steven Lauterburg, and Darko Marinov

Downloadable presentation material:
lunch-break (~noon - 1pm)
State Extensions for Java PathFinder Darko Marinov, University of Illinois at Urbana-Champaign 1:00pm - 1:45pm

Java PathFinder (JPF) is an explicit-state model checker for Java programs. JPF implements a backtrackable Java Virtual Machine (JVM) that provides non-deterministic choices and control over thread scheduling. JPF is itself implemented in Java and runs on top of a host JVM. JPF represents the JVM state of the program being checked and performs three main operations on this state representation: bytecode execution, state backtracking, and state comparison.

This talk summarizes four extensions that we have developed to the JPF state representation and operations. One extension provides a new functionality to JPF, and three extensions improve performance of JPF in various scenarios. Some of our code has already been included in publicly available JPF.

Joint work with Tihomir Gvero, Milos Gligoric, Steven Lauterburg, Marcelo d'Amorim, and Sarfraz Khurshid

Downloadable presentation material:
Utilizing JPF for Multi-Agent Verification Berndt Farwer, University of Durham, UK 1:50pm - 2:35pm

As multi-agent systems become more and more widely used, a vast array of different agent programming languages have emerged. The use in increasingly complex and critical areas leads to a need to analyse comprehensively the behaviour of such systems. The Agent Infrastructure Layer (AIL) is a Java toolkit that allows multi-agent programs written in many BDI languages to be verified in a uniform framework. For verification we use a customised version of JPF. Agent JPF (AJPF) uses a property specification languages based on LTL and enriched by agent-specific modalities.

Downloadable presentation material:
break
A Framework for Temporal Logic Model Checking of Web Applications Using JPF Mukul Prasad, Fujitsu 2:50pm - 3:35pm

We present a framework for easy and precise capture of temporal logic requirements in Web Applications using a novel template-based specification language. The framework includes automatic monitor generation from the requirement specification as well as a middleware to automatically model check strong heap properties by interfacing this monitor to the JPF JVM heap


Environment Generation for Model Checking Web Applications Oksana Tkachuk, Fujitsu 3:40pm - 4:15pm

Formal verification techniques usually work for closed homogeneous non-distributed applications. For example, Java model checkers such as JPF work for Java programs that are ready to run on a single JVM. However, web applications are usually comprised of artifacts written in many languages (e.g., Java, JavaScript, HTML, XML). They are to be deployed in a distributed environment and to interact with users through a web browser. To apply JPF to web applications, all non-Java components need to be represented in Java. In addition, the distributed nature of a web application needs to be dealt with so that the resulting Java program is non-distributed but preserves relevant, to the properties being checked, behaviors of the original application. In this work, we present environment generation for web applications, which transforms open heterogeneous distributed web applications, mainly written in Java, into closed homogeneous non-distributed Java programs, ready to be analyzed by JPF.


Wrap Up and Discussion of Agenda for 2nd day 4:20pm -
Friday, May 2nd
Title Presenter Time
Efficient Symbolic Execution using Context-Sensitive Relevancy Analysis Indradeep Gosh, Fujitsu 9:00am - 9:45am

Whole program analysis through symbolic execution can be powerful but computationally intensive. In this paper we present a technique whereby static analysis is used to help in efficiently transforming a Java program for symbolic execution. First, a context-sensitive relevancy analysis algorithm is utilized to pin-point locations in the program where symbolic values can flow into. This information is utilized by a code instrumenter that transforms only the relevant parts of the Java program with symbolic constructs. When this transformed program is run through a state-based model checker that explores possible program paths, all possible data values on symbolic variables are examined through a decision procedure solver or through an FSM library in case of symbolic strings. Program requirements are checked through assertions in the program. Experiments demonstrate that this technique can greatly improve the performance of the symbolic execution engine over a simple technique that blindly instruments the whole program.


Symbolic Execution of Java bytecodes Corina Pasareanu, PSGS/NASA Ames 9:50am - 10:35am

We describe an approach to testing complex safety critical software that combines unit-level symbolic execution and system-level concrete execution for generating test cases that satisfy user-specified testing criteria. We have developed a symbolic execution framework that implements a non-standard bytecode interpreter on top of the Java PathFinder model checking tool. The framework propagates the symbolic information via attributes associated with the program data. Furthermore, we describe two techniques that use system-level concrete program executions to gather information about a unit's input to improve the precision of the unit-level test case generation. We applied our approach to testing a prototype NASA flight software component. Our analysis helped discover a serious bug that resulted in design changes to the software. Although we give our presentation in the context of a NASA project, we believe that our work is relevant for other critical systems that require thorough testing

Downloadable presentation material:
break
Intelligent automatic test pattern generation for C-based hardware design descriptions through combined use of concrete and symbolic simulations Prof. Masahiro Fujita, University of Tokyo 10:50am - 11:35am

We present techniques and their tool implementation that target verification/debugging processes on C or C-like language (such as SpecC/SystemC language) descriptions for hardware systems. Both concrete value simulator (normal simulator) and symbolic simulator are integrated as a single tool so that test patterns that satisfy user-specific constraints can be efficiently generated. The implementation is based on an extended system dependence graph so that descriptions in various similar languages can also be processed. The constraints that users can specify include starting points, ending points, and intermediate points in the descriptions with conditions on variables. The goal is to come up with shorter simulation traces which illustrate possible bugs. The generated traces will be the starting points for bounded model checking tools, such as SPIN or JPF. Some preliminary experimental results are presented. We also discuss an extension of our method to JAVA programs. Since SpecC has notions of structural hierarchy, its associated techniques may be able to be applied to JAVA programs.

Downloadable presentation material:
Verification of C++ Programs Sarah Thompson, RIACS/NASA Ames 11:40am - 12:15pm

The MCP model checker allows C and C++ programs to be exhaustively analyzed for a variety of failure modes, particularly those related to concurrency. MCP is an explicit-state model checker that seeks to provide JPF-like capabilities with respect to C and C++ rather than Java.

We also present a technique based upon partial evaluation and constraint solving that makes it possible to automatically generate test cases for C++ code that are guaranteed to meet specified coverage criteria. An example is given based upon the Ares/Orion Onboard Abort Executive Flight Rule Checker.


lunch break (~12:15pm - 1:15pm)
On Demand hands-on session: JPF Introduction David Bushnell, RIACS/NASA Ames 1:15pm - 2:00pm

This session will provide an introduction of how to use JPF. While JPF can be seen as a replacement for a normal JVM (i.e. a substitute for the java command), it has a huge number of options (that require some knowledge about JPF's basic design), and in fact comes with it's own, open configuration mechanism. To say the least, this can be confusing for new users. We will tame this beast by giving a quick overview of JPF's major components, followed by a number of standard examples, showing how to configure searches, properties, reports and more.

Downloadable presentation material:
Wrap Up - 3:30pm