Bandera: Extracting
Finite-state Models from
Java Source Code
James C. Corbett (Hawai’i)
Matthew B. Dwyer, John Hatcliff, Shawn Laubach,
Corina S. Păsăreanu, Robby, Hongjun Zheng (KSU)
Presented by Christian Almazan
18 November 2003 (CMSC 631)
Model Checking in One Slide
Finite-State Model
Temporal Logic Formula
• Linear Temporal Logic (LTL)
• Computation Tree Logic (CTL)
Model Checker
• SPIN
• dSPIN
• SMV
•…
Verified
Counter-Example
Automatic specification verification
Covers all possible paths in the model
Popular in hardware and protocol verification
Difficulty in Bringing
Model Checking to Software
State-Explosion Problem
Model Construction Problem
Development in a general-purpose language
Verification tools use an specification language
Requirement Specification Problem
States increase exponentially as program size grows
Specification languages tend to be mathematical
Hard to use, read, debug, very lengthy
Output Interpretation Problem
Counter-example long and complex
Hard to map directly to source code
Problems in Previous Efforts
Monolithic Approach
Source Code Verifier Input Language
Model checker for a specific language (Erlang)
Difficult to place newer model checking techniques
Translates program directly from source code
JCAT or Java PathFinder to PROMELA for SPIN
Program Size Increases = Exponential State Growth
Combined Problems
Keeps developers tied to one technology
Limited support for control and data abstraction
Overcoming Obstacles:
Bandera
Use proven model checkers
Automated transformations
Compacting number of states
Use individual models for each property
Design for extensibility
SPIN, dSPIN, Java PathFinder
Build individual components
Create a friendly environment
Familiar, uniform, specifications easy to learn
Leveraged for testing, debugging, and simulation
Bandera Components
Program Infrastructure
Built on top of the Soot compiler framework
Uses control-flow graph language Jimple
Language used by all middleware components
Java-to-Jimple-to-Java Compiler (JJJC)
Easily use internal tools and return Java code
Allows model checker counter-examples to be
mapped back into original Java source code
Property Specification
Bandera Specification Language (BSL)
Collection of temporal specification patterns in English
Parameterized macros LTL or CTL
Defined in source code directly using Javadoc
Not mathematical like LTL or CTL
Bounded Buffer Specification
If a buffer becomes full, it will eventually become non-full.
/**
* @observable
*
EXP Full(this): (head == tail);
*
*
FullToNonFull: forall[b:BoundedBuffer];
*
{!Full(b)} responds to {Full(b)} globally
*/
class BoundedBuffer {
...
}
Static Analysis
Bandera Object Flow Analysis (BOFA)
Associates a set of tokens { t1, …, tn } for a
particular expression e.
Optimizations: data/control analysis
Statically collects information about objects that may
flow into each program expression at runtime
ti is a pair (C,s): C is a class name and s is where
object is created
Similar to “points to” analysis for imperative
languages and “closure analysis” used for
functional programming languages
Slicing
In Property
Relevant
Given program P and slicing criterion based
on the observables in the specification…
Does program dependence-based slicing to get
a reduced version of P
dependences: data, control, interference, ready, wait
backwards slicing
Effectiveness based on structure of program
Abstract Interpretation
Further reductions through data abstraction
Useful when specification does not need
concrete values, but only properties of values
Developers aid abstraction libraries: Bandera
Abstraction Specification Library (BASL)
Utilizes the PVS theorem prover
Examples
integers to signs: { positive, zero, negative }
vector items: { ItemInVector, ItemNotInVector }
Back End Model Generation
Bandera Intermediate Representation language
(BIR)
Jimple-BIR: BIR Constructor
Used between Bandera components and model
checker input languages
Model checker writers only need to write a
translator from BIR to their input language
BIR contains higher-level constructs to model
Java code more efficiently
locks, threads, references, heap
Bandera Components
Using Bandera
Launch the Bandera User Interface (BUI) from
the command line
Future runs: save which components you want
to use in session files
Counter-Example: Overview
Counter-example with a thousand states?!?!
Bandera provides debugger-like features:
map states to source code
program tracing
create checkpoints
keep track of variables and objects
UML-like object displays
lock graphs
Counter-Example:
Program Tracing
Counter-Example:
Lock Graph
Counter-Example:
Object Viewer
Mandatory Performance Slide
Problem Extract Check
Check
Time (s) Time (s) Result
States
b, r1, n
24
2674
true
7338120
b, r1, s
13
4
true
3478
b, r1, a
15
4
true
895
b, r2, s
13
56
true
528059
b, r2, a
16
11
true
27519
b, p1, s
13
4
true
2507
b, p1, a
15
4
true
331
d, r1, s
13
3
false
88
d, r1, a
15
2
false
17
Threaded Pipeline
b: basic
d: defective variant
r: response property
p: precedence property
n: no reductions
s: slicing
a: slicing + data abstraction
When to Use Model Checking
Control-related properties
Container objects
assertions
pre- and post-conditions
simple data invariants
stacks
queues
Verifying concurrent behavior
Necessity for counter-examples
Automatic property verification of source code
Analysis Not Appropriate for
Model Checking
Data-related properties
Verification of sorting algorithms
Use other formal methods instead (theorem proving)
Where static dataflow analysis is better
array-bounds errors
buffer overruns
null-pointer de-referencing
The Future of Bandera
Bandera 0.3b2
Bandera 1.0
Summer 2003
Summer 2004
No more command line startup
Collection of plug-ins for the Eclipse IDE
All features re-deigned, re-implemented, re-done
Future of Model Checking?: Bogor (KSU)
Forget supporting other model checkers in Bandera
Bogor is a big step in model checking?
Links and Related Work
Try Me!
http://bandera.projects.cis.ksu.edu/
Visit Citeseer for abstraction and slicing papers
Model Checkers: SPIN, dSPIN, JPF
Source Code Translators: JPF, JCAT
Many More! Use Google!
Questions?
Learn anything from this talk or the class?
Would you use model checking? If so, when?
Do you like the push for the original Bandera?
Using only Eclipse a good idea?
Why stop supporting other model checkers?
Support their own tool Bogor?
Too time consuming writing BIR translators?
A dream writing BIR, universal language?
© Copyright 2026 Paperzz