|
WILLIAM
SCHERLIS
Professor
Institute for Software Research International
www
My research is in two areas: program manipulation tools and information
structures for collaboration. I focus here on the Fluid Architecture
project, which is in the first of these areas and involves the use
of program analysis and manipulation techniques to support program
development and evolution. Please feel free to come talk to me about
any of these ideas, or about my research in computer-supported cooperative
work (which is not covered here).
All programmers face the difficulty of having to make small-scale
structural design decisions very early in the software process, well
before the consequences of those decisions can be understood. For
example, having decided to include an integrity check for a parameter,
should the check be done at the procedure being called or at all
calling sites? Which site is selected (or whether code is replicated
in order to have it both ways) determines which optimization opportunities
can be exploited, and is best decided later in the process. And in
practice, once these small structural commitments are made, particularly
in the design of an API, they can be very difficult to revise. My
research hypothesis is that this brittleness is not a necessary attribute
of software, and that semantics-based program analysis and manipulation
techniques can offer a way for programmers to retain structural flexibility.
Program manipulation techniques of the sort we are exploring can
also be used to adjust data representations or make other changes
that require potentially pervasive alterations to code. A simple
representational change to Java strings, for example, requires simultaneous
changes to more than 80 methods. Practicing programmers can devote
considerable effort to this "bureaucratic" business of
organizing and reorganizing internal interfaces and encapsulations,
maintaining and revising representation and control invariants, and
managing response to exceptional conditions. Most of the time they
are working with existing code.
I am interested in program analysis and manipulation techniques
that can be embodied in tools that programmers can use easily for
routine program evolution of this sort. For such tools to be practical,
programmers must not have to write extensive specifications of program
functionality or architecture. Also, the tools must be interactive,
enabling software engineers to explore a space of possible design
approaches and to explore multiple structural views of a system.
To this end, we have built experimental tools for analyzing and manipulating
Java programs.
|