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 and SIGSOFT 93 and probably at SIGSOFT 94, 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.
[Shaw et al. 94]
Mary Shaw, Robert DeLine, Daniel V. Klein, Theodore L. Ross, David Young, and Gregory Zelesnik, ``Abstractions for Software Architecture and Tools to Support Them,'' submitted to IEEE Transactions on Software Engineering, 1994.[Shaw 94a]
Mary Shaw, ``Procedure Calls are the Assembly Language of Software
Interconnection: Connectors Deserve First-Class Status,'' Proc Workshop on Studies of Software Design, to be published by Springer-Verlag, 1994.[Shaw 94b]
Mary Shaw, ``Software Architectures for Shared Information Systems,'' Mind Matters: Contributions to Cognitive and Computer Science in Honor of Allen Newell, Lawrence Erlbaum, to appear 1994.[Shaw 94c]
Mary Shaw, ``Beyond Objects: A Software Design Paradigm Based on Process Control,'' to appear in ACM Software Engineering Notes, 1994.[Garlan and Shaw 93]
David Garlan and Mary Shaw, ``An Introduction to Software Architecture,'' in V. Ambriola and G. Tortora (ed), Advances in Software Engineering and Knowledge Engineering, World Scientific Publishing Company 1993, pp. 1-39.[Lane 90]
Thomas G. Lane, ``Studying Software Architecture Through Design Spaces and Rules,'' Technical Report CMU/SEI-90-TR18 ESD-90-TR-219, Carnegie Mellon University, September 1990.