ESF Workshop on Challenges in Java Program Verification
From Monday to Wednesday, the 16-18 of October 2006, I participated in the European Science Foundation's workshop on "Challenges in Java Program Verification." This workshop was graciously organized by Reiner Hähnle from Chalmers University of Technology and Wojciech Mostowski from Radboud University Nijmegen.
This workshop invited around twenty researchers working in Java program verification to come to Nijmegen, NL and give talk about recent work and, more importantly, talk with each other about our successes and failures as individuals and as a field, discuss where we should head next (again, collectively and individually), how we should organize ourselves, etc.
I gave the opening talk on Tuesday at this workshop. My talk was called "Usable Formal Tools" and focused on the non-technical aspects of building a successful verification tool.
On Wednesday afternoon I chaired a panel section called "Past Experiences and Lessons for the Future." The abstract for this panel was as follows:
Many of us actively took part in the development of a verification tool for OO languages. As in all research tools one has to make design and technology decisions that in the end may turn out to be suboptimal. Are there things that we can learn from each other? Which mistakes did we make in designing our verification tool? Which technologies worked and which didn't? Which lessons did we learn for the future?Panel participants, and the tools with which they are associated, were:
- Erik Poll on the Loop tool
- Claude Marché on Krakatoa
- Peter Müller on Jive
- Joe Kiniry on ESC/Java2 (and a bit on Simplify and OBJ3)
- Steffen Schlager on KeY
- Mariela Pavlova on Jack
- Kurt Stenzel on KIV
- Rustan Leino on Boogie (and a bit on ESC/Java)
- Robby on Bandera, Bogor, and Kiasan
- pros
- use someone elses prover on the backend
- use a small sound core logic (about 24 rules)
- cons
- working on a small language subset - use a real language instead
- underestimated the amount of work that is necessary to build a tool
- pros
- it is feasible to define a semantics of a real language (e.g., Java)
- reimplementation of a tool from scratch is sometimes necessary
- cons
- deep embeddings do not work well in practice
- underestimate workload and keeping tool alive and usable
- pros
- use an intermediate language
- develop a rich test suite
- cons
- some aspects of the test suite are weak (completeness, coverage, evolution)
- documentation, particularly no document describing logic
- pros
- using an intermediate language works well
- support multiple provers (via the why tool)
- cons
- cooperating provers is very difficult or not possible
- underestimate work involved in building a tool and have few developer
- pros
- splitting tactics and having a rich UI
- good intermediate representation
- cons
- underspecification of architecture, lack of documentation
- problems in semantics that prevent certain VC possibilities
- pros
- design early and modularly
- bells & whistles for effective sales and use
- cons
- "quick and dirty" leads to dirty - aka don't overdesign
- complex architecture and code
- pros
- use an existing foundation
- formal proof of properties of calculus and semantics
- cons
- good for complex interactive proofs, but bad for simple things
- limited manpower (i.e., no JML support)
- pros
- symbolic execution is an excellent reasoning technique
- JML support is crucial (i.e., use a "real world" language)
- cons
- using provers that use decision procedures does not provide any evidence
- core data structures overly focused on Java
- pros
- community support via growing a community and giving good support
- used real software engineering practices
- cons
- complexity of architecture and evolution, given history
- using real software engineering practices
Labels: conference, talks, verification