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 dev
eloped
features inter-operate well.
