What Is A Software Architecture
What Is A Software Architecture
Architecture?
Peter Eeles
Senior IT Architect
IBM Rational Software
There is no doubt that the world is becoming increasingly dependent on software. Software
touches many aspects of our everyday lives and is an essential element of something as
ubiquitous as a cell phone and as complex as an air traffic control system. In fact, many of the
innovations that we take for granted today, and organizations such as eBay or Amazon, simply
wouldn’t exist if it weren’t for software. Even traditional organizations, such as those found in the
finance, retail and public sectors depend heavily on software. In this day and age, it’s difficult to
find an organization that isn’t, in some way, in the software business.
In order for such innovations and organizations to survive, the software they depend on must
provide the required capability, be of sufficient quality, be available when promised and be
delivered at an acceptable price. All of these characteristics are influenced by the architecture of
the software, the subject of this article.
This article focuses on software-intensive systems. Thus, the term “architecture”, when
unqualified, is synonymous with the term “software architecture”.
Architecture defined
There is no shortage of definitions when it comes to “architecture”. There are even web sites
that maintain collections of definitions [SEI]. The definition used in this book is that taken from
IEEE Std 1472000, the IEEE Recommended Practice for Architectural Description of Software-
Intensive Systems [IEEE 1471]. This definition follows, with key characteristics highlighted.
Chapter 1, 1
A system is a collection of components organized to accomplish a specific function or set
of functions. The term system encompasses individual applications, systems in the
traditional sense, subsystems, systems of systems, product lines, product families, whole
enterprises, and other aggregations of interest. A system exists to fulfill one or more
missions in its environment. [IEEE 1471]
[A component is] a modular part of a system that encapsulates its contents and whose
manifestation is replaceable within its environment. A component defines its behavior in
terms of provided and required interfaces. As such, a component serves as a type, whose
conformance is defined by these provided and required interfaces (encompassing both
their static as well as dynamic semantics). [UML 2.0]
The definitions provided here cover a number of different concepts, which are discussed in
more detail later in this article. Although there is no generally agreed definition of “architecture”
in the industry, it is worth considering some other definitions so that similarities between them
can be observed. Consider the following definitions where, again, some of the key characteristics
have been highlighted.
Chapter 1, 2
The software architecture of a system or a collection of systems consists of all the
important design decisions about the software structures and the interactions between
those structures that comprise the systems. The design decisions support a desired set of
qualities that the system should support to be successful. The design decisions provide a
conceptual basis for system development, support, and maintenance. [McGovern]
From these definitions we can see that, although the definitions are somewhat different, there
is a large degree of commonality. For example, most definitions indicate that an architecture is
concerned with both structure and behavior, is concerned with significant decisions only, may
conform to an architectural style, is influenced by its stakeholders and its environment, and
embodies decisions based on rationale. All of these themes, and others, are discussed below.
Figure 2
UML Class Diagram showing Structural Elements
Chapter 1, 3
An architecture defines behavior
As well as defining structural elements, an architecture defines the interactions between these
structural elements. It is these interactions that provide the desired system behavior.
Figure 3 is a UML sequence diagram showing a number of interactions that, together, allow
the system to support the creation of an order in an order processing system. Here we see five
interactions. First, a Sales Clerk actor creates an order using an instance of the OrderEntry class.
The OrderEntry instance gets customer details using an instance of the CustomerManagement
class. The OrderEntry instance then uses an instance of the AccountManagement class to create
the order, populate the order with order items, and then place the order.
Figure 3
UML Sequence Diagram showing Behavioral Elements
It should be noted that Figure 3 is consistent with Figure 2 in that we can derive the
dependencies shown in Figure 2 from the interactions defined in Figure 3. For example, an
instance of OrderEntry depends on an instance of CustomerManagement during its execution, as
shown by the interactions in Figure 3. This dependency is reflected in a dependency relationship
between the corresponding OrderEntry and CustomerManagement classes, as shown in Figure 2.
Chapter 1, 4
phrased as economical significance, since the primary driver for considering certain elements
over others is the cost of creation, and cost of change.
Since an architecture focus on significant elements only, then it provides us with a particular
perspective of the system under consideration – the perspective that is most relevant to the
architect. In this sense, an architecture is an abstraction of the system that helps an architect
manage complexity.
It is also worth noting that the set of significant elements is not static, and may change over
time. As a consequence of requirements being refined, risks identified, executable software built
and lessons learned, the set of significant elements may change. However, the relative stability of
the architecture in the face of change is, to some extent, the sign of a good architecture, the sign
of a well-executed architecting process, and the sign of a good architect. If the architecture needs
to be continually revised due to relatively minor changes, then this is not a good sign. However, if
the architecture is relatively stable, then the converse is true.
• The end user is concerned with intuitive and correct behavior, performance,
reliability, usability, availability and security.
• The system administrator is concerned with intuitive behavior, administration
and tools to aid monitoring.
• The marketer is concerned with competitive features, time to market, positioning
with other products, and cost.
• The customer is concerned with cost, stability and schedule.
• The developer is concerned with clear requirements, and a simple and consistent
design approach.
• The project manager is concerned with predictability in the tracking of the
project, schedule, productive use of resources and budget.
• The maintainer is concerned with a comprehensible, consistent and documented
design approach, and the ease with which modifications can be made.
Another challenge for the architect is that, as we can see from this list, the stakeholders are
not just concerned that the system provides the required functionality. Many of the concerns
listed are non-functional in nature, in that they do not contribute to the functionality of the
system. Such concerns represent system qualities or constraints. Non-functional requirements are
quite often the most significant requirements as far as an architect is concerned.
Chapter 1, 5
An architecture embodies decisions based on rationale
An important aspect of an architecture is not just the end result, the architecture itself, but the
rationale for why it is the way it is. Thus, an important consideration is to ensure that you
document the decisions that have led to this architecture, and the rationale for these decisions.
This information is relevant to many stakeholders, especially those that must maintain the
system. This information is often valuable to the architect themselves when they need to revisit
the rationale behind the decisions that were made, so that they don’t end up having to
unnecessarily retrace their steps. For example, this information is used when the architecture is
reviewed, and the architect needs to justify the decisions that have been made.
[A pattern is] a common solution to a common problem in a given context. [UML User
Guide]
As well as reusing experience, the application of an architectural style (or a pattern) makes
our life as an architect somewhat easier, since a style is normally documented in terms of the
rationale for using it (and so there is less thinking to be done) and in term of its structure and
behavior (and so there is less architecture documentation to be produced since we can simply
refer to the style instead).
Chapter 1, 6
organization, but the creation of the architecture may also change the environment in terms of the
skills available within the organization.
When it comes to software-intensive systems, there is a particular aspect of the environment
that must always be considered, as discussed earlier in this chapter. In order for software to be
useful, it must execute. In order to execute, the software runs on some kind of hardware. The
resulting system is therefore a combination of both software and hardware, and it is this
combination that allows properties such as reliability and performance to be achieved. Software
cannot achieve these properties in isolation of the hardware on which it executes.
IEEE Std 12207-1995, the IEEE Standard for Information Technology – Software Life Cycle
Processes, defines a system as follows. This definition of system is different from IEEE 1471
definition of system shown earlier (and which focuses on software-intensive systems), but is in
agreement with the definitions found in the systems engineering field.
[A system is] an integrated composite that consists of one or more of the processes,
hardware, software, facilities and people, that provides a capability to satisfy a stated
need or objective. [IEEE 12207]
A configuration of RUP for Systems Engineering (RUP SE) contains a similar definition.
[A system is] a set of resources that provide services that are used by an enterprise to
carry out a business purpose or mission. System components typically consist of
hardware, software, data, and workers. [Cantor]
In the systems engineering field, tradeoffs are made regarding the use of software, hardware
and people. For example, if performance is key, then a decision may be made to implement
certain system elements in hardware, rather than software or people. Another example is that, in
order to provide a usable system to customers, a decision is made to provide a customer interface
that is a human being, rather than an interface implemented in software or hardware. More
complex scenarios require certain system qualities to be achieved through a combination of
software, hardware and people. Accordingly, this book makes reference to elements other than
software where appropriate.
It is interesting to note that systems engineering is specifically concerned with treating
software and hardware (as well as people) as peers, thus avoiding the pitfall where hardware is
treated as a second-class citizen to the software, and is simply a vehicle for executing the
software, or where software is treated as a second-class citizen with respect to the hardware, and
is simply a vehicle for making the hardware function as desired.
Chapter 1, 7
get a 4-pass compiler”. In practice, we often unintentionally create architectures that reflect the
organization creating the architecture.
However, it is also true to say that this somewhat idealized view is not always practical since,
for purely pragmatic reasons, the current team structure and the skills available represent a very
real constraint on what is possible and the architect must take this into account.
Chapter 1, 8
Figure 4
The Scope of Different Terms
The elements shown in Figure 4 are:
• Software architecture, which is the main focus of this book and is defined earlier
in this article.
• A hardware architecture considers elements such as CPUs, memory, hard disks,
peripheral devices such as printers, and the elements used to connect these
elements.
• An organizational architecture considers elements that are concerned with
business processes, organizational structures, roles and responsibilities, and core
competencies of the organization.
• An information architecture considers the structure by which information is
organized.
• Software architecture, hardware architecture, organizational architecture and
information architecture are all subsets of the overall system architecture, as
discussed earlier in this article.
• An enterprise architecture is similar to a system architecture in that it, too,
considers elements such as hardware, software and people. However, an
enterprise architecture has a stronger link to the business in that it focuses on the
attainment of the business objectives, and is concerned with items such as
business agility and organizational efficiency. An enterprise architecture may
cross company boundaries.
As one would expect, there are corresponding forms of architect (for example, software
architect, hardware architect, and so on) and architecting (for example, software architecting,
hardware architecting, and so on).
Now that we’ve got through these definitions, there are many unanswered questions. What is
the difference between an enterprise architecture and a system architecture? Is an enterprise a
system? Is an information architecture the same as the data architecture found in some data-
intensive software applications? Unfortunately, there is no set of agreed-upon answers to these
questions.
For now – be aware that these different terms exist, but that there is no consistent definition
of these terms in the industry and how they relate. The recommendation, therefore, is for you to
select the terms relevant to your organization, and define them appropriately. You will then
achieve some consistency at least and reduce the potential for miscommunication.
Summary
This article has focused on defining the core characteristics of a software architecture.
However, there are many questions left unanswered. What is the role of the software architect?
What are the key activities that the architect is involved in? What are the benefits of
“architecting”? These questions, and others, will be answered in subsequent articles.
Chapter 1, 9
Acknowledgements
The contents of this article have been derived from a forthcoming book, provisionally entitled
“The Process of Software Architecting”. As a result, the content has been commented upon by
many individuals that I would like to thank, who are Grady Booch, Dave Braines, Alan Brown,
Mark Dickson, Holger Heuss, Kelli Houston, Luan Doan-Minh, Philippe Kruchten, Nick
Rozanski, Dave Williams and Eoin Woods.
References
[Bass]
Software Architecture in Practice
Second edition
Len Bass, Paul Clements and Rick Kazman
Addison Wesley
ISBN 0-3215495-9
2003
[Cantor]
Rational Unified Process for Systems Engineering
Murray Cantor
Article from The Rational Edge
www.therationaledge.com
August 2003
[IEEE 12207]
IEEE Standard for Information Technology – Software Life Cycle Processes
IEEE Std 12207-1995
IEEE Computer Society
1995
[IEEE 1471]
IEEE Recommended Practice for Architectural Description of Software-Intensive Systems
IEEE Std 1472000
IEEE Computer Society
2000
[McGovern]
A Practical Guide to Enterprise Architecture
James McGovern, Scott W. Ambler, Michael E. Stevens, James Linn, Vikas Sharan and Elias
K. Jo
Prentice Hall
Chapter 1, 10
ISBN 0-13-141275-2
2004
[SEI]
Software Engineering Institute (SEI) Architecture Website – Architecture Definitions
http://www.sei.cmu.edu/architecture/definitions.html
[Shaw]
Software Architecture – Perspectives on an Emerging Discipline
Mary Shaw and David Garlan
Prentice Hall
ISBN 0-13-182957-2
1996
[UML 1.5]
OMG Unified Modeling Language Specification
Version 1.5
Object Management Group Inc.
Document number 03-03-01
March 2003
[UML 2.0]
UML 2.0 Infrastructure Specification
Object Management Group Inc.
Document number 03-09-15
September 2003
Chapter 1, 11