Dynamic Software Testing with Fast Breakpoints 

on IA32 for Java Applications


HOME

SoftTest Project

Related Works

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

University of Pittsburgh - Department of Computer Science

Project Members

Faculty: Bruce R. Childers, Mary Lou Soffa

Graduate Students: Jonathan Misurda

Undergraduate Students: Lidiya Ber

Alumni: Kevin Cammarata, Tom Kane, Madhuri Vemulapalli

Background

The InT3 Project (Instrumentation for Testing, Tracing, & Timing) sets out to create a framework for various software testing techniques through the use of fast breakpoints. The project was started as the Master's Thesis work of Madhuri Vemulapalli. She designed the proof of concept tools using the Jikes RVM as her framework.

Jikes RVM

The Jikes Research Virtual Machine is an open source just-in-time virtual machine created at IBM T.J. Watson Research Center. It was developed to allow for research into areas of VM design and compilation, such as dynamic optimization and garbage collection. The RVM is unique in the fact that it is itself written in Java and is freely modifiable, allowing for the addition of new functionality.

Approach

Our framework allows to dynamically insert and remove fast breakpoints as required by the testing scheme in order to collect the required information with minimal overhead.   Such can be achieved by inserting an initial static breakpoint at the first basic block, which in turn will  dynamically insert the subsequent breakpoints.  

According to our scheme the breakpoint at block1 is removed after gathering the user-specified information and placing breakpoints at block2 and block3.  When the control  proceeds down to block3, the breakpoint is executed, removed, and the original code is executed.  The breakpoint works by jumping to the trampoline, which performs a context switch and calls the testing-specific functional code, f( ).  In branch coverage testing, the functional code would record branch 1->3 as being hit, place breakpoint at block4, and remove itself.  All subsequent  executions of the path would be uninstrumented.