Purpose
The purpose of architecture is to:
-
Describe the structure. It describes the essential structure of the system.
-
Capture decisions. It captures the decisions guiding the structure of the system to ensure its
integrity and understandability. Team members who were not involved in architectural decisions need to understand
the reasoning behind the architecture so that they can best address the needs of the system.
-
Identify risks. It identifies and attacks risks to the system. As the project progresses,
developers can more rapidly reduce the variance in their estimates on what they can deliver and when.
-
Provide guidance. It provides context and guidance for developers to construct the system. It
describes the motivations behind the architectural decisions so that developers can robustly implement those
decisions.
-
Overview the system. It provides an overview of the system to whomever must maintain it.
-
Organize the project and team. It defines the project structure and team organization.
Architectural elements make excellent units of implementation, unit testing, integration, configuration management,
and documentation.
Description
Architecture is 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.
Architecture is one aspect of design that concentrates on some specific features. It specifies a system's overall
system structure, gross organization, protocols for communication, synchronization, data access, assignment of
functionality among elements, physical distribution, composition of elements, scaling and performance, and selection
among design alternatives. [GAR93]
Beyond structure, it addresses system integrity, economic constraints, aesthetic concerns, and style. It takes into
consideration the system as a whole, in its user environment and its development environment. [IEP1471].
The architecture focuses on specific aspects of the overall system design, concentrating on structure, essential
elements, key scenarios, and those aspects that have a lasting impact on system qualities such as performance,
reliability, adaptability, and cost. It also defines the set of architectural mechanisms, patterns, and styles that
will guide the rest of the design, ensuring its integrity.
The architecture can contain any information and references that are appropriate in communicating how developers should
build the system. Some information worth capturing as part of the software architecture includes:
· Architectural goals
· Architecturally significant
requirements
· Constraints on the
architecture
· Key abstractions
· Architectural
Mechanisms
· Architectural
patterns
· Deployment approach
· Architecturally significant
design elements
· Critical system
interfaces
· Assets to be reused
· Architectural
decisions
· Guidance for
developers
A software architecture may have an architectural style. The style reduces the set of possible forms from which
to choose, and imposes a certain degree of uniformity to the architecture. The style may be defined by a set of
patterns, or by the choice of specific components or connectors as the basic building blocks.
The best way to validate the architecture is to actually implement
it. See Concept: Executable Architecture.
Representation
You can represent the architecture in many forms and from many viewpoints, depending on the project's needs and the
project team's preferences. It need not be a formal document. You can often communicate the essence of the architecture
through a series of simple diagrams on a whiteboard, or as a list of decisions. The illustration just needs to show the
nature of the proposed solution, convey the governing ideas, and represent the major building blocks.
You can use a precise set of models or documents that describe the various aspects of the system's key elements.
Expressing it as a skeletal implementation is another option, although this may need to be preserved to ensure that the
essence of the system can be understood as the system grows.
For more complex systems, you can represent the architecture as a more comprehensive set of views that describe the
architecture from a number of viewpoints. See Concept: Architectural Views and Viewpoints.
|