CSD Home | Faculty By Interest | Faculty by Projects | Research Home

 

 

Adamchik
Ailamaki
Aldrich
Andersen
Bar
Blelloch
Blum, A.
Blum, L.
Blum, M.
Brookes
Bryant
Cagan
Carbonell
Christel
Clarke
Corbett
Cranor
Crary
Datta
Dannenberg
Durand
Efros
Erdmann
Fahlman
Faloutsos
Falsafi
Fink
Ganger
Garlan
Gao
Goldstein
Guestrin
Gunawardena
Gupta
Harchol-Balter
Harper
Hauptmann
Hodgins

Hoe
Hudson
James
John
Kanade
Lafferty
Lee, P.
Lee, T.
Lewicki
Maggs

Mason
Maxion
Miller
Mitchell
Moore
Morris
Mowry
Myers
Ng
O'Donnell
O'Hallaron
Olston
Pausch
Perrig
Pfenning
Pollard
Reddy
Reiter
Reynolds
Rosenfeld
Rudich
Rudnicky
Sandholm
Satyanarayanan
Scherlis
Schmerl
Seshan
Sharygina
Shaw
Siewiorek
Simmons
Sleator
Smith
Song
Statman
Steenkiste
Stern
Touretzky
Veloso
Von Ahn
Wactlar
Waibel
Wing
Xing
Yang
Zhang
 

WILLIAM SCHERLIS
Professor and Director, Institute for Software Research
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 ractical, 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.


 

      CSD Home   Webteam  ^ Top   SCS Home