The
Canvas
Project
(Component
ANnotation,
Verification
And
Stuff)
The
Problem
Class
libraries and software components are supposed to make building complex
applications from "parts" easier, make a market for pre-packaged code...
...but
in practice, programming with components is hard, due to inadequate documentation,
lack of source code, and increased API complexity (to allow for customization)
Programmers
often resort to iterative trial-and-error methods to get components to
work in their application
Canvas
Goals
Allow
the component designer to specify component conformance constraints
in a natural (yet still formal) way
Provide
automated certification tools to determine whether the client satisfies
the component's conformance constraints
Initial
focus is on JavaTM libraries and JavaBeansTM
Our
Approach
Component
behavior in Canvas is specified in
a Java-flavored imperative language called Easl.
Easl
retains
much of Java's control flow and declarative machinery, but restricts datatypes
to be object references, collections of objects, and primitive types over
finite domains (e.g., booleans and enumerations). Easl
also adds special requires
and ensures
statements that represent constraints and guarantees, respectively, on
component state at the point where the statements appear. Finally,
Easl
includes
a spawn
statement for creating concurrent threads, and a waituntil
statement to denote synchronization conditions.
We
are currently focusing on analysis techniques based on abstract interpretation;
the
TVLA system
is used as test best for analysis techniques and algorithms.
For
certain classes of conformance constraint specification for which a straightforward
analysis algorithm would have exponential time complexity, we can systematically
derive
efficient polynomial time analyses.
Analysis
Tool
We
currently have an experimental analysis tool for analyzing Java programs.
The tool is based on the SOOT
(McGill) Java bytecode front end. Given an analysis specification,
the tool generates TVLA input that combines the analysis specification
with an abstract representation of the Java bytecodes.
The
tool has been used to analyze a number of small to medium Java programs,
and has discovered several latent bugs.
People
John
Field (IBM Watson)
G.
Ramalingam (IBM Watson)
Mooly
Sagiv (Tel Aviv University)
Alex
Warshavsky (Tel Aviv University)
Resources
A
presentation
describing some of our techniques for deriving efficient analyses and initial
results.
An IBM
Technical Report
describing our techniques;
this paper focuses on applications of our technique to analysis of the
Concurrent Modification Exception of JavaTM
2 collections.
Last modified 29 October 2001.
Contact: jfield@watson.ibm.com |