Once a software product has been initially deployed, often times, facets pertaining to the software undergo various changes prior to its retirement. Depending on the size and complexity of the underlying software, such a change may result in non-trivial alterations to a variety of 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 mechanically 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 Transformation (Refactoring)
My research interests include techniques for automated refactoring of legacy Java source code, through the use of mechanisms such as type inferencing, to take advantage of new idioms and constructs that emerge with the evolution of programming languages and execution platforms. 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 in a way 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 interesting tasks of notable difficulty encompass preservation of semantics, various type-theoretical considerations, algorithmic efficiency, ease-of-use (i.e., using the tool should not be more difficult 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).
Recommendation Systems and Aspect-Oriented Software
I am also interested in source code recommendation systems, particularly related to helping automatically maintain Aspect-Oriented Software. My goal is to ease the burden associated with correctly and efficiently evolving large and complex software by providing automated tools that can be easily used by developers.