The architecture of a software system defines that system in terms of components and interactions, or connections, among those components. In addition to specifying the structure and topology of the system, the architecture shows the correspondence between the system requirements and elements of the constructed sytem. It addresses system-level properties such as capacity, throughput, consistency, and component compatibility. Architectural models clarify structural and semantic differences among components and their connectors. architectural definitions can be composed to define larger systems. Elements are defined independently so they can be re-used in different contexts. The architecture establishes specifications for individual elements that may be written in a conventional programming language. A number of commonly-used patterns, or idioms, are in widespread informal use; these architectural styles can be captured as general templates for families of related systems. This holds particular promise for domain-specific systems.
My current primary concerns are identifying and supporting architectural abstractions, localizing and codifying the ways components interact, and distinguishing among the various packagings of components that require different forms of interaction. A major thrust of the research is identifying suitable abstractions for architectural styles and connectors, together with language to describe them. My focus is largely pragmatic. The first goal of the work has been to identify, classify, and support a variety of components and their connections. A prototype tool now supports eight component types and six connector types. Over time, the notation will be refined and a formal base will be developed.
Research questions of interest include:
In addition to developing notations, models, and tools, I actively disseminate the results. These activities center on developing and presenting educational materials on software architecture. This has to date resulted in a course, a tutorial presented at ICSE 93, SIGSOFT 93, SIGSOFT 94, and the 1996 CMU summer school, and a videotape for distribution. I am also active in promoting the ideas in professional forums. Currently, the CMU software architecture group is organizing a set of model problems in the interest of sharing common examples within the research community.