OOPSLA 2002


Tracks
Technical Program
Tutorials
Workshops
DesignFest
Educators' Symposium
Doctoral Symposium
Demonstrations
Posters
Student Research
Competition

Student Volunteers
Special Events
Exhibits
Housing Information
Registration Information
Transportation

Wednesday 11:00-11:45 – Convention Ctr - Exhibit Hall 4A

1 Using Static Analysis for Program Understanding in an Integrated Development Environment

Ittai Balaban
New York University, balaban@cs.nyu.edu
Frank Tip
IBM T.J. Watson Research Center, tip@watson.ibm.com
Julian Dolby
IBM T.J. Watson Research Center, dolby@us.ibm.com

Modern object-oriented applications are hard to understand because the flow of control is not always obvious. Good programming practices such as the separation of interfaces from implementations and the use of design patterns encourage the use of indirection and dynamic dispatch. As a result, understanding the behavior of a method requires detailed knowledge about callers of that method, and about the types of objects passed as arguments to that method.

In this demonstration, we show how an existing static analysis framework can be used to augment an integrated development environment with visualization features that make object-oriented programs easier to understand. Specifically, we use the Gnosis framework for interprocedural static analysis that was developed at IBM T.J. Watson, and Eclipse, an open extensible environment for software development.

We show several unobtrusive ways of visualizing call graph information and type information, using existing extension mechanisms such as text-hovers (tool-tips), compiler warnings, and context-sensitive views. For example, in one of our visualizations, the programmer points the mouse cursor at a method call in Eclipse’s standard Java Editor, and a tool-tip pops up showing all possible dispatch targets for that call site. Another visualization lets the programmer select a method header, and a context-sensitive menu pops up displaying all callers of that method; the user can then select a menu entry to open the corresponding calling method in a separate editor window.