Research

Most of our work comes back to modular reasoning: the idea that you should be able to understand and change one part of a software system without having to understand all of it. We design languages and interfaces that support modular reasoning, and we have built infrastructure that runs a software analysis across very large collections of code. More recently we have been applying the same ideas to AI, studying how software engineering can make deep learning and other AI-enabled systems more reliable.

View our work on Google Scholar →

Modularity and Modular Reasoning

We design languages and interfaces that let developers reason about one part of a program without tracing through the rest. This work includes aspect-oriented design, Classpects, the Ptolemy language with its quantified, typed events, capsule-oriented programming in Panini, and translucid contracts for modular verification.

Projects

  • Panini: capsule-oriented programming for modular reasoning about concurrency.
  • Ptolemy: an event-based language with quantified, typed events and translucid contracts.
  • Eos: an aspect-oriented extension for C# that unifies aspects and objects as classpects.
  • Nu: intermediate-language and virtual-machine support for aspect-oriented features.
  • Sapha: automatic thread-to-core assignment for heterogeneous multi-core processors.
  • Slede: specification and verification of cryptographic protocols for sensor networks.
  • Tisa: trustworthy non-functional guarantees for service-oriented architectures.
  • Frances: teaching tools for code generation and computer architecture.

Representative and recent publications

More publications

Selected funding

Analyzing Software at Scale, with Boa

With Boa, we wanted a way to write a software-analysis task once and run it across a very large collection of repositories. Boa is a language and the supporting infrastructure for doing this, and researchers have used it to study how software is written and how it changes across hundreds of thousands of projects.

Projects

  • Boa: a language and infrastructure that expresses software-analysis tasks modularly so they run across hundreds of thousands of open-source projects.

Representative and recent publications

More publications

Selected funding

Modular and Dependable AI

More recently we have been applying these ideas to AI-enabled systems, and this is where most of our current work sits. One thread treats a trained model as something that can be taken apart: we decompose deep neural networks, including convolutional and recurrent networks, into modules that can be tested, reused, or replaced without retraining the whole model, which lowers the cost and energy of building and updating AI. A second thread is trustworthy AI. We study how deep learning systems fail, locate and repair faults in them, check and improve fairness across machine-learning pipelines, bring design-by-contract ideas to model training and inference, and study the dependability of whole data-science lifecycles. The aim is AI software that teams can build and rely on.

Projects

Representative and recent publications

More publications

Selected funding