| Software Architecture and
Related Concerns What is Software
Architecture? (.pdf)
Definitions of Software Architecture
What Software
Architecture is Not
Architecture
Case Studies and Project Artifacts
Join
our
mailing list
Architecture Training

Architecture
Requirements Workshop
Software Architecture Class
-
Chicago, IL,
April 15-18, 2008
Enterprise
Architecture
Workshop
-
Chicago, IL, April
21-24, 2008
Role
of the Architect
Workshop
-
Chicago, IL,
August 22-24, 2007
Enterprise
Architecture Seminar (1-day)
Architecture
Overview Seminar
Architecture
Consulting
Consulting
Services Overview
|
Software Architecture and Related
Concerns
What is Software Architecture?
Software architecture is the set of decisions the
software architect makes.
"What decisions does the software architect make?"
The
architecturally significant ones.
"What is
architecturally significant?"
The architect decides! "A tautology!" you
protest. Ah,
think about it, I counter.
Software architecture is commonly defined in terms of
components and connectors (see Definitions of Software Architecture).
Components are identified and assigned responsibilities that client components interact
with through "contracted" interfaces. Component interconnections specify
communication and control mechanisms, and support all component interactions needed to
accomplish system behavior.
In creating architectures, we address
- system decomposition into components, subsystems, sub-assemblies or "chunks" (Ulrich and Eppinger, 2004), paying attention to development productivity, and
flexibility or extensibility requirements associated with accommodating
future functionality at a reasonable cost of change. A good
decomposition satisfies the principle of loose coupling between
components (or pieces), facilitated by clean interfaces, simplifying the
problem by dividing it into reasonably independent pieces that can be
tackled separately.
- Once broken down
into pieces, we need to ask:
- Do we have all the necessary pieces? The structure must support
the functionality or services required of the system. Thus, the dynamic
behavior of the system must be taken into account when designing the
architecture. We must also have the necessary infrastructure to support
these services.
- Do the pieces fit together? This is a matter of interface and
relationships between the pieces. But good fit—that is fit that
maintains system integrity—also has to do with whether the system, when
composed of the pieces, has the right
properties.
- cross-cutting concerns. We refer
to broad-scoped qualities or properties of the system as cross-cutting
concerns, because their impact is diffuse or systemic. It may be a
matter of preferring not to isolate these concerns because the
decomposition is being driven by other concerns, or it may be that no
matter how you might “slice-and-dice” the system, multiple parts are
going to have to collaborate to address these cross-cutting concerns. At
any rate, to effectively address cross-cutting concerns, they must be
approached first at a more broad-scoped level. Many system qualities
(also known as
non-functional requirements or system properties, often specified in
service level agreements) are of this nature. To make the picture more
complicated, the system qualities may conflict, so that trade-offs have
to be made taking into account the relative priorities of the system
qualities.
An architecture is not a
simple flat view of the component topology, though an architecture diagram
showing the components and relationships among them is a central thinking
and communicating tool for the architects and the development team, and
others they partner with. Our architecture needs to include:
-
Meta-architecture: the architectural vision, style,
principles, key communication and control mechanisms, and concepts that guide the team of
architects in the creation of the architecture.
-
architectural views: Just as building architectures
are best envisioned in terms of a number of complementary views or models, so too are
software architectures. In particular, structural views help document and
communicate the architecture in terms of the components and their relationships, and are
useful in assessing architectural qualities like extensibility. Behavioral views
are useful in thinking through how the components interact to accomplish their assigned
responsibilities and evaluating the impact of what-if scenarios on the architecture.
Behavioral models are especially useful in assessing run-time qualities such as
performance and security. Execution views help in evaluating physical
distribution options and documenting and communicating decisions.
In creating these views, we pay attention to:
- architectural patterns: structural patterns such as
layers and client/server, and mechanisms such as brokers and bridges.
- key architectural design principles including abstraction,
separation of concerns, postponing decisions, and simplicity, and related techniques such
as interface hiding and encapsulation.
- design of architectural mechanisms,
where mechanisms deal with the interaction of components to
achieve specific system capabilities.
- system decomposition principles and good interface design.
What Software
Architecture Is Not
Software architecture must be distinguished from
lower-level design (e.g., design of component internals and algorithms) and implementation, on the one
hand, and other kinds of related architectures, on the other. For instance, software
architecture is not the information (or data) model, though it uses the information model
to get type information for method signatures on interfaces, for example. It is also not
the architecture of the physical system, including processors, networks, and the like, on
which the software will run. However, it uses this information in evaluating the impact of
architectural choices on system qualities such as performance and reliability. More
obviously, perhaps, it is also not the hardware architecture of a product to be
manufactured. While each of these other architectures typically have their own specialists
leading their design, these architectures impact and are impacted by the software
architecture, and where possible, should not be designed in isolation from one another.
This is the domain of system architecting. (As an interesting aside, our software
architecting process has usefully been applied, without the software modeling specifics,
to system, hardware and organization architecting.)
References
- Malan, Ruth and Dana Bredemeyer, Software
Architecture: Central Concerns, Key Decisions (.pdf, 124kb, May 2002.
- Malan, Ruth and Dana Bredemeyer, "Less is
More with Minimalist Architecture" (MinimalistArchitecture.PDF,
47 kb), draft of the paper to be
published in IEEE's IT
Professional, September/October 2002. ©
2002
IEEE. 2002
IEEE. Personal
use of this material is permitted. However, permission to
reprint/republish this material for advertising or promotional
purposes or for creating new collective works for resale or
redistribution to servers or lists, or to reuse any copyrighted
component of this work in other works must be obtained from the IEEE.
- Malan, Ruth,
Modularity and what we can learn from Trek, posted to
A Trace in the Sand blog, June 20, 2006.
- Ulrich, Karl and Stephen Eppinger,
Product Design and Development, McGraw-Hill, 2004.
Restrictions on Use: All
material that is copyrighted by Bredemeyer Consulting and published on any
pages of our site, may be downloaded and printed for personal use. If
you wish to quote or paraphrase fragments of our work in another publication
or web site, please properly acknowledge us as the source, with appropriate
reference to the article or web page used. If you wish to republish any of
our work, in any medium, you must get written permission from the lead
author (in this case, Ruth Malan). Also, any commercial use must be authorized in writing by Bredemeyer
Consulting.
|