Research Projects

Declarative Queries for Imperative Languages

Imperative programming may yield efficient and easy-to-compile programs, but it is also notoriously hard. The goal of this project is to ease the task of writing imperative code by extending the underlying language (Java, at this time) with high-level declarative query constructs.

We have developed two such extensions:

In collaboration with:

Large-Scale Software Quality support for FairRoot

Large software systems often suffer from significant quality defects, both due to their essential complexity and due to accidental complexity. In this project, we explore the FairRoot software system for particle physics (approximately 1 MLOC in size, mostly C++) in order to improve code correctness and software performance.

In collaboration with:

Copy-Paste Redeemed

Copying and pasting can be a quick solution to a solve a coding problem, but it can also be a quick path towards spreading bugs or reduce maintainability. As an alternative, programmers can try to manually introduce abstractions-- but this can be a more challenging and costly prospect. We propose a refactoring-based approach to bridge the two approaches: Developers can copy, paste, and modify, and later use our approach to merge clone and original into a single abstraction.

Program Metamorphosis

Refactoring is a great techinque for changing program structure without altering program behaviour. However, existing refactoring tools have numerous limitations:

  1. Some complex refactorings aren't supported by existing tools but can't be broken down into smaller refactoring transformations.
  2. Each refactoring tool has its own idea of what the `relevant program behaviour' is, and that idea may or may not match what the programmer had in mind.
  3. Whenever a refactoring changes the program, it may use heuristics to preserve behaviour-- and those heuristics may not match the programmer's intentions.

Program Metamorphosis defines an alternative interactive multi-step approach towards transforming programs. We have found it to be more powerful, yet just as safe as traditional refactoring.