The last decade has been one of great progress in the field of software architecture
research and practice. Software architecture has emerged as an important subdiscipline
of software engineering. A key aspect of the design of any software system is its
architecture, i.e. the fundamental organization of a system embodied in its components,
their relationships to each other, and to the environment, and the principles
guiding its design and evolution (as defined in the Recommended Practice for Architectural
Description of Software-Intensive Systems — IEEE Std 1471-2000).