Please review my vita, projects, publications, presentations, students, collaborators, background, group, or software for more information regarding my research. The below slides also discuss an overview of my research area:
Once a software product has been initially deployed, facets of the software often undergo various changes before its retirement. Depending on the size and complexity of the underlying software, such a change may result in non-trivial alterations to various artifacts that support the system. Typically, change to a single artifact element requires alterations to related and often seemingly unrelated elements scattered throughout artifacts.
Automated Software Development
To address these problems, approaches have emerged to assist developers with a wide range of software evolution and maintenance tasks. Such assistance is typically provided in the form of extensions (so-called plugins) to integrated development environments (IDEs) that afford automated (or tool-supported) aid in carrying out these tasks, thereby easing the burden associated with evolution and maintenance.
Source-to-Source Semantics-Preserving Program Transformation (Refactoring)
My research interests include techniques for automated refactoring of legacy source code by using mechanisms such as type inferencing to take advantage of new idioms and constructs that emerge with the evolution of programming languages and execution platforms. In addition, I create tools that automate the source-to-source transformation necessary to facilitate the proper migration of existing systems to new technologies, thereby easing the costs of software maintenance over time.
What makes the creation of such automated tools challenging is that they should be created so that they are generally applicable to all systems and situations. This often entails producing an approach that adopts a conservative methodology; however, defining the line of conservation is crucial for real-world applicability. Other exciting tasks of considerable difficulty encompass preservation of semantics, various type-theoretical considerations, algorithmic efficiency, ease-of-use (i.e., using the tool should not be more complex than conducting the refactoring manually), and inferring programmer intent (i.e., performing the refactoring as close as possible to the way the refactoring would have been performed manually by the programmer).