I am fascinated by how putting structure on information and computations makes it possible to build complex, effective systems. I am interested in understanding which structures best support the expression, evolution, and verification of software systems, and in helping software developers manage these structures. I am also fascinated by how the structure of how people work with information can reveal the semantics of the information and can be used to help people work more effectively.

In all of the research that I undertake, I strive to evaluate the research in realistic settings. Experiences in trying to evaluate tools and technologies have led me to an interest in empirical evaluation, and in particular, an interest in qualitative evaluation methods.

Current Research Projects

Current research in the lab focuses on recommendation systems, summarization systems, mining software repositories, software architecture and model-oriented software engineering.

Past Research Projects

ActiveAspect was an approach to generate focused, interactive models that describe the effect of an aspect on a system [with W. Coelho].

AOP Empirical Study [with several others] is about understanding what methods to use to assess new technology, and about whether and how aspect-oriented techniques work.

AVID [in conjunction with OTI, Inc. as part of CSER] enables the visualization of the execution of an object-oriented (Java) system at the user-defined software architecture level.

Our bug triage project considered how to help automate the assignment of bugs and detection of duplicate bugs in open-source projects [with J. Anvik and L. Hiew].

Conceptual Modules [with E. Baniassad and A. Lai] provides a means of overlaying a desired structure on an existing source structure to support reengineering, and more recently, the modeling of the behaviour of concerns.

Conceptual queries is considering how to automatically display and cluster local context about important parts of artifacts as a developer works [with B. de Alwis]

Concern Graphs [with M. Robillard] support the location and description of concerns in source code during software evolution tasks.

Design Rational Graphs [with E. Baniassad] supports the linking of design goals, in the form of crosscutting aspects of design patterns, to source code.

Exception Structure [with M. Robillard] involves a source code analysis tool to analyze the flow of exceptions in Java programs, and a design approach to enable the development and reengineering of better exception structures.

Explicit Programming [with A. Bryant, A. Catton, and K. de Volder] advocates and supports the capture of design information in source through the introduction of developer-defined vocabulary. 

Hipikat [with D. Cubranic] is a recommender that suggests pertinent software artifacts to a developer making a change to the system.

Implicit Context [with R. Walker]  helps reduce EEK in software components, easing reuse and evolution of those components. Rob is continuing work in this direction at the Univ. of Calgary.

Mining Version Information [with A. Ying] used data mining techniques to version information to try to recommend pertinent parts of a software system when making a change.

Mylar (Mylyn) builds and makes visible a degree-of-interest model for elements in an IDE based on a developer's activity [with M. Kersten].

Predicting Memory Use [with E. Saenko] investigated a method for predicting, based on design information and sample usage information, the memory use of framework and library components prior to their use.

Open Implementations [with G. Kiczales and others] considered how a designer of a reusable module could expose not only its functionality, but also certain crucial aspects of its implementation.

Empirical Study of C Call Graph Extractors [with D. Notkin (U. Washington), W. Griswold (U.C. San Diego) and E. Lan (Microsoft)] demonstrated the differences in assumptions made in various implementations of a common software engineering tool and showed that these tools produce approximate results that are useful to software engineers.

Role-based Refactoring [with J. Hannemann] is building support to refactor object-oriented and aspect-oriented code to "better" aspect-oriented forms.

When I was working in industry, I worked on the testing of object-oriented software and was a co-organizer of an OOPSLA '95 Workshop on Testing Smalltalk Applications.

Ph.D. Research

Software Reflexion Models [with D. Notkin (U. Washington) and K. Sullivan (U. Virginia)] enable a software developer to summarize interactions in a large body of source code in terms of a selected, high-level, structural view of the system. The technique has been shown to scale for use with large systems: a developer at Microsoft applied the technique to aid an experimental reengineering of the Excel code base.

Lightweight Lexical Source Model Extraction [with D. Notkin (U. Washington)] involved the development of an approach to generate flexible and tolerant source model extractors from lexical specifications.

Last updated: May 18, 2009