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.
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