Software design is a complex and cognitively taxing task. A design can rarely be finalized upfront: refined requirements and unforeseen constraints are likely to cause evolution of a design, necessitating changes to an implementation that is already under way. Unfortunately, software source code is not easily amenable to design changes. Many restructuring modifications are complicated by the interdependencies of a typical programming language notation. Furthermore, some of the design abstractions, such as synchronization or logging, are difficult to capture at the source code level due to their delocalized nature.
Changing program source code is one of the most tedious tasks faced by a programmer. However, if it were possible to express these operations at a level above traditional text-based editing, the programmers would both be more efficient and make fewer errors. This research focuses on the problem of programmers' expression and interaction with a programming tool. We combine the results from psychology of programming, user-interface design, software visualization, program analysis, and program transformation fields to create a novel programming environment that lets the programmer describe a source code manipulation, such as adding a parameter to a procedure, in a "natural" manner.
Our approach is to first study and understand how programmers form mental "update plans" for changing source code. The results of this study will be used to design a tool that makes it easy to specify and execute source code transformations. This tool will utilize the analysis capabilities of Harmonia, a program analysis framework for building language-based tools, and will be embedded in Eclipse, an existing full-featured IDE. The resulting prototype will be evaluated both through an existing cognitive framework as well as through deployment to a user community.