There is a revival of interest in the software product after several years of intense focus by the software engineering community on the software process. Similarly, within the software design community, there is a revival of interest in higher levels of design (e.g. software architecture) after several years of intense focus on object-oriented (OO) design methodologies (e.g. identifying objects, classes and inheritance relations). The increasing importance of software in systems is also driving the software architecture renaissance. Problems with software architecture have contributed to the difficulties of large projects like the FAA's Advanced Automation System . Because architectural decisions are usually made early in the life-cycle, they are the hardest to change and hence the most critical and far-reaching. Without a good system and software architecture it is difficult to achieve satisfaction of the original performance and behavioral requirements and it is probably impossible to accommodate major design changes. Software architecture also provides the critical context for high leverage reuse of design and components. The importance of architectural context for reuse is derived from observing the common practices in mature engineering fields such as civil engineering and chemical engineering. Within software engineering, common practices and solutions within particular application areas can be reused to provide domain-wide leverage of architectural-level decisions. This article provides a brief overview of some of the important architecture related efforts.
What is software architecture? In this article a software architecture is loosely defined as the organizational structure of a software system including components, connectors, constraints, and rationale . Dewayne Perry and David Garlan, the editors of a special issue of IEEE Transactions on Software Engineering (expected fall 94), are working on a more formal and standardized definition.