Students: I am currently seeking brilliant, motivated (graduate
or undergraduate) students to work on exciting research projects.
Research Interests
My current research interests are in compilation, program analysis,
and software engineering. Some of my group's ongoing research includes:
Robust Software Systems We have a developed a
language-based approach for building robust software systems. This
approach decomposes software systems into a set of a tasks, and uses
task specifications to describe how to combine these tasks. In the
event of a failure, our system reasons about these task specifications
to adapt the execution and continue to provide service.
Software Design for Multi- and Many- Core Processors
Developing software for future multi-core processors will require new
software design methodologies, programming languages, and tools. This
research investigates a new design methodology for developing the
parallel software systems that are necessary to take advantage of
multi-core processors. This new design process enables the software
developer to create flexible system designs that easily accommodate
refinement of how the computation is realized. It does this by
separating the functional design of the software system from the
specification of how to organize the computation. This research
project investigates the construction of synthesis and profiling tools
that can be used to develop and refine these functional and
organizational specifications. These specifications are in turn used
to create an executable that is optimized for the specific multi-core
microprocessor.
Analysis of Software Bugs We have built a prototype tool
to automatically build a repository of software bugs. For each
software bug, our tool records a test case that reveals the bug, a
version of the program that contains the bug, and the change that
corrects the software bug. We are in the process of using this tool
to collect information and plan to mine this information to discover
properties of software bugs.
Data Structure Repair We have developed data structure
repair, a technique to enable programs to recover from data structure
corruption errors. This technique can be applied to both volatile
data structures inside a running program and persistent data
structures stored on disk.
Our group has
developed Bristlecone, a new programming language for developing
robust software systems. We intend developers to use the Bristlecone
language to specify both the high-level architecture of a software
system, including how the software system's conceptual operations
interact, and the low-level operational details, including the
sequence of instructions that comprise an individual conceptual
operation. We have developed a prototype compiler and runtime system
for Bristlecone.
Data structure repair is a technique for detect and repairing errors
in data structures. We have developed a compiler that automatically
generates a data structure repair algorithm from a declarative data
structure consistency specification.
Courses
EECS221 Compilers, Program Analysis, and Software Engineering Winter 07
EECS114 Engineering Data Structures and Algorithms Fall 06
EECS10 Computational Methods in Electrical Engineering and Computer Engineering Winter 06
Select Publications
AFID: An Automated Fault Identification Tool
Alex Edwards, Sean Tucker, Sebastien Worms, Rahul Vaidya, and Brian Demsky
To appear in Proceedings of the 2008 International Symposium on Software Testing and Analysis
July 2008
Data Structure Repair Using Goal-Directed Reasoning
Brian Demsky and Martin C. Rinard
Proceedings of the 2005 International Conference on Software Engineering
May 2005
ACM SIGSOFT Distinguished Paper Award