I am
interested in
all aspects of software modelling,
documentation, and analysis. I am
particularly interested in what
I call practical formalisms --
specification and design
notations that
are practitioner-friendly and yet have a
precise semantics that is
suitable
for automated analysis.

Much of
my
research work has focused on
computer-aided tools and techniques for
analyzing software requirements and
specifications. My students
and I work with model checkers and
reachability analyzers, to
exhaustively check that a software
specification adheres to desired
system properties (e.g., safety, liveness,
and timing properties,
expressed as logic formulae). These tools
hold the promise of providing
to software practitioners push-button
mathematical verification of
their specifications and designs. However,
such verification is
computationally expensive in both space
and time, so much of our work
involves understanding how to structure
and abstract specifications to
make their model checking feasible.
Recent work looks at how to
generate notation-specific analysis tools
from a template definition of
a notation's semantics -- in the manner
that we currently generate
parsers from grammar definitions.

Recently,
I have
been working with WatForm colleagues on
how to support the rapid
development of new services from
distributed, modular components.
Ideally, modular components do not need to
know about each other to
cooperate. However, modular
components and features can subtly
interfere with each other because they
override the same application
and manipulate the same data. We are
experimenting with theories,
architectures,
design conventions, and analysis
techniques that help to ensure that
independently developed
features inter-operate well.