This page is maintained for archival purposes only. For current information please visit http://prolangs.cs.vt.edu/.
Areas of Interest
The PROLANGS group does research in the area of static and dynamic analysis of object-oriented programs. Past research focused on analysis of pointers and side effects in C programs, semantic analysis for evolving large software systems, and development of new analyses for object-oriented programming languages. Current work focuses on practical and efficient analyses for object-oriented languages (C++, Java) and their use in the testing and debugging of Java programs. Specific current projects include semantic change impact analysis for Java programs within an integrated development environment (Eclipse), techniques for using change impact information for finding fault-inducing changes in Java codes, compiler-directed testing of exception handling code in server applications, and specialized static+dynamic analyses for performance understanding of framework-based systems.
Active Projects
Dila - Dynamic Load-time Instrumentation Library
Dila is a dynamic load-time instrumentation library developed by our group in cooperation with IBM Research. Dila uses customized class loading for instrumenting the byte code of a program before it is executed. During the execution of an instrumented program dynamic program representations, such as call graphs, are created, which can be used for various program analyses. Dila is completely written in Java and uses the byte code manipulation toolkit Shrike from the WALA project. It has been built as a library for online analysis tools with a particular focus on performance. The library is licensed under the Eclipse Public License (EPL).
Chianti
During program maintenance, a programmer may make changes that enhance program functionality or fix bugs in code. Then, she usually will run regression tests to prevent invalidation of previously tested functionality. If a test fails unexpectedly, she needs to explore her edit to find the failure-inducing changes for that test. Chianti is an Eclipse plug-in that assists the process. Chianti is a tool that performs semantic chance impact analysis to allow the programmer to examine those parts of the edit that may have affected the failing test. Chianti then builds compilable intermediate versions of the program, by adding programmer-selected partial edits to the original code, augmenting the selection as necessary to ensure compilation. The programmer can re-execute the test on the intermediate version in order to locate the exact reasons for failure, by concentrating on the specific changes that were applied.
Elude
Coming soon.
Analysis-based Process Enforcement for Team-oriented Software Development
The new goal of the next generation of integrated development environments (IDEs) is utilized guidance for development processes. Such IDEs, like IBM's Team Concert, try both to guide developers in each process activity and to enforce a specific result, e.g., all existing tests have to pass before applied changes can be committed to the team repository. In this project, we're going to integrate deep program analysis techniques, such as change impact analysis, with such tool support to identify those changes that do not break any test and, thus can safely committed to the shared repository. Moreover, the analysis will guide developers in finding the root cause in the edit of a subsequent test failure, and in calculating changes left uncovered by the current test suite.
Current Grant Support
IBM Open Collaboration Award: Software Quality, IBM Research.
Understanding the Performance of Framework-intensive Applications Through Combined Static and Dynamic Analysis, IBM Faculty Award.
Change Impact Analysis for Object-oriented Systems, NSF, Dr. Barbara G. Ryder (PI), co-PI Dr. Frank Tip, IBM TJ Watson Research Center, Hawthorne, NY. This grant is a collaboration between PROLANGS and IBM Research.
- Compile-time Analysis of Object-oriented Languages, Hewlett-Packard, PI: Dr. Barbara G. Ryder
Areas of Research
Below are listed the current areas of research in the PROLANGS group.- Analysis of Object-Oriented Languages: This work aims at
developing practical and precise static analyses for OO
languages. Current work is focused on specialized points-to analyses for
Java, including checks for eliminating spurious points-to information.
In addition, applications of highly precise (and high cost)
analyses to various problems in testing and debugging are being explored.
Previous work includes points-to analysis, alias analysis, and
def-use analysis for C++, and flow-/context-sensitive points-to analysis
for Java.
- Software Tools for Object-Oriented Programs: This is
work on testing and maintenance tools for OO software. Current work
investigates the use of change impact analysis in maintenance tools,
tools for testing of polymorphic interactions in Java programs, tools
for testing the availability of server applications through compiler-directed
fault injection, and tools that combine static and dynamic analyses
for performance understanding of framework-intensive applications.
- Foundations of Data Flow Analysis: This category includes projects whose sole emphasis is either theoretical and framework-building.
Previous research projects include those listed below.
- Analysis of C: This includes work on modification side effect
analysis of C programs, several kinds of pointer alias analysis of
varying degrees of flow and context sensitivity, and def-use analysis
of C programs. Recent work in this category has emphasized the
analysis of software fragments, as opposed to the traditional
whole-program analyses.
- Incremental Data Flow Analysis: This work addresses the problem of
keeping data flow information consistent with the current state of source
code of a program. The newest work here is an incremental version of
flow and context-sensitive MOD analysis for C codes; this work was
completed in the mid-90's.
- Parallel Data Flow Analysis: This work, completed in the early 90's,
involved the design and test of parallel algorithms to solve
data flow frameworks.
- Analysis of Explicitly Parallel Programs: This work, completed in the early 90's, involved developing data flow analyses to find anomalies in explicitly parallel software.
- Optimizations of Object-Oriented Languages: This work concentrates on optimizations aimed at object-oriented features. Specific attention is focused on dynamic compilation for Java and on compiling Java with exceptions.