Technical Approach

Construct a software composition discipline which facilitates modular reasoning about composed software.

Build a component library in Ada and C++ for composing nontrivial programs. The larger components in the library should themselves be built from simpler components in the library.

Identify mental models that software developers have of evolving software and corresponding computer representations for software understanding, and use them to build a workbench for software composition.

Identify high-level templates, such as programming plans, that capture concepts and intentions used in software development and understanding.

Generalize and codify component design experience into a "software component engineering handbook" for use by students and software professionals.

Apply the theory of understanding for providing explanations of programs and architectures at different levels of abstraction.

Apply the technology to a number of applications to check validity, usefulness and for design feedback.

Technical Challenge & Key Ideas or Concepts

It is intractable to understand and reason about the behavior of large systems unless reasoning about its components can be done in isolation, and those results composed to obtain understanding of the assemblage.

It is impossible to design effective component-based software in the first place without a clear understanding of the behavior of the components and the desired behavior of the assemblage.

Key challenge is as follows: The above problems have to be explored independently, but the results from one also affect progress in the other. We need to exploit the synergy.


John Hartman
Original: 8-Aug-1995
Update: 8-Aug-1995