The Process of Software Architecting PDF
The Process of Software Architecting PDF
INTRODUCTION .................................................................................................................... 5
APPLYING THE PROCESS................................................................................................... 6
THE PROCESS IN BRIEF ..................................................................................................... 6
SCOPE...................................................................................................................................... 12
SUMMARY .............................................................................................................................. 13
Chapter 2. Architecture, Architect, Architecting ....................................................................... 13
ARCHITECTURE .................................................................................................................... 13
ARCHITECT ............................................................................................................................ 26
ARCHITECTING ..................................................................................................................... 34
THE BENEFITS OF ARCHITECTING ................................................................................ 42
SUMMARY ............................................................................................................................... 49
Chapter 3. Method Fundamentals .............................................................................................. 49
KEY CONCEPTS ..................................................................................................................... 50
METHOD CONTENT ............................................................................................................. 53
PROCESS ................................................................................................................................. 58
SUMMARY ............................................................................................................................... 67
Chapter 4. Documenting a Software Architecture .................................................................... 68
THE END GAME .................................................................................................................... 69
KEY CONCEPTS ..................................................................................................................... 71
VIEWPOINTS AND VIEWS ................................................................................................. 72
MODELS .................................................................................................................................. 80
CHARACTERISTICS OF AN ARCHITECTURE DESCRIPTION FRA MEWORK ........ 84
AN ARCHITECTURE DESCRIPTION FRAMEWORK ..................................................... 89
THE SOFTWARE ARCHITECTURE DOCUMENT ........................................................... 95
SUMMARY ............................................................................................................................... 97
Chapter 5. Reusable Architecture Assets ................................................................................... 97
SOURCES OF ARCHITECTURE .......................................................................................... 97
AN ARCHITECTURE ASSET METAMODEL .................................................................... 98
ASSET TYPES ....................................................................................................................... 102
ATTRIBUTES OF AN ARCHITECTURE ASSET ............................................................ 112
OTHER REUSE CONSIDERATIONS ................................................................................ 115
SUMMARY ............................................................................................................................. 116
Chapter 6. Introduction to the Case Study ............................................................................... 116
APPLYING THE PROCESS ................................................................................................ 117
SCOPE OF THE CASE STUDY ........................................................................................... 120
APPLICATION OVERVIEW ............................................................................................... 125
THE YOURTOUR VISION .................................................................................................. 128
SUMMARY ............................................................................................................................. 133
Chapter 7. Defining the Requirements ..................................................................................... 133
RELATING REQUIREMENTS TO ARCHITECTURE .................................................... 137
FUNCTIONAL AND NON-FUNCTIONAL REQUIREMENTS ...................................... 139
TECHNIQUES FOR DOCUMENTING REQUIREMENTS ............................................. 141
APPLYING THE PROCESS ................................................................................................ 141
UNDERSTANDING THE TASK DESCRIPTIONS .......................................................... 143
DEFINE REQUIREMENTS: ACTIVITY OVERVIEW ..................................................... 143
PURPOSE .............................................................................................................................. 145
ROLES .................................................................................................................................... 145
STEPS..................................................................................................................................... 146
SUMMARY ............................................................................................................................. 188
Chapter 8. Creating the Logical Architecture .......................................................................... 189
MOVING FROM REQUIREMENTS TO SOLUTION ...................................................... 193
HOW MUCH LOGICAL ARCHITECTURE? ..................................................................... 195
APPLYING THE PROCESS ................................................................................................ 198
CREATE LOGICAL ARCHITECTURE: ACTIVITY OVERVIEW .................................. 199
PURPOSE .............................................................................................................................. 202
ROLES .................................................................................................................................... 202
STEP ....................................................................................................................................... 203
SUMMARY ............................................................................................................................. 272
Chapter 9. Creating the Physical Architecture ........................................................................ 272
MOVING FROM LOGICAL TO PHYSICAL ARCHITECTURE ...................................... 274
APPLYING THE PROCESS ................................................................................................ 276
CREATING THE PHYSICAL ARCHITECTURE: ACTIVITY OVERVIEW .................. 277
TASK: SURVEY ARCHITECTURE ASSETS .................................................................... 281
TASK: DEFINE ARCHITECTURE OVERVIEW .............................................................. 283
TASK: DOCUMENT ARCHITECTURE DECISIONS ...................................................... 285
TASK: OUTLINE FUNCTIONAL ELEMENTS ................................................................ 285
CONTAINERS ....................................................................................................................... 294
EJB INTERFACES ................................................................................................................ 294
SESSION, ENTITY, AND MESSAGE-DRIVEN EJBS ..................................................... 294
TASK: OUTLINE DEPLOYMENT ELEMENTS ............................................................... 299
TASK: VERIFY ARCHITECTURE ..................................................................................... 303
TASK: BUILD ARCHITECTURE PROOF-OF-CONCEPT ............................................. 304
TASK: DETAIL FUNCTIONAL ELEMENTS ................................................................... 305
TASK: DETAIL DEPLOYMENT ELEMENTS .................................................................. 307
TASK: VALIDATE ARCHITECTURE ............................................................................... 311
TASK: UPDATE SOFTWARE ARCHITECTURE DOCUMENT .................................... 312
TASK: REVIEW ARCHITECTURE WITH STAKEHOLDERS ...................................... 313
SUMMARY ............................................................................................................................. 313
Chapter 10. Beyond the Basics ................................................................................................. 314
THE ARCHITECT AND THE PROJECT TEAM .............................................................. 314
THE ARCHITECT AND EXTERNAL INFLUENCES ...................................................... 325
ARCHITECTING COMPLEX SYSTEMS ........................................................................... 330
SUMMARY ............................................................................................................................. 342
IN CONCLUSION: A NOTE FROM THE AUTHORS ..................................................... 343
Appendix A. Software Architecture Metamodel ......................................................................... 343
DEFINITION OF METAMODEL TERMS .............................................................................. 345
Appendix B. Viewpoint Catalog ................................................................................................ 348
STAKEHOLDER SUMMARY .............................................................................................. 350
BASIC VIEWPOINTS .......................................................................................................... 350
CROSS-CUTTING VIEWPOINTS ...................................................................................... 353
VIEW CORRESPONDENCE ............................................................................................... 355
Appendix C. Method Summary ................................................................................................. 357
ROLES .................................................................................................................................... 357
WORK PRODUCTS .............................................................................................................. 360
ACTIVITIES .......................................................................................................................... 362
TASKS .................................................................................................................................... 363
PHASES ................................................................................................................................. 367
Appendix D. Architectural Requirement Checklist ................................................................. 370
FUNCTIONAL REQUIREMENTS ...................................................................................... 371
USABILITY REQUIREMENTS .......................................................................................... 371
RELIABILITY REQUIREMENTS ...................................................................................... 372
PERFORMANCE REQUIREMENTS.................................................................................. 372
SUPPORTABILITY REQUIREMENTS ............................................................................. 372
CONSTRAINTS ..................................................................................................................... 373
Glossary ...................................................................................................................................... 375
References .................................................................................................................................. 383
INTRODUCTION
Bjarne Stroustrup, the inventor of the C++ programming language, once
said, “Our civilization runs on software.” Software does indeed touch
many aspects of our everyday lives and is found in something as simple as
a birthday card that sings “Happy Birthday” when opened through to the
ubiquitous cell phone and, of course, in very complex systems such as
airplanes and nuclear power stations. 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 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 the software business in some way.
The purpose of this book is to guide you through the tasks and associated
best practices that are applied in architecting a software system. In
meeting this objective, the book will address some basic questions, such
as these:
• What is an architecture?
• What is the role of the architect on a software development project?
• What is the relationship of the architect to the other project roles?
• What is the architect’s role with respect to requirements?
• How is an architecture described?
• When and how does the architect produce an initial architecture?
• How does the architect refine the architecture?
• When does the architect consider reuse?
• How is an architecture validated?
APPLYING THE PROCESS
In answering such questions, we present a series of best practices that are
manifest in the roles, tasks, and work products described throughout this
book.
These practices can be incorporated within any process you might use,
including those characterized as a waterfall process, an
iterative development process (such as the Rational Unified Process), or an
agile process (such as Scrum). As such, we don’t associate the practices
with any process in particular, although we do present the practices in a
sequence that allows us to demonstrate the relationships among them
and their relevance at different points in the project lifecycle. You are
encouraged to pick and choose those practices that will add the most
value to your projects and, of course, your architectures.
As you can see, the architecting activities sit between requirements and
development. The iteration starts with the definition of the software
requirements in the Define Requirements activity. Although this activity
is primarily the responsibility of the business analyst, the architect will
participate in some of the detailed tasks that comprise this activity. The
architect subsequently creates a first-cut architecture in the Create
Logical Architecture activity. The resulting architecture is independent
of any technology considerations and is referred to as the logical
architecture. Consider this a stepping stone in getting from the
requirements to a physical architecture, which is technology-specific and
forms the basis of implementation (coding). The logical architecture is
input to any detailed design that is performed in the Create Logical
Detailed Design activity. This activity results in the addition of any
remaining detail that may be required at a logical level but is not
considered to be architectural. For an explanation of the difference
between architecture and detailed design, see the sidebar “Concept:
Architecture versus Design.”
All architecture is design, but not all design is architecture. Architecture represents
the significant design decisions that shape a system, where significant is measured
by cost of change. (Booch 2009)
So let’s now look a little deeper into a few of these activities so that you
can better appreciate the role of the architect within the iteration. The
detailed tasks that comprise the Define Requirements activity are
shown in Figure 1.2. The iteration starts with the Collect Stakeholder
Requests task, which, as its name suggests, focuses on understanding the
needs of the various stakeholders. The requests provide the architect an
initial indication of the scope of the system to be architected. After a
vocabulary of terms is developed in the Capture Common
Vocabulary task, the Define System Context task is of particular interest
to the architect, because it defines the external elements that must
interact with the system, such as end users and other systems. Based on
this context, the Outline Functional Requirements and Outline Non-
Functional Requirements tasks identify the functional and non-
functional requirements, respectively. The architect is interested not only
in the key functional requirements, but also in the system qualities (such
as performance) and solution constraints that comprise the non-
functional requirements, which are often more challenging to address
than the functional requirements.
Figure 1.2. Tasks in the Define Requirements Activity
The architect is involved, to some extent, throughout the Define
Requirements activities to ensure that the requirements are specified in
a manner that can be realistically achieved with available technology,
within the required schedule, and within budget. This often requires a
degree of negotiation with stakeholders in which the architect actively
participates. As far as requirements tasks are concerned, the architect is
particularly involved in the Prioritize Requirements task, in which the
architect ensures that the priorities are influenced by those requirements
and risks that will allow the architecture to stabilize as soon as possible.
The tasks that comprise the Create Logical Architecture activity are
shown in Figure 1.3. Throughout this activity, the architect considers the
use of existing assets in the Survey Architecture Assets task. Even early
in the project, you may, as an architect, select an asset such as a reference
architecture that has a significant influence on your architecture. As each
task is performed, the architect captures those decisions in
the Document Architecture Decisions task.
Figure 1.3. Tasks in the Create Logical Architecture Activity
So there you have it—a complete iteration in terms of those tasks that
most influence the architecture! Much more detail exists behind each of
these tasks, which we briefly outline in this chapter. We elaborate on
these tasks and the architecture principles on which they are based in the
remainder of this book.
SCOPE
This book focuses on software-intensive systems. Thus, the
terms architecture, architect, and architecting, when unqualified, are
synonymous with the terms software architecture, software architect,
and software architecting, respectively. Although this book focuses on
software-intensive systems, several additional considerations are
discussed later in this book. It is important to remember, for example,
that a software-intensive system still needs hardware to execute and that
certain qualities, such as reliability or performance, are achieved only
through a combination of software and hardware. Therefore, this aspect
of the total solution cannot be ignored and will be considered in
subsequent discussions.
SUMMARY
This chapter focused on setting the scene for the remainder of the book.
Before diving into the details, we need to establish some core concepts,
which we use extensively in the remaining chapters. These concepts are
the role of the architect, the characteristics of the architecting tasks that
they perform, and the architecture that results. All these concepts are
described in Chapter 2.
ARCHITECTURE
There is no shortage of definitions when it comes to architecture. Even
some websites maintain collections of definitions (SEI 2009). The
definition used in this book is that taken from IEEE 1471-2000, IEEE
Recommended Practice for Architectural Description of Software-
Intensive Systems (IEEE 1471 2000). This definition follows, with key
characteristics highlighted:
This standard also defines the following terms related to this definition:
As you can see, the term component is used in this definition. Most
definitions of architecture do not define the term component, however,
and IEEE 1471 is no exception, choosing to leave it deliberately vague
because the term is intended to cover the many interpretations in the
industry. A component may be logical or physical, technology-
independent or technology-specific, large-grained or small-grained. For
the purposes of this book, we use the definition of component from the
Unified Modeling Language (UML) 2.2 specification:
A component represents 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). One component may therefore
be substituted by another only if the two are type conformant. (UML 2.2
2009)
You can see that although the definitions are somewhat different, they
have a large degree of commonality. Most definitions indicate that an
architecture is concerned with both structure and behavior, is concerned
with significant elements only, may conform to an architectural style, is
influenced by its stakeholders and its environment, and embodies
decisions based on rationale. All these themes and others are discussed in
the following sections.
If you were to ask someone to describe architecture to you, nine times out
of ten, that person would make some reference to something related to
structure, quite often in relation to a building or some other civil-
engineering structure, such as a bridge. Although other characteristics of
these items exist, such as behavior, fitness for purpose, and even
aesthetics, the structural characteristic is the most familiar and the most
often mentioned.
It should not surprise you, then, that if you ask someone to describe the
architecture of a software system that he or she is working on, you’ll
probably be shown a diagram that shows the structural aspects of the
system, whether these aspects are architectural layers, components, or
distribution nodes. Structure is indeed an essential characteristic of an
architecture.
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. The relative stability of the architecture
in the face of change, however, 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. Continual revision of the architecture due to relatively
minor changes is not a good sign. If the architecture is relatively stable,
however, the converse is true.
Just to give you an idea of the task at hand, consider the following needs
of a set of stakeholders:
• The needs of the end user are associated with intuitive and correct
behavior, performance, reliability, usability, availability, and security.
• The needs of the system administrator are associated with intuitive
behavior, administration, and tools to aid monitoring.
• The needs of the marketer are associated with competitive features,
time to market, positioning with other products, and cost.
• The needs of the customer are associated with cost, stability, and
schedule.
• The needs of the developer are associated with clear requirements and a
simple, consistent design approach.
• The needs of the project manager are associated with predictability in
the tracking of the project, schedule, productive use of resources, and
budget.
• The needs of the maintainer are associated with a comprehensible,
consistent, and documented design approach, as well as the ease with
which modifications can be made.
Another challenge for the architect, as you can see from this list, is that
the stakeholders are not concerned only that the system provide the
required functionality. Many of the concerns that are 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; they are discussed in
detail in Chapter 7, “Defining the Requirements.”
Also, some of these decisions may have been imposed on the architect
and, in this sense, represent constraints on the solution. A companywide
policy to use particular technologies and products may exist, for example,
and this policy needs to be accommodated in the solution.
An Architecture May Conform to an Architectural Style
Most architectures are derived from systems that have a similar set of
concerns. This similarity can be described as an architectural style, a term
borrowed from the styles used in building architectures. You can think of
an architectural style as being a particular kind of pattern, albeit an often
complex and composite pattern (several patterns applied together).
It is also worth noting that every system has an architecture, even if this
architecture is not formally documented or if the system is extremely
simple and, say, consists of a single element. Documenting the
architecture usually has considerable value; this topic is discussed in
detail in Chapter 4, “Documenting a Software Architecture.”
Many kinds of architecture exist, the best known being the architecture
associated with buildings and other civil-engineering structures. Even in
the field of software engineering, you often come across different forms of
architecture. In addition to the concept of software architecture, for
example, you may encounter concepts such as enterprise
architecture, system architecture, information architecture, hardware
architecture, application architecture, infrastructure architecture, and data
architecture. You also hear other terms mentioned. Each of these terms
defines a specific scope of the architecting activities.
Unfortunately, the industry has come to no agreement on the meanings of
all these terms or their relationships to one another, resulting in different
meanings for the same term (homonyms) and two or more terms that
mean the same thing (synonyms). You can infer the scope of some of
these terms, as used in this book, from Figure 2.4, in which we focus on
the architecture of software-intensive systems. As you consider this figure
and the discussion that follows it, you will almost certainly find elements
that you disagree with or that you use differently within your
organization. Consider this example to be an acknowledgment of (and one
interpretation of) several possible scopes of architecting activities.
Inspiration for the elements shown in Figure 2.4 came from various
sources. IEEE Std 12207-1995, the IEEE Standard for Information
Technology—Software Life Cycle Processes, defines a system as follows:
[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 2003)
Now that you’ve gotten through these definitions, you may have 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, no set of agreed-on
answers to these questions exists. For now, be aware that these different
terms exist but that the industry has no consistent definition of these
terms and how they relate to one another. We recommend, therefore, that
you select the terms that are relevant to your organization and define
them appropriately. Then you will achieve some consistency, at least, and
reduce the potential for miscommunication.
ARCHITECT
Now that we have defined what we mean by architecture, we can turn our
attention to the role that is responsible for the creation of the
architecture: the architect. The role of the architect is arguably the most
challenging in any software development project. The architect is the
technical lead on the project and, from a technical perspective, ultimately
carries responsibility for the technical success or failure of the project.
[An architect is] the person, team, or organization responsible for systems
architecture. (IEEE 1471 2000)
As the technical lead on the project, the architect must have skills that are
typically broad rather than deep (although architects should have deep
skills in particular areas).
First and foremost, the architect is a technical leader, which means that in
addition to having technical skills, the architect exhibits leadership
qualities. Leadership can be characterized in terms of both position in the
organization and the qualities that the architect exhibits.
In terms of the qualities that the architect exhibits, leadership can also be
characterized in terms of interactions with other team members.
Specifically, the architect should lead by example and show confidence in
setting direction. Successful architects are people-oriented, and all
architects take time to mentor and train members of their team. This
practice benefits the team members in question, the project, and
ultimately the organization itself, because some of its most valuable
assets (people) become better skilled.
There is a difference between a role and a person. One person may fulfill
many roles (Mary is a developer and a tester), and a role may be fulfilled
by many people (Mary and John fulfill the role of tester). Given the
requirement for a very broad set of skills in an architect, it is often the
case that the architect role is fulfilled by more than one person. This
practice allows the skills to be spread across several people, each bringing
his or her own experiences to bear. In particular, the skills required to
understand both the business domain and various aspects of technology
are often best spread across several people. The resulting team needs to
be balanced, however.
Throughout this book, the term architect refers to the role, which may be
fulfilled by either an individual or a team.
[A team is] a small number of people with complementary skills who are
committed to a common purpose, performance goals, and approach for
which they hold themselves mutually accountable. (Katzenbach 1993)
Good architects know their strengths and weaknesses. Whether or not the
architect role is fulfilled by a team, an architect is supported by several
trusted advisors. Such architects acknowledge where they are weak and
compensate for these weaknesses by obtaining the necessary skills or by
working with other people to fill the gaps in their knowledge. The best
architectures usually are created by a team rather than an individual,
simply because there is greater breadth and depth of knowledge when
more than one person is involved.
Most architects have been developers at some point and should have a
good appreciation of the need to define and endorse best practices used
on the project. More specifically, the architect should have an
appreciation of the software development process, because this process
ensures that all the members of the team work in a coordinated manner.
Although architecting is not confined solely to design (as you have seen,
the architect is also involved in requirements tasks), design clearly is the
core aspect of architecting. The architecture embodies key design
decisions, so the architect should possess strong design skills. Such
decisions could represent key structural design decisions, the selection of
particular patterns, the specification of guidelines, and so on. To ensure
the architectural integrity of the system, these elements are typically
applied across the board and can have farreaching effects in terms of the
success of the system. Therefore, such elements need to be identified by
someone who has the appropriate skills.
One does not acquire design prowess overnight; instead, such skill is the
result of years of experience. Even expert designers look back on their
early work and shudder at how bad it was. As with every other skill, one
must practice design in order to obtain proficiency. (Coplien 2005)
Of all of the soft skills associated with the architect, communication is the
most important. Effective communication involves several dimensions,
and the architect needs to be proficient in all of them. Specifically, the
architect should have effective verbal, written, and presentation skills.
Also, the communication should be two-way. The architect should be a
good listener and a good observer also.
Successful architects are not only concerned with technology. They also
are politically astute and conscious of where the power in an organization
resides. They use this knowledge to ensure that the right people are
communicated with and that support for a project is aired in the right
circles. Ignoring organizational politics is, quite simply, naïve.
Human beings tend not to all think alike; in order to resolve differences of
opinion, a political process is unavoidable. So, rather than condemn it, it is
better to understand politics as an effective means of dealing with the
inevitable need to resolve differences of opinion. (Marasco 2004)
ARCHITECTING
Having described what an architecture is, and having defined the
characteristics of the architect role, now we can look at some of the
themes, or characteristics, that underlie the process of architecting. We
will not go into the detail of each task, because this detail is covered
throughout the remainder of this book. Also, those characteristics of
architecting that can be described in terms of benefits are described later
in this chapter.
The relationships in this metamodel that are taken directly from the IEEE
1471 standard, in words, are
A side benefit of the IEEE 1471 standard is that it not only applies to
documenting a software architecture, but also can be thought of as being
a reasoning framework for concepts that architects need to be concerned
with in their work. Additional relationships in the figure that are not part
of the IEEE 1471 standard are
Architecting Is a Science
There is still some way to go, however, before the process of software
architecting is anywhere near as mature as, for example, the processes in
civil engineering. This maturity can be considered in many dimensions,
including the use of standards and an understanding of best practices,
techniques, and processes.
Architecting Is an Art
Given the many factors that influence an architecture, it is clear that the
process of architecting involves making trade-offs. Quite often, the trade-
off is between conflicting requirements, and the stakeholders may need to
be consulted to assist in making the correct trade-off. An example of a
trade-off is between cost and performance; throwing more processing
power at the problem will improve performance, but at a cost. This may
be a conflict in requirements and, assuming that the architect has been
diligent in his or her work by exploring all options, is a matter that needs
to be resolved with the stakeholders whose needs are in conflict.
Other trade-offs occur in the solution space. The use of one technology
over another, one third-party component over another, or even the use of
one set of patterns over another are all trade-offs concerned with the
solution rather than the requirements. Making trade-offs is not something
that the architect can or should avoid. The architect is expected to
consider alternatives, and making trade-offs among them is an essential
aspect of the process of architecting.
Figure 2.7 provides a simple classification of some of the forces at work in
architecting a solution. In addition to the function provided by the system,
you must be concerned with nonfunctional requirements that include
run-time qualities (such as performance and usability), non-run-time
qualities (such as maintainability and portability), business constraints
(such as regulatory and resource constraints), and technical constraints
(such as mandated technology standards and mandated solution
components).
Figure 2.7. Making Trade-Offs Addresses Opposing Forces
Architects rarely work from a blank sheet of paper. As noted earlier, they
actively seek experience that may be codified in architectural patterns,
design patterns, off-the-shelf components, and so on. In other words, the
architect seeks out reusable assets. Only the most ignorant architect does
not consider what has gone before.
Much of this support is derived from the fact that the architecture
identifies the significant components in the system and the relationships
among them. Consider the UML component diagram in Figure 2.8, which
has been kept deliberately simple for the purposes of this discussion. This
figure shows four components with dependencies among them.
Figure 2.8. UML Component Diagram Showing Architecturally Significant Elements
For the purposes of this discussion, consider a simple case in which each
component is always implemented in its entirety (that is, we do not create
partial implementations of each element, and no separation of interface
from implementation exists). In terms of scheduling, the dependencies
imply an order in which each of these elements should be considered.
From an implementation perspective, for example, the dependencies tell
you that the Error Log component must be implemented before anything
else, because all the other components use this component. Next, the
Customer Management and Fulfillment components can be implemented
in parallel because they do not depend on each other. Finally, when these
two components have been implemented, the Account Management
component can be implemented. From this information, you can derive
the Gantt chart (one of the conventional planning techniques used by a
project manager) shown in Figure 2.9. The duration of each of the tasks
shown does require some thought but can be derived partially from the
complexity of each of the architectural elements.
Figure 2.9. Gantt Chart Based on Dependencies among Architecturally Significant
Elements
The architect can also assist in the cost estimation for the project. The
costs associated with a project come from many areas. Clearly, the
duration of the tasks and the resources allocated to the task allow the cost
of labor to be determined. The architecture can also help determine costs
related to the use of third-party components to be used in the delivered
system. Another cost is derived from the use of particular tools that are
required to support the creation of the architectural elements.
Architecting also involves prioritizing risks and identifying appropriate
risk mitigation strategies, both of which are provided as input to the
project manager.
The architect must also define the appropriate practices, standards, and
guidelines that will guide the designers and implementers in their work.
Another objective of architecting is eliminating unnecessary creativity on
the part of the designers and implementers, and this objective is achieved
by imposing the necessary constraints on what designers and
implementers can do, because deviation from the constraints may cause
breakage of the architecture. Still another aspect of architecting that helps
ensure architectural integrity is the adoption of appropriate review and
assessment activities that confirm adherence to architectural standards
and guidelines by designers and implementers.
We discuss architecture assessment further in Chapter 8, “Creating the
Logical Architecture,” and Chapter 9, “Creating the Physical Architecture.”
Systems today are more complex than ever, and this complexity needs to
be managed. As mentioned earlier in this chapter, because an architecture
focuses on only those elements that are significant, it provides an
abstraction of the system and therefore provides a means of managing
complexity. Also, the process of architecting considers the recursive
decomposition of components, which is clearly a good way of taking a
large problem and breaking it down into a series of smaller problems.
The architect should consider the areas of the system that are most likely
to require change and then isolate them. This process can be fairly
straightforward if the change affects a single component or a small
number of components. Some changes, however, such as those relating to
system qualities such as performance or reliability, cannot be isolated in
this way. For this reason, the architect must consider any likely future
requirements when architecting the current system. Scaling up a system
to support thousands of users rather than the tens of users for which the
system was originally designed may not be possible without changing the
architecture in fundamental ways, for example.
SUMMARY
This chapter defined and explained the core concepts used throughout
this book: architecture, architect, and architecting. The benefits of taking
an architecturecentric approach to the software development process
were also discussed. Many issues remain unresolved, however, such as
what the architect actually does on a software development project, what
the architect produces, and how the role of the architect relates to other
project roles.
Having discussed some core concepts, we now turn our attention to some
of the details that underpin the process of architecting, such as work
products, tasks, and roles. To provide this summary, we consider various
architecture related best practices that have developed in the software
industry and draw on elements of various approaches, including the
Rational Unified Process, IBM Unified Method Framework, OpenUP,
eXtreme Programming (XP), Scrum, Feature-Driven Development (FDD),
and Lean. We also consider relevant standardization initiatives, such as
the Software and Systems Process Engineering Metamodel Specification
(SPEM).
KEY CONCEPTS
For subsequent discussion in this chapter to make sense, it is important
for us to establish some basic concepts present in a method. The Software
and Systems Process Engineering Metamodel Specification (SPEM) Object
Management Group (OMG) standard (SPEM 2007) can help, because it
provides definitions of such concepts, and we use them in this book. The
SPEM standard is influenced by and supports several existing software
development methods, including OpenUP (OpenUP 2008), the Rational
Unified Process (RUP 2008), IBM Unified Method Framework, Fujitsu
DMR Macroscope, and Unisys QuadCycle.
METHOD CONTENT
As we mention in the preceding section of this chapter, method content
refers to the roles, work products, and tasks that comprise the method
being followed.
Role
The primary role for a given task is considered to be responsible for the task and is
never optional. A secondary role is considered to contribute to the task but is not
responsible for it and may be considered optional.
Work Product
The SPEM defines three types of work products: artifact, deliverable, and
outcome. An artifact is a tangible work product, such as a document,
model, source code, executable, or project plan. A deliverable is also a
tangible work product that represents content packaged for delivery.
Deliverables are used to represent a work product that is of value
(material or otherwise) to a stakeholder. An outcome represents a result
or state as the result of task execution. Unlike artifacts and deliverables,
outcomes do not represent potentially reusable assets.
Although not shown in Figure 3.4, there are also work products that the
architect contributes to but does not own, such as the Prioritized
Requirement List. Another example is the RAID Log work product,
which the architect contributes to but which is owned by the Project
Manager. As you would expect, a correlation exists between the role that
is responsible for a task and the ownership of any work products that are
output. The Business Analyst is responsible for the Collect Stakeholder
Requests task and is the owner of the Stakeholder Requests work
product, for example.
Activity
Task
Iterative Processes
[An iteration is a] short and set duration division of a project. Iterations
allow you to demonstrate incremental value and obtain early and
continuous feedback. (OpenUP 2008)
Figure 3.8 illustrates how the focus of a project shifts across successive
iterations. In this figure, you see that each discipline is addressed during
every iteration, and the size of the boxes within each of the disciplines
illustrates the relative time spent performing the activities (and tasks)
within that discipline. In this simple example, you see that iteration 1
focuses on requirements definition, but some architecting is performed
(focusing on the highest-priority requirements to be considered in the
iteration), together with some development and testing. In this example,
iteration 2 focuses on stabilizing the architecture, which is why you see
the emphasis on the architecting activities. Iteration 3 focuses on
completing the solution based on a relatively stable set of requirements
and architecture, which is why you see an emphasis on development and
testing.
A very common mistake is for the Project Manager to declare victory by stating
that a phase has been completed when it really hasn’t, simply because the date on
which the phase should have been completed has been reached. This scenario is
the software equivalent of false accounting, and Project Managers who cook the
books in this manner often become unstuck as their misguided decisions come
back to haunt them.
It usually is far better for a Project Manager to bite the bullet and convey the
news that the phase has not been completed as planned, rather than delude
themselves, and everyone else, that everything is on track—a situation that
normally results in additional and unnecessary pressure being placed on the
project.
This is not to say that all the requirements have been defined by the end
of elaboration or that requirements never change, but the majority of
requirements are expected to have been defined, and any changes are
expected to have minimal impact on the architecture. Should this not be
the case (when a significant requirement is added, for example), a case
exists for reviewing the project and its timeline and adjusting accordingly.
This may require essentially resetting the project and possibly revisiting
the elaboration (and even inception) phase.
• The Inception phase is where the business case for the project is
established and where concurrence among all stakeholders on the
objectives for the project is established. Inception is where the focus is on
ensuring that the project is both valuable and feasible.
• The Elaboration phase is where the architecture is established to
provide a stable foundation for the activities performed during the
Construction phase. This phase, therefore, is of particular relevance to the
architect and certainly is where the architect expends the most effort.
• The Construction phase is where the remaining requirements are
clarified and where development of the system is completed on the
baselined architecture established during the Elaboration phase. Between
the Elaboration and Construction phases, the focus shifts from
understanding the problem and identifying key elements of the solution
to developing a deployable product.
• The Transition phase ensures that the software is available to, and
accepted by, its end users. This phase is where the system is deployed in
the users’ environment for evaluation and testing. The focus is on
finetuning the product and on addressing configuration, installation, and
usability issues. By the end of the Transition phase, the project should be
in a position to be closed out.
Iterative Development and Waterfall Development
Agile Processes
There seems to be a fear in the agile community that if we use terms such
as “model” or “document” that suddenly the “evil bureaucrats” will dig
their claws into our projects and force us to write detailed, big
requirements specifications or to take a big-design-up-front approach . . .
the strange thing is that agilists are, in fact, modeling on a regular basis,
even though they’re not directly talking about it. (Ambler 2008)
SUMMARY
This chapter provided a brief overview of the method fundamentals used
in this book, using the Software and Systems Process Engineering
Metamodel Specification (SPEM) standard as a framework for explaining
these concepts. The chapter emphasized the distinction between method
content and the processes that enact this content, and considered
different types of processes, including waterfall, iterative, and agile. The
chapter discussed the relevance of these concepts to the architect and to
the process of architecting. The method used in this book borrows from
all these types of processes.
The concepts of viewpoint, view, and model are discussed in detail in the
next section.
KEY CONCEPTS
The key architecture description concepts are viewpoint, view, and model.
These concepts are defined in IEEE 1471-2000, IEEE Recommended
Practice for Architectural Description of Software-Intensive
Systems. Figure 4.2 shows a subset of the elements defined in this
standard. This figure expands on the discussion in Chapter 2,
“Architecture, Architect, Architecting,” by specifically identifying those
elements that are related to an architectural description.
As you can see, the concepts of viewpoint, view, and model are
fundamental to describing a software architecture, and all of them are
described in more detail in the following sections.
Basic Viewpoints
Cross-Cutting Viewpoints
In practice, the authors have found that focusing on both basic and cross-
cutting views provides us a simple mental model for considering certain
aspects of our architecture and can ensure that appropriate emphasis is
placed on key architectural characteristics throughout the project life
cycle.
Views and Diagrams
Consider a Boeing 747 jumbo jet, which consists of more than 6 million
parts that weigh hundreds of thousands of pounds, contains wiring that
runs more than 160 miles, has a cockpit that contains hundreds of control
items, and can carry hundreds of passengers thousands of miles nonstop.
Boeing produced more than 75,000 engineering drawings when the first
747 was designed in the 1960s. If each diagram were a view, the result
would be not only an explosion of views (because many diagrams would
be involved), but also an unmanageable number of diagrams. Therefore,
different diagrams often target the same set of concerns and should be
considered as a group. Each group of diagrams is considered to be a view,
given our definitions. In essence, a view is a window onto the whole
architecture from a particular vantage point.
MODELS
Model is the term used in the IEEE 1471 standard to represent a work
product that participates in a view. Models contain the specific elements
that are present within a view. A good example of a model is a mockup of
an airplane that is placed in a wind tunnel to get a better understanding of
its aerodynamic properties. As you will see, in terms of purpose, there is
no difference between this example and the creation of models that
represent different aspects of a software system, in that a model
represents an abstraction of the system under consideration.
Figure 4.6 shows the relationship among views, diagrams, and models. As
you can see from this figure, models may be shared across views.
Specifically, although the functional view presents elements in
the Functional Model and the deployment view presents elements in
the Deployment Model, you can also see that the deployment view
presents elements in the Functional Model because we want to show the
deployment of components (from the Functional Model) to nodes (from
the Deployment Model).
The same thinking can be applied to other models. The Data Model, for
example, can be considered in terms of a logical data model (that
identifies entities and their relationships) or in terms of a physical data
model (that also acknowledges implementation concerns, such as index
tables and stored procedures that improve the performance of data
access). This thinking is reflected in Figure 4.7. If appropriate, the
architect may also choose to retain the logical models and create separate
physical models. This topic is discussed further in Chapter 8, “Creating the
Logical Architecture.”
Figure 4.7. Views, Models, and Levels of Realization
Benefits of Models
The purpose of this section is to set the scene for the architecture
description framework used in this book by examining specific
characteristics that are exemplified in certain architecture description
frameworks in use today and to put some meat on the bones of the earlier
discussion. This section is not intended to be a comprehensive discussion
of all architecture description frameworks that you may encounter—
simply those that help demonstrate a particular characteristic. The
characteristics emphasized in this section are
• Multiple views and the use of a scenarios view, taken from Philippe
Kruchten’s “The “4+1” View Model of Software Architecture” (Kruchten
1995)
• Levels of realization, taken from the Zachman Framework, created by
John Zachman (Zachman 1987)
• Cross-cutting concerns, taken from Software Systems Architecture:
Working with Stakeholders Using Viewpoints and Perspectives (Rozanski
2005)
• The logical view is the object model of the design (when an object-
oriented design method is used).
• The process view captures the concurrency and synchronization aspects
of the design.
• The development view describes the static organization of the software
in its development environment.
• The physical view describes the mapping(s) of the software to the
hardware and reflects its distributed aspect.
• The description of an architecture is illustrated by a few selected use
cases or scenarios that become a fifth view (the scenarios view).
Zachman Framework
The perspectives described (although not all are shown in Figure 4.10)
are
• Security.The ability of the system to control, monitor, and audit reliably
who can perform what actions on what resources, and to detect and
recover from failures in security mechanisms.
• Performance (and scalability).The ability of the system to execute
predictably within its mandated performance profile and to handle
increased processing volumes.
• Availability (and resilience).The ability of the system to be fully or
partly operational as and when required, and to handle effectively failures
that could affect system availability.
• Evolution.The ability of the system to be flexible in the face of the
inevitable change that all systems experience after deployment, balanced
against the costs of providing such flexibility.
• Accessibility.The ability of the system to be used by people with
disabilities.
• Development resource.The ability of the system to be designed, built,
deployed, and operated within known constraints around people, budget,
time, and materials.
• Internationalization.The ability of the system to be independent of any
particular language, country, or cultural group.
• Location.The ability of the system to overcome problems brought about
by the absolute locations of its elements and the distances between them.
• Regulation.The ability of the system to conform to local and
international laws, quasilegal regulations, company policies, and other
rules and standards.
• Usability.The ease with which people who interact with the system can
work effectively.
Therefore, for any given system, you may remove or add views as
required. If you are building a system that always executes on a single
node, for example, you can ignore the deployment view (which considers
distribution). Conversely, you may choose to add views if you require a
particular emphasis that is not an inherent consideration of the
architecture description you selected, such as adding an evolution view if
system evolution is a primary concern of the architecture.
Work Products
In the “Models” section earlier in this chapter, we state that a view refers
to elements contained in one or more models (work products) and that a
model may participate in one or more views. Figure 4.12 shows the
following work products, which are used in the architecture description
framework that we use in this book:
Levels of Realization
• Front matter (title page, change history, table of contents, list of figures,
references)
• Objectives of the Software Architecture Document
• Overview of the Architecture
• Architecture Decisions
• Requirements View
• Functional View
• Deployment View
• Validation View
• Application View
• Infrastructure View
• Systems Management View
• Availability View
• Performance View
• Security View
• Appendices
SUMMARY
This chapter discussed many of the fundamental concepts in documenting
a software architecture, including views and viewpoints and their
relationships with the underlying work products. We also presented an
architecture description framework that builds on proven practices when
documenting a software architecture.
SOURCES OF ARCHITECTURE
Inspiration for deriving an architecture comes from many places and
varies depending on many factors, including the novelty of the system, the
method being followed, and the skills of the architect. This was succinctly
described in “Mommy, Where Do Software Architectures Come From?”
(Kruchten 1995-2), where the author suggests three main sources of
architecture: theft, method, and intuition, as shown in Figure 5.1.
The relative widths of the arrows shown in Figure 5.1 also provide an
indication of the relative emphasis of the three sources, depending on the
novelty of the system. A classical system may comprise 80 percent theft,
19 percent method, and 1 percent intuition, and an unprecedented
system may comprise 30 percent theft, 50 percent method, and 20
percent intuition. In both cases, the reuse of existing assets is significant.
Put another way, a good architect does not reinvent the wheel.
Development-Time Assets
Run-Time Assets
The asset metamodel described in this chapter characterizes the majority of assets
as being either development-time assets or run-time assets. In general terms, this
characterization is based on the level of articulation. A development-time asset has
no concrete run-time implementation, whereas a run-time asset does.
Almost all assets, however, exhibit their influence at both development-time and
run-time. A design pattern may not have a concrete implementation, but run-time
elements and interactions may conform to the pattern. Similarly, a packaged
application has a concrete implementation, but you also need to consider this
element in any architecture models at development time.
ASSET TYPES
This section contains a detailed description of each of the assets in the
meta-model described in the preceding section, in the sequence in which
they were introduced.
Reference Architecture
Development Method
Viewpoint Catalog
Architectural Style
Architectural Mechanism
Pattern
Reference Model
Architecture Decision
[Architecture decisions are] conscious design decisions concerning a
software system as a whole, or one or more of its core components. These
decisions determine the non-functional characteristics and quality factors
of the system. (Zimmermann 2008)
Architects make decisions throughout the project life cycle, and the
decision rationale may come from experience, method, or some other
asset. Nevertheless, thinking of an architecture decision as a first-class
reusable asset can help ensure that you don’t reinvent the wheel by
retracing steps already taken by other architects. Architectural decisions
often are more informative than the final architectural solution, because
they typically discuss alternatives considered and the rationale for
choosing the option selected.
Existing Application
A cynic is a man who knows the price of everything but the value of
nothing.
—Oscar Wilde
The level of reuse clearly is very high when you incorporate existing
applications into your architecture, and the effort in this area is focused
on integration rather than custom development. This integration is
sometimes referred to as legacy integration or enterprise application
integration (EAI).
Packaged Application
The selection of such a significant asset may also have a bearing on the
approach you take to developing the system under consideration.
Selecting a packaged application may result in the application of different
software development practices than if you were integrating a legacy
system or building custom code. Quite often, architects take a hybrid
approach, because many software development projects apply many
types of reusable assets concurrently.
Application Framework
Component Library/Component
This is all well and good, but granularity and articulation are just two
attributes that may be of interest. If the purpose of assigning attributes to
particular types of assets is to help a potential consumer locate the asset,
you may want to consider many more attributes. A basic set of attributes
that are relevant to any asset includes
Attributes related to the context within which the asset is applied include
Achieving successful asset reuse involves more than just resolving the
purely technical challenges, of course. Specifically, we’ve not gone into
any detail regarding the roles that may exist in an organization in support
of a strategic reuse initiative, the tasks that are performed (especially
around the creation, use, and maintenance of assets), and any specific
work products that specifically support a reuse initiative (such as an asset
catalog). There are also broader implications at an organizational level,
such as the embedding of a reuse culture and assessing what level of
reuse culture is practical or beneficial to the organization.
SUMMARY
Many types of reusable assets are at the disposal of software architects,
and the use of such assets can improve project performance dramatically
when the assets are applied correctly. This chapter provided an overview
of commonly encountered assets available to architects in their work, as
well as a discussion of asset attributes.
The first elements that need to be right-sized are those that comprise
the method content: the roles, tasks, and work products. The obvious
question that must be asked is “How much of each of these items do we
need?” The answer, of course, is “It depends.” A general comment is
that all elements should be considered and then right-sized. Examples of
right-sizing for two fictitious projects, small and large, are given in Table
6.1. In these examples, we consider the selection of viewpoints, which is
discussed further in the sidebar “Best Practice: Select the Relevant Set of
Viewpoints.”
The reason for such flexibility is that most elements of a project are rarely
made concrete at the start. The scope and requirements often evolve (and
are even discovered) as the project progresses, for example. The
architecture in turn also evolves over time. The involvement of different
roles in the project therefore varies over time, in line with the emphasis
on the associated tasks. We discuss this topic further in Chapters
7 through 9.
• A data (or information) viewpoint that places a specific focus on the persistent
data in the system. Such concerns are considered to be part of the functional
viewpoint in this book.
• A user experience viewpoint that places an emphasis on capturing the
interactions that the user has with the system through one or more user interfaces.
User experience modeling is introduced in Building Web Applications with
UML, 2nd ed. (Conallen 2003).
• A concurrency viewpoint that considers concurrency and synchronization
elements, such as executable processes and threads in the system. Concurrency is
one of the viewpoints in “The ‘4+1’ View Model of Software Architecture”
(Kruchten 1995).
• A development viewpoint that describes the static organization of the software in
its development environment. This viewpoint is also one of the viewpoints in “The
‘4+1’ View Model of Software Architecture” (Kruchten 1995).
Although the process described in this book can be applied to many types
of initiatives, we have confined ourselves to a single case study, which
allows us to exemplify the key tasks in which the architect is involved. An
“at a glance” characterization of this case study is provided in Table 6.2.
Although this set of characteristics could never fit all projects perfectly,
we do believe that the tasks described in this book can be adjusted
appropriately for any given situation, including the extent to which each
task is applied. We discuss additional considerations in dealing with
complex systems in Chapter 10, “Beyond the Basics.” Table 6.2 uses the
terms brownfield and greenfield, which are discussed in the sidebar
“Concept: Brownfield and Greenfield Development.”
• The Project Manager is responsible for leading the project team that
will deliver the solution by applying a range of project management
principles, tools, and techniques. The Project Manager has overall
responsibility for managing scope, cost, schedule, and contractual
deliverables, as well as for the management of issues, risks, and change.
• The Business Analyst is responsible for identifying and documenting
requirements and for analyzing these requirements from a business
perspective. The person in this role defines current and future
operational scenarios (processes, models, use cases, plans, and solutions),
and works with the stakeholders and the architects to ensure proper
translation of business requirements into IT solution requirements.
• The Developer is responsible for performing detailed design tasks,
defining the organization of the implementation, implementing the
detailed design elements, unit-testing the implementation, integrating his
work with that of other developers, and ultimately producing an
executable system.
• The Tester is responsible for finding and documenting defects in
software quality, generally advising about perceived software quality, and
validating that the system functions as designed and as required.
Complementing the unit testing performed in the development discipline,
the Tester focuses on the integrated units provided by the developers
and the system as a whole.
• The Lead Architect has overall responsibility for the major technical
decisions that define the architecture of the system. The person in this
role also is responsible for providing rationale for these decisions,
balancing the concerns of the various stakeholders, managing technical
risks and issues, and ensuring that decisions are effectively
communicated, validated, and adhered to.
• The Application Architect focuses on those elements of a system that
automate business processes and meet business needs. The person in this
role focuses primarily on satisfying the functionality required by the
business but also is concerned with how the application-related elements
meet the non-functional requirements of the system (qualities and
constraints).
• The Infrastructure Architect concentrates on those elements of the
system that are independent of business functionality, such as a
persistence mechanism, hardware, and middleware. Such elements
support the execution of the application-related elements. The person in
this role focuses on elements that have a significant bearing on the
qualities exhibited by the system and, therefore, the extent to which
certain non-functional requirements are addressed.
• The Data Architect focuses on the data elements of a system, especially
data that is made persistent in an appropriate mechanism, such as a
database, a file system, a content management system, or some other
storage mechanism. The person in this role defines appropriate data-
related properties, such as structure, source, location, integrity,
availability, performance, and age.
External Influences
From a more technical perspective, you also may have access to the
following work products or similar ones. Such work products help guide
and constrain the creation of any applications produced in the
organization but are not specific to any particular application.
The case study assumes that both business and technical inputs are readily
available. In some situations, however, this is not the case. If these inputs are not
available, the project team (and the architect in particular) needs to determine
how to proceed without these inputs or whether to produce these items within the
project itself.
APPLICATION OVERVIEW
YourTour is a company that connects tour organizers with prospective
customers. The YourTour offering is unique in that it not only allows
multiple locations to be defined for a tour, but also provides flexibility in
terms of the accommodations and transportation required by each
participant in the tour. Suppose that the tour organizer wants to define a
wildlife-watching tour that takes in four locations. The YourTour
application not only allows the tour organizer to define the itinerary in
terms of the locations to be visited (and the associated dates), but also
allows each tour participant flexibility in terms of both accommodations
and transportation based on availability (choosing a four-star hotel over a
two-star hotel or traveling by train rather than by air, for example).
Another example is a sightseeing tour that takes in several locations in
the same country or continent.
Problem Statement
Stakeholders
A stakeholder is an individual, team, or organization (or classes thereof)
with interests in, or concerns relative to, a system. (IEEE 1471 2000)
Qualities
Constraints
SUMMARY
As we mention in the introduction to this chapter, the information
presented here is commonly found in work products such as a Business
Entity Model, Business Process Model, Business Rules, Existing IT
Environment, Enterprise Architecture Principles, and Vision. The
content of the Vision in particular represents a first approximation of
what the YourTour application should provide and is used as a major
input to the project go/no-go decision. If the project goes ahead, this
information often becomes the basis for the development of more
detailed requirements, as described in Chapter 7, “Defining the
Requirements.”
In this chapter, and for the purpose of this book, we assume that several
work products are provided as input to, and are output from, the Define
Requirements activity, as shown in Figure 7.1. The Define
Requirements activity (introduced in Chapter 1, “Introduction”)
comprises the tasks described in detail in this chapter.
Figure 7.1. Input and Output Work Products of the Define Requirements Activity
The input work products, which we discuss briefly in Chapter 6,
“Introduction to the Case Study,” are as follows:
• The element is associated with some critical functionality of the system, without
which you do not have a viable system.
• The element is associated with some critical quality of the system, such as
performance, without which you do not have a viable system.
• The element is associated with a critical constraint on the solution, such as the
need to integrate with a specific external system.
• The element incurs a particular technical risk.
• The element presents a particular architectural challenge.
ROLES
Application Architect (secondary), Business Analyst, Infrastructure Architect
(secondary), Stakeholder
STEPS
• Identify stakeholders.
• Collect stakeholder requests.
• Prioritize stakeholder requests.
ROLE OF THE ARCHITECT
• Ensure that the more technical roles, such as System Administrator, are
considered.
• Ensure that the more technical requirements, such as qualities and constraints,
are captured.
• Articulate the implications of a requirement on the solution, in terms of cost, time
to market, and the like.
• Assist with the prioritization of requests by explaining the impact of prioritizing
a request one way or another.
The first step in this task is to determine the stakeholders that will
participate in the request-gathering activities. The complete set of
stakeholders is normally provided in a work product, such as
a Vision document, that is input to this activity. A Business Process
Model may also provide inspiration for stakeholders, because such a
model will contain a description of the business activities that the system
will support and, therefore, the associated business roles that may
represent stakeholders that you should consider.
• Application Owner
• Application Provider
• Business Administrator
• Customer
• Maintainer
• Supplier
• Support Personnel
• System Administrator
• Tour Organizer
It is all too easy to overlook a stakeholder when you are in the throes of
requirements elicitation. Therefore, there is value in maintaining and applying a
checklist of stakeholders that should be considered for any software development
effort.
Various pitfalls that can ensue when using such a questionnaire, and
when gathering requests in general, and a summary of these pitfalls is
provided in the following “Pitfall” sidebars.
Another pitfall is that requests are too general. A request may state that the
response time of any transaction is less than three seconds, for example. More
likely, however, the response time for specific transactions must conform to this
particular request, while other transactions take significantly longer. If you don’t
make requests as specific as possible, and these requests ultimately become
requirements, elements of the system are likely to be overengineered, as these
elements will be designed based on requirements that may not apply.
Pitfall: Requests Are Not Measurable
Another pitfall sometimes occurs when all the questions are being posed to all the
stakeholders. Many types of stakeholders have input to the request gathering
process, and you need to ask the right questions of the right people. The ability to
license elements of the system, for example, is a request that will be specified by
product management (and may be a request captured within your organization).
The usability of the system, however, may be specified by an end user (and may be
a request captured outside your organization).
Architects have a role to play in this reconciliation because they are often
in the best position to articulate the impact of prioritizing a request one
way or another in terms of factors, such as cost and time, to implement.
PURPOSE
The purpose of this task is to ensure that common business and technical terms
used by stakeholders are understood and documented.
ROLES
Application Architect (secondary), Business Analyst, Infrastructure Architect
(secondary), Stakeholder
STEP
• Identify common terms.
ROLE OF THE ARCHITECT
• Assist with the definition of any technical terms used.
The terms themselves are often derived from the work products that are
input to a project, such as a Business Entity Model, Business Process
Model, Enterprise Architecture Principles, and Vision, or are simply
terms that are frequently used to describe the system and what it does,
and that may have been documented in the Stakeholder Requests work
product. When discussing the YourTour system, for example, you may use
terms such as tour, tour organizer, customer, and tour booking.
Terms are often documented simply with a name and description. Table
7.1 defines several terms from the Glossary of the YourTour system. The
architect often assists with the definition of any technical terms used. In
particular, some technical terms may be defined in industry standards
and, therefore, should be referenced rather than redefined. The architect
should be careful to reconcile synonyms and homonyms, however, as
defined in the sidebar “Best Practice: Reconcile Synonyms and
Homonyms.”
It’s very easy, especially on large projects, for different people to use different
terms to mean the same thing (synonyms) and for the same term to mean different
things (homonyms). In constructing the Glossary, it is important to ensure that
the preferred terms are used in all cases (although you may note the alternative
names for the terms), because the terms in the Glossary influence the naming of
elements in many other work products. A late change in the name of a term can
result in much rework, assuming that it is beneficial for terms to be consistent.
Having said that, it may be desirable for the same term to be used based on
common use in the industry. The term service, for example, can be applied in a
technical context in relation to a service-oriented architecture (SOA), where it
represents a software capability that is exposed via one or more interfaces. The
term service may also be used in a business context in relation to business service
management (BSM), where it typically represents an alignment of technology in
providing a service to the business.
PURPOSE
The purpose of this task is to ensure that the boundary of the system under
development is understood and that the users and external systems that interact
with the system are identified.
ROLES
Business Analyst, Lead Architect (secondary), Stakeholder (Secondary)
STEPS
• Identify actors.
• Identify actor locations.
• Identify data flows.
ROLE OF THE ARCHITECT
• Ensure that external systems, with which the system under development must
integrate, are considered.
• Ensure that the locations of any actors are defined appropriately.
• Ensure that the flow of data between the system and external actors is
considered.
Two critical aspects of the system definition are its scope and, therefore,
its boundaries. In this task, you identify the actors, their locations, and the
flow of data between the actors and the system, and document them all in
the System Context work product.
Step: Identify Actors
When defining the system, one of the first things you identify is the
system context in terms of system actors and their interfaces to the
system. An actor is someone or something outside the system that
interacts with the system. An actor can be a person, an external system, or
an external device (such as a printer). Inspiration for such actors may
come from the roles defined in the Business Process Model work
product, mandated elements defined in the Enterprise Architecture
Principles work product, existing elements defined in the Existing IT
Environment work product, the requests defined in the Stakeholder
Requests work product, or the list of stakeholders described in
the Vision work product.
The actors identified for the YourTour system are shown in Figure 7.4. In
this figure, the Customer, Sales Clerk, Tour Organizer, System
Administrator, and Business Administrator actors represent people (or,
more correctly, the roles undertaken by people using the system),
whereas the CRM System, Payment Engine, and Reservation System
actors represent external systems. As for stakeholders, it is useful to
maintain a checklist of actors to ensure none is forgotten, as discussed in
the sidebar “Checklist: Maintain a Checklist of Actors.”
Figure 7.4. System Context of the YourTour System
Checklist: Maintain a Checklist of Actors
Interactions between the actors and the system are often of interest to
architects because they are concerned with any technologies required to
support the interface and any qualities that must be achieved when using
the interface (such as performance), and they also need to acknowledge
any constraints that may be imposed (such as the format of data passed
across the interface). Quite often, the architect has several choices to
make in realizing such interfaces and has to make appropriate trade-offs.
Therefore, the architect ensures that actors representing external
systems are considered, because such systems may result in the
identification of particular integration concerns.
Step: Identify Actor Locations
You can be more precise about the nature of the interface between the
system and its external actors and provide details of the information
passed across this interface. An example is shown in Table 7.4. The
architect may get involved in this exercise to ensure appropriate
consideration of the flow of data between the system and external actors.
The descriptions of the data items typically make reference to items
described in the Business Entity Model, if this work product has been
provided as input. Subsequently, identified data items may be used when
describing the flows of events in each of the use cases, for example.
PURPOSE
The purpose of this task is to outline the set of functional requirements.
ROLES
Application Architect (secondary), Business Analyst, Stakeholder (secondary)
STEPS
• Identify functional requirements.
• Outline functional requirements.
ROLE OF THE ARCHITECT
• Ensure that the requirements of the more technical actors, such as a System
Administrator, are considered.
In this step, you consider each actor and their functional requirements of
the system. In this book, we employ use cases for documenting functional
requirements. In this step, however, we also consider system-wide
functional requirements that aren’t readily captured in use cases.
Figure 7.5 shows the initial set of use cases identified for the YourTour
system. The architect is often involved in this exercise to ensure that the
requirements associated with the more technical actors, such as the
System Administrator, are acknowledged.
Figure 7.5. Actors and Use Cases in the Use-Case Model
In addition to these use cases, you may identify functional requirements
that are considered to be system-wide and that are not expressed in use
cases. In the case of the YourTour application, we have identified a need
for both online help and security. Requirements should be negotiated
with stakeholders to ensure that a mutually acceptable statement of the
requirement is agreed to, as discussed in the sidebar “Pitfall:
Requirements Are Non-Negotiable.” You can also benefit from
understanding those requirements that may change, as discussed in the
sidebar “Concept: Change Cases.”
In a software project, you can change almost anything at any time: plans, people,
funding, milestones, requirements, designs, tests. Requirements—probably the
most misused word in our industry—rarely describe anything that is truly
required. Nearly everything is negotiable. (Royce 2005)
A change case represents a potential change in the system requirements and can
give the architect insight into those aspects of the architecture that should be
easily modified or extended. There is a trade-off to be made when addressing
change cases, however, because by definition, a change case is not a requirement;
it is a potential requirement. Although not explicitly included in the process
described in this book, formally documenting change cases can prove a valuable
exercise.
Whether the architecture should address a given change case is one of the trade-
offs that the architect needs to make, because it may involve additional effort or
have an impact on certain system qualities. Given two seemingly equal
architectural options, where one option addresses a change case and the other
does not, choosing the option that addresses the change case is clearly the thing to
do. Understanding the likelihood that a change case will become a requirement can
also help architects in their decision-making.
PURPOSE
The purpose of this task is to outline the set of non-functional requirements. Such
requirements represent qualities or constraints.
ROLES
Application Architect (secondary), Business Analyst, Infrastructure Architect
(secondary), Stakeholder (secondary)
STEPS
• Identify non-functional requirements.
• Outline non-functional requirements.
ROLE OF THE ARCHITECT
• Ensure that the appropriate non-functional requirements have been considered.
• Ensure that non-functional requirements are expressed in an appropriate
manner.
• Rules that provide the conditions that govern business behavior (legislative,
regulatory, cultural, and business)
• Rules that provide the criteria for when an action is successfully or
unsuccessfully completed
• Rules that stipulate what other actions can or cannot be performed as a result of
successful or unsuccessful completion
• Rules that specify the response to some external event that impinges on the
enterprise
• Rules that govern relationships among various business entities
ROLES
Business Analyst, Lead Architect, Project Manager (secondary), Stakeholder
(secondary)
STEP
• Prioritize requirements.
ROLE OF THE ARCHITECT
• Assist with the prioritization of requirements.
Therefore, you need to be smart about how you address the high-priority
requirements. The fact that requirements are not always truly
independent can help you in this regard. If you address the Book Tour use
case, for example, you know that it will also address the integration with
third-party components. To minimize the effort involved in addressing
high-priority requirements, it is beneficial to consider the alignment of
use cases and other requirements when prioritizing, which you can show
in a simple table.
Table 7.8 shows an example from the YourTour system. The rows
represent use cases, and the columns represent all other requirements
(systemwide functional requirements from Table 7.5 and non-functional
requirements from Table 7.7). Coverage of a specific non-functional
requirement or systemwide requirement by a use case is indicated with
a Y in the relevant cell. You cannot determine the schedule of the system
by considering a single use case (all use cases must be considered),
however, and so schedule is not included in this table.
This table helps inform our decisions regarding the relative priority of
each of the use cases. Table 7.9 shows the priority assigned to each use
case, together with the rationale for its priority. The priorities are based
on the information gleaned from Table 7.8 and other characteristics
mentioned in the rationale. Each requirement is shown as being high,
medium, or low priority. Any risks that form part of the rationale are
taken from the RAID Log. Both the prioritized list and the rationale for
the priority are captured in the Prioritized Requirements List. The list
may also contain requirements that do not align with any use case in
particular, such as a requirement for the system to start up in a given
amount of time, in which case you just add them to the list with the
associated rationale for their priority. You should also ensure that the use
cases really are prioritized against one another, as discussed in the
sidebar “Pitfall: All Requirements Are Equal.”
A common pitfall is for all requirements to be given the same priority. Without
exception, projects that suffer from this pitfall classify all requirements as high
priority. If all requirements have the same priority, providing priorities against
requirements is a waste of time, because this information cannot be used to
identify those requirements that are more important than others. The
requirements need to be prioritized to indicate to the architect (or anyone else)
the most important requirements of the system.
PURPOSE
The purpose of this task is to complete the functional requirements to the extent
that they can be used to drive the definition of the system from a functional
perspective.
ROLES
Application Architect (secondary), Business Analyst, Stakeholder (secondary)
STEPS
• Detail use cases (for each use case considered in the current iteration).
• Detail use-case data items.
• Detail system-wide functional requirements.
• Detail functional requirement scenarios.
ROLE OF THE ARCHITECT
• Ensure that all the alternative flows are considered.
• Assist with the definition of use-case data items.
• Assist with the detailing of system-wide functional requirements.
• Assist with the detailing of specific scenarios.
This step is performed for each use case being considered in the current
iteration. In this step, you start with the Functional Requirements work
product that contains the use-case model and that in turn contains each of
the use cases and, therefore, the associated use-case descriptions. You
gradually make the use case description more detailed until all the
stakeholders are happy that it unambiguously expresses their
requirements. You specify the following information when you detail a
use case, elements of which will have been defined in the Outline
Functional Requirements task:
Table 7.10. Main Flow of Events of the Book Tour Use Case
As well as detailing the main flow of events, you may detail alternative
flows. Table 7.11 describes three of the alternative flows of events for the
Book Tour use case. The architect may be involved in helping identify the
alternative flows, because the stimulus for the flow being executed may
be technical in nature.
Table 7.11. Alternative Flows of Events of the Book Tour Use Case
The special requirements associated with a use case also warrant further
explanation. Architects sometimes come across requirements that are
associated with a use case but that are not associated with any flow of
events in particular. Such requirements often represent qualities or
constraints that are specific to the use case as a whole and are described
in the special requirements section of the use-case description. The Book
Tour use case of the YourTour system, for example, specifies the following
special requirement: “Booking a tour must take less than 10 seconds,
from the time the request is submitted, to the confirmation of the booking
being presented to the user.”
In the Define System Context task, you identified the data that flows
between the external actors and the system, and the data items involved
in the interactions. Then you used the data items in describing various
aspects of the requirements. The purpose of this step is to elaborate on
the data items you identified. You will consider these data items further
when you think about the solution to the requirements, as discussed
in Chapter 8, “Creating the Logical Architecture.”
Again, we can use the Book Tour use case as an example. Simply looking
at the main flow of events, you can see that this use case makes use of
Tour Participants, Tour Participant Options, Tour, Tour Location,
Payment Details, and Tour Booking data items, which were originally
identified in the Define System Context task. You can also see that the
use case may infer additional data items or attributes of these items.
If you apply this scrutiny across all use cases, you can see that the
definition of the various data items is refined as a result. Any new data
items that are identified are added to the System Context work product
as required.
Step: Detail System-Wide Functional Requirements
For those functional requirements that are not easily expressed in use
cases, you generally embellish the textual description of the requirement
that has been outlined. You could refine a requirement such as “The
system shall provide online help” with a more detailed description of the
form in which this online help will be provided. You might add “Online
help will be accessible at any point in time, and it will be possible for the
help contents to be downloaded as a PDF file.” The architect may assist
with this step because any system-wide capabilities may have a
significant impact on the architecture.
Even these simple statements can make explicit items that might
otherwise go unnoticed. The concept of an existing customer, for example,
implies that customer information is retained by the system. Also, this
particular scenario does not involve the customer participating in the
tour; therefore, it must be possible for a customer to book a tour on behalf
of others.
PURPOSE
The purpose of this task is to complete the non-functional requirements to the
extent that they can be used to drive the definition of the system in terms of the
qualities exhibited and the constraints accommodated.
ROLES
Application Architect (secondary), Business Analyst, Infrastructure Architect
(secondary), Stakeholder (secondary)
STEPS
• Detail non-functional requirements (for each non-functional requirement
considered in the current iteration).
• Detail non-functional requirement scenarios.
ROLE OF THE ARCHITECT
• Ensure that all non-functional requirements are described in an appropriate
manner.
• Assist with the detailing of specific scenarios.
PURPOSE
The purpose of this task is to document the architecturally significant
requirements in the Software Architecture Document.
ROLE
Lead Architect
STEP
• Update software architecture document.
ROLE OF THE ARCHITECT
• The architect is responsible for this task.
In this step, you update the requirements view, and any cross-cutting
views, of the Software Architecture Document. This requirements view
contains the architecturally significant functional and non-functional
requirements. You should always bear in mind that the purpose of
the Software Architecture Document is to allow the architecture to be
communicated. From the perspective of requirements, you are trying to
communicate the requirements that have a major bearing on the
architecture and that provide rationale for why the architecture is the
way it is. This information is particularly valuable when, for example, you
have to defend your architecture in an architecture review.
PURPOSE
The purpose of this task is to obtain stakeholder agreement that the requirements,
at their current level of elaboration, satisfy their requests.
ROLES
Application Architect (secondary), Business Analyst, Data Architect (secondary),
Infrastructure Architect (secondary), Lead Architect, Stakeholder
STEPS
• Baseline work products.
• Assemble work products.
• Review work products.
ROLE OF THE ARCHITECT
• Participate in the review.
• Respond to any questions of a technical nature.
In this step, you assemble the requirements work products that have
been created or updated (and baselined) during the iteration in a form
that stakeholders can review. Work products may be defined in various
forms (such as a modeling tool or as stand-alone documents in a shared
work area) and must be assembled into one or more deliverables. The
work products assembled potentially include all work products that are
input into, or output from, the Define Requirements activity.
In this step, you review the requirements work products and document
any problems discovered in the work products in Change
Requests. Document any issues that arise in the RAID Log. When the
review is complete, you briefly capture the results of the review, including
any action items, in a Review Record.
This review serves as a quality gate for the iteration that ensures that the
requirements work products are mature enough to support subsequent
tasks. It is important that people outside the development team (such as
users and customers) approve the requirements work products at this
stage, although all stakeholders are involved to some extent in many of
the tasks discussed in this chapter, of course. They should verify that the
work products capture the detailed requirements accurately. It is also
important that the members of the development team be involved to
make sure that they understand what needs to be built, as well as to
identify areas where more information is needed.
SUMMARY
In this chapter, we described the process for documenting the
requirements of the system, resulting in the following key work
products: Glossary, Stakeholder Requests, System Context, Functional
Requirements, Non-Functional Requirements, and Prioritized
Requirements List. We also updated the Software Architecture
Document with the architecturally significant requirements. These work
products drive the development activities in Chapter 8, “Creating the
Logical Architecture,” and Chapter 9, “Creating the Physical Architecture.”
In this chapter we describe the tasks that produce the logical architecture
that realizes the requirements defined in Chapter 7, “Defining the
Requirements.” The sidebar “Concept: Logical Architecture versus
Physical Architecture” describes the meaning of a logical architecture and
how it differs from a physical architecture. Figure 8.1 shows the work
products that are inputs to and outputs from the Create Logical
Architecture activity, which contains the tasks that we discuss in this
chapter.
Figure 8.1. Input and Output Work Products of the Create Logical Architecture
Activity
Concept: Logical Architecture versus Physical Architecture
The following work products are output from the Create Logical
Architecture tasks:
• Architecture Assessment.This work product records the results of an
assessment of the requirements and architecture performed at various
stages during the project life cycle. An assessment identifies issues and
risks associated with the architecture or its requirements and describes
the actions and mitigation strategies to address them.
• Architecture Decisions.This work product records the significant
decisions made in shaping the overall architecture. It describes the
rationale used in making the decision, the options considered, and the
implications of the decision.
• Architecture Overview.This work product provides an overview of the
key elements of the architecture, such as the major structural elements,
important behavior, and significant decisions.
• Architecture Proof-of-Concept.This work product is used to prove and
validate key parts of the architecture to reduce project risk. It may take
the form of a model of a solution using a notation such as Unified
Modeling Language (UML), a simulation of a solution, or an executable
prototype.
• Change Request.This work product describes the request for a change
in the system. Changes may be significant and may dramatically affect the
focus of the iteration.
• Data Model.This work product describes the representation of the data
used by the system.
• Deployment Model.This work product shows the configuration of
nodes, the communication links between them, and the components that
are deployed on them.
• Functional Model.This work product describes the software
components, including their responsibilities and relationships, and the
collaborations of components in delivering the required functionality.
• RAID Log.As described in the preceding list, this project management
work product captures the risks, assumptions, issues, and dependencies
for the project.
• Review Record.This work product defines, in the context of this
activity, the result of an architecture review.
• Software Architecture Document.This work product provides a
comprehensive architectural overview of the system, using several
architectural views to depict different aspects of the system.
MOVING FROM REQUIREMENTS TO SOLUTION
This chapter is the first time we consider the transition from
requirements to solution. Figure 8.2 is a subset of the work products that
architects consider when making this transition and helps us
demonstrate some simple but important concepts.
In this figure, you see two of the key requirements work products:
the Functional Requirements and Non-Functional Requirements. You
also see two of the key solution work products: the Functional
Model and the Deployment Model. Some important and fairly obvious
concepts are represented by the arrows (which indicate various
influences) in this figure:
Concept: Tactics
The flip side of minimizing the emphasis on the logical architecture, then,
is considering the logical architecture to be an investment that is immune
to technology change. Therefore, it may make sense, from an investment
perspective, to maintain the logical architecture in anticipation of a
technology change that can support any reengineering of the system in
the future.
As the architect on the project, you need to consider the extent to which
you want to describe the traceability through the development process
and whether this traceability is explicit (such as adding specific modeling
elements that support traceability, for example requirements realizations,
described later in this chapter) or implicit (such as naming code elements
based on the architecture elements that they implement).
Concept: Traceability
Traceability is the mechanism by which the elements in one work product are
linked to elements in the same or another work product. In terms of a
development life cycle, traceability allows the architect to follow the linkage from,
for example, requirements to logical architecture to physical architecture to code.
Traceability allows you to perform impact analysis of changing a requirement or
the potential impact of optimizing a programming algorithm in terms of its impact
on the system as a whole. Both of these scenarios are supported by considering
how you (explicitly or implicitly) describe traceability in the work products you
create.
The logical architecture tasks are most visible during the Elaboration
phase, where you focus on baselining the software architecture. During
this phase, you concentrate on analyzing those requirements that are
considered to be architecturally significant (that is, those that have most
influence on the architecture). During the Construction phase, you
analyze any remaining requirements, but this work is not as extensive as
that performed during the Elaboration phase, as most of the major system
elements have already been discovered and major technical decisions
made. The time you spend on logical architecture, therefore, tapers off
throughout the Construction phase, as the number of requirements that
you have yet to analyze decreases and the emphasis shifts to
development. You may need to perform some minimal logical
architecture tasks even into the Transition phase as changes to the
requirements are introduced based on feedback received when
transitioning the system to the user, though this situation is unlikely.
In essence, the outline tasks focus on those elements that are most significant to
the architecture and that would be the responsibility of the Lead Architect on the
project. These tasks are where major decisions regarding the solution to non-
functional requirements are made, for example.
The detail tasks focus on those elements that, although important, are less
significant for understanding the overall architecture of the system. Detail tasks
usually are the responsibility of the architect with the relevant focus, such as
the Application Architect, Infrastructure Architect, or Data Architect.
Table 8.1 summarizes the elements in the outline and detail tasks
described in this chapter.
PURPOSE
The purpose of this task is to identify reusable architecture assets that can be
applied to the system under development.
ROLES
Application Architect (secondary), Data Architect (secondary), Infrastructure
Architect (secondary), Lead Architect
STEP
• Survey architecture assets.
ROLE OF THE ARCHITECT
• The architect is responsible for this task.
One thing expert designers know not to do is to solve every problem from
first principles. Rather, they reuse solutions that have worked for them in
the past. When they find a good solution, they use it again and again. Such
experience is part of what makes them experts. (Gamma 1995)
The extent of asset reuse is dependent on the context within which the
architect is working. In early iterations, architects may select assets that
have far-reaching effects on the architecture. A case in point is the
selection of a reference architecture that defines a broad range of system
elements. Architects also may choose to base their architecture on a
packaged application or to reengineer a legacy system. Again, this
selection has a significant bearing on the architecture. The other end of
the spectrum is selecting a particular set of patterns that may be applied
only to the Functional Model or Deployment Model. Such elements are
typically considered in conjunction with the Outline Functional
Elements and Outline Deployment Elements tasks.
The mandatory use of assets wherever possible may have been stated at
the enterprise architecture level, in which case the Enterprise
Architecture Principles work product will contain one or more
principles indicating this fact. Table 8.2 shows an example of such a
principle using attributes suggested by The Open Group Architecture
Framework (TOGAF 2009).
PURPOSE
The purpose of this task is to identify and describe the major elements of the
system under development.
ROLES
Application Architect (secondary), Data Architect (secondary), Infrastructure
Architect (secondary), Lead Architect
STEP
• Define architecture overview.
ROLE OF THE ARCHITECT
• The architect is responsible for this task.
Figure 8.5 shows the Architecture Overview for the YourTour system.
This overview has been derived by reviewing the System Context to
understand what the boundary of the YourTour system is, the Functional
Requirements to understand what the major functional areas of the
system need to be, and the Non-Functional Requirements to
understand what qualities need to be addressed and what constraints
need to be complied with. Terms used in these work products should all
be collected in the Glossary.
Figure 8.5. Architecture Overview for YourTour
Concept: Subsystem and Component
[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 2003)
Layers are sometimes confused with tiers, but they are not the same thing.
Whereas tiers are abstractions of physical elements, layers are much more general,
and the concept of layering a system conforms to the Layers architectural pattern,
as described in Pattern-Oriented Software Architecture: A System of
Patterns (Buschmann 1996) and elsewhere. In brief, the Layers pattern places
components within layers according to their generality, with the more general-
purpose components (that is, the most reusable components) in lower layers. In
simple terms, the components in any given layer may use the services of
components in the same layer or in lower layers. Layering is said to be strict if
components can communicate only with components in the same layer or the layer
immediately below it and non-strict if components can communicate with
components in the same layer or any lower layer. Either way, a component should
never communicate with components in higher layers, as this situation makes the
component less reusable. Also, it is difficult to switch the component with another
that provides the same interface, for example. Figure 8.6 shows one example of a
layering approach derived from a layering given in Software Reuse: Architecture,
Process and Organization for Business Success (Jacobson 1997).
PURPOSE
The purpose of this task is to capture the key decisions made in shaping the
architecture and the rationale behind them.
ROLES
Application Architect (secondary), Data Architect (secondary), Infrastructure
Architect (secondary), Lead Architect
STEPS
• Capture issue or problem.
• Assess options.
• Select preferred option.
• Document decision.
ROLE OF THE ARCHITECT
• The architect is responsible for this task.
Some decisions are time-sensitive and may have a life span that is less
than that of the project within which they are set. A decision may be made
that is short-term and tactical to move the project forward but that needs
to be revisited before the system goes live. In this case, a note must be
made against the decision that it needs to be reviewed by a given date.
Conversely, some decisions are fundamental and may actually outlive the
project that generated them, as they are applicable to other system
development projects within the enterprise. Such decisions are elevated
to the status of architecture principles that are adopted at the enterprise
architecture level.
In this step, you decide what options you have to address the issue or risk.
This step may involve looking at patterns (to see how similar problems
have been solved), researching products and packages from vendors (if
the problem could be addressed by procuring a product or package), or
brainstorming alternative approaches (if the problem involves a new or
challenging area).
In this step, you assess each option and decide which one to adopt. You
may need to consider several questions when deciding which option to
select:
When the decision has been made, the initial problem statement, the
options considered, the decision, and the rationale that led to the decision
are all captured in the Architecture Decisions work product. Table
8.3 shows an example from the Architecture Decisions work product
from the YourTour system.
PURPOSE
The purpose of this task is to identify the major functional elements (subsystems
and components) of the system under development.
ROLES
Application Architect, Data Architect (secondary), Infrastructure Architect
(secondary)
STEPS
• Identify subsystems.
• Identify components.
ROLE OF THE ARCHITECT
• The architect is responsible for this task.
When representing these different types of components in UML, you may also
choose to use a UML profile that includes stereotypes for each. The notation used
is shown in Table 8.4.
Table 8.5. Main Flow of Events of the Book Tour Use Case
When identifying logical components (and their responsibilities) by using
the functional requirements, you proceed as follows:
The result of applying these steps to the Book Tour use case is shown
in Figure 8.10. The dependencies among elements are also derived from
the use-case flow of events.
Figure 8.10. Components Derived from the Book Tour Use Case
These components are related to the subsystems identified earlier in this
chapter, as follows:
Figure 8.11. UML Sequence Diagram for the Book Tour Use Case (Main Flow)
Non-Functional Requirements
When considering the requirements and how they are satisfied in the solution,
often it is beneficial to trace the solution explicitly back to the requirements they
address. This traceability can help you determine the impact of changing the
requirement. Figure 8.12 shows the concept of a requirement realization that
shows this traceability. A requirement realization is a stereotyped UML
collaboration that simply indicates which solution elements collaborate to satisfy a
particular requirement. In Figure 8.12 the solution elements that realize the Book
Tour use case are those contained in the Participants UML component diagram
and which interact as shown in the Main Flow of Events UML sequence diagram.
References to these diagrams are shown as UML notes in Figure 8.12. By
convention, the requirement realization has the same name as the requirement it
realizes.
Figure 8.12. Requirement Realization for the Book Tour Use Case
Tracing from the solution back to the requirements (functional and non-
functional) can be time-consuming to set up and maintain. On relatively small
projects, it may be possible to develop a simple form of traceability using a
spreadsheet. The traceability defined with this approach can be difficult to
maintain, however. A better solution, which is certainly applicable for large or
complex projects, is to use appropriate development tools that provide explicit
support for tracing between solution elements and the requirements they realize
and for maintaining this information.
Cohesion is a measure of how well the responsibilities that are attributed to the
component are related to one another. High cohesion (a component with a set of
closely related responsibilities) is considered to be good; low cohesion (a
component with a set of poor or unrelated responsibilities) is considered to be
bad. High cohesion is good because it makes the architecture easier to understand.
Maintenance is also likely to be easier, as changes will be localized to a single
component rather than being spread throughout the system. Also, components are
more reusable if they exhibit high cohesion because it is more likely that a
functionally related set of responsibilities will be used as a whole than if a random
set of responsibilities were provided by a component.
• Is the business rule likely to change frequently? The answer dictates how
much flexibility needs to be provided for updating the business rule. A business
rule that is likely to change frequently is best assigned to a component that is
dedicated to implementing that business rule.
• Does the business rule apply in many scenarios, or is it specific to a
particular use? The answer dictates which component, or set of components, the
rule gets assigned to. A business rule that needs to be reused in many scenarios is
best assigned to a separate component that is invoked accordingly. A business rule
that is used in only one scenario is best placed with the component that requires
this business rule to execute.
• Does the user of the application need to have visibility of the business
rules? If so, you may need to allow aspects of the business rule to be made visible
in the user interface. In a loan application, for example, the basis on which a loan is
given may be provided to the end user (the requester must be over 18 years of age,
for example). Similarly, a system administrator may require the ability to change
business rules, which requires an interface to access the business-rule definitions
to allow such changes to be performed.
• Where does the data used by the business rule reside? The answer dictates
where the components that handle the business rule need to be located in relation
to the data that the rules need as input. This consideration is particularly
important in a distributed system, where network latency has a major impact on
the performance of the system.
• Is the business rule likely to have an impact on system
performance? Sometimes business rules have a hidden or unexpected impact on
system performance, and you should consider this impact when placing rules. A
rule to determine a person’s creditworthiness, for example, might review that
person’s credit history for the past two years. A regulatory change may cause the
check to be done over ten years, and suddenly the performance of the system is
affected because the credit engine is doing five times as much work.
• What middleware components are available, or are being mandated, to
manage business rules? If a rules engine is being proposed as part of the system,
you can represent the engine as a separate component. (The specific rules engine
itself will be selected when the physical architecture is defined.) A rules engine
generally provides the ability to define, manage, and run business rules, and
almost certainly mandates where and how to place such rules.
In terms of representing business rules, you have several options in the logical
architecture:
Architecture Decisions
Suppose that a decision has been made that the Acme Message Broker
will be used as the messaging bus. To represent this decision in a
logical Functional Model, you could abstract it to a component called
Message Bus and make a note that the implementation will be the Acme
Message Broker.
Along with all the other components exemplified thus far, the Message
Bus component is shown in Figure 8.15, together with the layers that
comprise the YourTour architecture, which are derived from the layering
given in Software Reuse: Architecture, Process and Organization for
Business Success (Jacobson 1997) and discussed in the earlier sidebar
“Concept: Tiers and Layers.” You can also show the subsystems that
contain these components in a similar diagram, if required.
Figure 8.15. YourTour Components Aligned with Layers
PURPOSE
The purpose of this task is to identify the locations across which the system under
development will be deployed and the nodes within each location.
ROLES
Application Architect (secondary), Data Architect (secondary), Infrastructure
Architect
STEPS
• Identify locations.
• Identify nodes.
ROLE OF THE ARCHITECT
• The architect is responsible for this task.
In this task, you are identifying logical locations and nodes. You could
refer to “a branch office” that might be refined later, when you consider
the physical architecture, into actual locations such as “the New York
branch office” or “the Tokyo branch office.”
An initial set of deployment elements may be derived from
the Architecture Overview. As for functional elements, deployment
elements are named, where appropriate, according to the terms defined
in the Glossary.
The field of systems engineering would take a very broad view of how such a
location could be implemented physically. The location could contain any
combination of software, hardware, people, and information. This book focuses on
software-intensive systems, however. As you will see in the examples, this book
assumes that a location is ultimately implemented as a physical geographic
location containing physical computing resources on which software is deployed.
In this step, you review the relevant input work products to identify the
locations that the system under development is to be distributed across.
Identification of locations is based on an analysis of one or more of the
following work products:
In the step, the architect reviews all available inputs to identify the nodes
that the system under development is to be distributed across.
Identification of nodes is based on an analysis of, in particular,
the Functional Requirements, Non-Functional
Requirements, Functional Model, Existing IT Environment,
and Architecture Decisions work products. These work products are
discussed in the following sections. In addition, you may consider
any Architecture Proof-of-Concept that has been created.
Functional Requirements
Non-Functional Requirements
Existing IT Environment
Architecture Decisions
The Architecture Decisions work product may suggest the use of certain
nodes. As an example from the YourTour system, Figure 8.17 shows
nodes placed in the Central Office location. This figure is based on the
assumption that, for now, all tour-related components (both tour process
control and tour services) will be added to one logical server: the Tour
Booking Server. You may change this decision later as you refine the
architecture based on your understanding of the requirements, the extent
to which you have met all the requirements (especially those related to
qualities), and the results of the execution of any architecture proof-of-
concept that has been created.
PURPOSE
The purpose of this task is to verify that the architecture work products are
consistent and to ensure that any concerns that cut across the architecture work
products have been addressed consistently.
ROLES
Application Architect (secondary), Data Architect (secondary), Infrastructure
Architect (secondary), Lead Architect
STEPS
• Plan verification.
• Hold kickoff meeting.
• Perform individual verification.
• Hold verification meeting.
• Perform rework.
• Perform follow-up.
ROLE OF THE ARCHITECT
• Leading the verification of the architecture to ensure that architecture work
products are consistent.
• Ensuring that any concerns that cut across the architecture work products (a
quality such as performance, for example) have been addressed consistently.
• Ensuring that all defects discovered during the verification are addressed
without breaking the overall architecture.
• Ensuring that any architecture decisions that come out of the verification
exercise are captured.
The architecture work products can get out of step for various reasons,
such as the fact that they sometimes are developed by different roles.
The Functional Model is developed by the Application Architect, for
example, whereas the Deployment Model is developed by
the Infrastructure Architect. Although you may feel that you’ve
addressed certain aspects of integration to external systems in
the Functional Model, these assumptions may be invalidated by
decisions made with respect to the Deployment Model.
It is worth noting that the set of work products considered in this task
extends beyond the core Functional Model and Deployment
Model work products to consideration of the Architecture
Decisions and Architecture Proof-of-Concept work products, because
any decisions that have been made and any results gleaned from a proof-
of-concept must also be consistently applied across the architecture work
products.
In this book, we use the terms verification and validation as defined by the
Software Engineering Institute (SEI) in its approach to establishing software
maturity models (Ahern 2008).
Verification allows the architect to determine whether the work products, at the
current point in the overall development process, are consistent with the inputs
used to create them (such as other work products and any development standards
that have been mandated). In general terms, verification helps you detect defects
in the work products early and therefore prevent later rework. Verification helps
you answer the question “Am I building the system right?” Techniques that
support verification include inspection of work products, tracing from solution
components to requirements, and using the automatic verification tools that are
available in some modeling environments.
One of the goals of verification is to find and remove any defects present
in work products. Many techniques exist for achieving this goal, such as
reviews, walk-throughs, and inspections. The level of ceremony
attributed to this task depends on many factors, especially the complexity
of the architecture. At one end of the spectrum, this task can be a
relatively simple informal review that involves the architect looking at the
architecture work products, noting any inconsistencies, and correcting
the work products accordingly. At the other end of the spectrum, you
apply a rigorous technique for systematically walking through each
architecture work product in turn, and this approach is the one described
here. Our assumption is that the technique described here can easily be
varied for any given situation and scaled down as necessary.
The steps in this task follow the classic inspection process first suggested
by Michael Fagan (Fagan 1976) and are shown in Figure 8.18, adapted for
the purposes of performing inspections of architecture work products.
For a more complete description of the inspection process as it refers to
software development, refer to Software Inspection (Gilb 1993).
Figure 8.18. Verification Steps
The participants are sent or given the material that they are to inspect,
and then spend time inspecting the work products and making note of the
defects they discover. The time required to do this clearly varies
depending on the size of the work products being inspected. Although this
exercise may seem to be very heavyweight, finding defects early can
reduce rework. To assist in the inspection of work products, participants
can be given checklists that identify specific things to look for.
Step: Hold Verification Meeting
Rework is the step of the verification task in which the defects found
during the verification meeting are resolved by the author. The relevant
work products are updated accordingly. It is also wise to understand the
likely cause of the defect and where in the process the defect was most
likely caused, so that the development process is improved as a result. If
the rework is extensive, the process may start again by returning to the
“Plan verification” step.
The follow-up step ensures that all the defects found in the verification
meeting have been corrected. The moderator is responsible for verifying
that this is indeed the case.
PURPOSE
The purpose of this task is to synthesize at least one solution (which may simply
be conceptual) that satisfies the architecturally significant requirements to
determine whether such a solution, as envisaged by the architect, exists.
ROLES
Application Architect (secondary), Data Architect (secondary), Infrastructure
Architect (secondary), Lead Architect
STEPS
• Create architecture proof-of-concept.
• Document findings.
ROLE OF THE ARCHITECT
• Initiating the proof-of-concept and establishing the ground rules and scope of the
proof-of-concept.
• Working closely with any product vendors to give them clear guidance on what is
required of their product for the purposes of the proof-of-concept.
• Collating and interpreting the results of the proof-of-concept and for reporting
them back to stakeholders.
• Making any architecture decisions based on the results obtained from the proof-
of-concept.
The inputs to this task reflect these different considerations and therefore
include the Functional Requirements, Non-Functional Requirements,
and Prioritized Requirements List work products, as well as
the Architecture Overview, Deployment Model, and Functional
Model architecture work products. In addition, one or more of the above
concerns may have been identified and captured either as a risk or as a
potentially looming issue in the project RAID Log. Alternatively, perhaps
one or more architecture decisions, as captured in the Architecture
Decisions work product, cannot be addressed until some prototyping
work has been done to test the various options.
PURPOSE
The purpose of this task is to refine the functional elements to the point that they
can be handed off to detailed design.
ROLES
Application Architect, Data Architect (secondary), Infrastructure Architect
(secondary)
STEPS
• Define component interfaces.
• Define operations and operation signatures.
• Define contracts between components.
ROLE OF THE ARCHITECT
• The architect is responsible for this task.
Having outlined the functional elements in the Outline Functional
Elements task, you flesh out some of the details of these elements in this
task. Specifically, this task involves
You may be asking, “Why should I be concerned with this level of detail,
especially in a logical architecture?” We believe that there are two
reasons:
• If the architect does not specify components to this level of detail, it will
be left to the designers and implementers to perform this task. They
typically work outside the architect’s immediate sphere of influence (and
may not even be in the same company or country) and therefore may
make decisions that are inconsistent with the architecture.
• Specifying components in this way allows you to make a link between
the logical Functional Model and the logical Data Model. Often, these
models are developed separately and independently, but this approach
allows you to ensure these two models are consistent in the early stages
of the project.
That said, it may not always be the case that components need to be
defined to this level of detail. If a component is expected to be realized by
a product or package or other off-the-shelf component, for example, it
probably is not necessary to go to the level of detail discussed here.
In this step, you assign interfaces to the components that were identified
previously. Figure 8.19 shows an example of a component’s provided
interfaces: the Tour Booking Manager component providing
ITourBooking and IPayment interfaces.
In this step, you define interfaces in more detail by specifying the actual
operation names and signatures. The operation name usually is the same
as the responsibilities you assigned to each interface previously, though it
may be shortened or abbreviated if required.
The signature of each operation (in terms of inputs and outputs) can be
determined from its name to some extent. You could assume that the
responsibility add tour participant() is going to require information
defining the tour booking to which the participant is added and the tour
participant involved. You may also examine the sequence diagrams you
developed previously (as shown in Figure 8.20, for example) to determine
the data flows.
Operation parameters and any return values may be simple types, such as
String or Integer, or more complex business types. The set of business
types represents a logical Data Model, which is similar to and typically
derived from the Business Entity Model. A (partial) logical Data Model,
based on the Business Entity Model for YourTour, is shown in Figure
8.22, where the business types have the businessType UML stereotype
applied.
Figure 8.22. Logical Data Model
One particular area that can be explored further is the persistent nature
of the data that flows in the system. Consider the following
characterizations:
A postcondition specifies the state of the component after the operation has
executed, provided that the precondition is true. By state, we mean any data
(transient or persistent) for which the component is responsible.
Just as in law, preconditions and postconditions place obligations on the client and
provider of a contract. In terms of software, the client is the component that calls
the operation, and the provider is the component that implements the operation,
as summarized in Figure 8.24.
Figure 8.24. Client and Provider Obligations, and Benefits of Preconditions and
Postconditions
The purpose of having preconditions and postconditions on the operations of
component interfaces is to make explicit the responsibility of the caller before
invoking the operation. In other words, if something is listed as a precondition, it
does not have to be checked by the provider but is assumed to be true, which
ensures against too little or too much checking of the data being passed to the
operation. In software, too much checking is as bad as too little because it can lead
to program bloat, making software overly complex and difficult to maintain, as
well as providing more opportunities to introduce errors in the error-checking
code itself!
Preconditions and postconditions may be expressed using either the formal Object
Constraint Language (OCL) (Warmer 1999) or natural language. An advantage of
using a formal language is that it is possible to generate code that supports the
enforcement of constraints in a programming language (although you are more
likely to generate code from a physical architecture model than a logical
architecture model).
PURPOSE
The purpose of this task is to refine the deployment elements to the point that they
can be handed off to detailed design.
ROLES
Application Architect (secondary), Data Architect (secondary), Infrastructure
Architect
STEPS
• Assign components to nodes.
• Define connections between nodes.
• Define connections between locations.
ROLE OF THE ARCHITECT
• The architect is responsible for this task.
Figure 8.26 shows an example from the YourTour system of the allocation
of components to nodes. This figure introduces the concept of
a deployment unit that provides a link between the components to be
deployed and the nodes being deployed to. Logical deployment units are
discussed in the sidebar “Concept: Logical Deployment Units.”
Figure 8.26. Components Assigned to Nodes in the Central Office Location
Figure 8.26 depicts the Central Office location. Here, you see three
deployment units for those elements deployed to the Tour Booking
Server (one for each type of component: boundary, control, and entity), a
single deployment unit for those elements deployed to the Content
Management Server, a single deployment unit for those elements
deployed to the Security Server, and a single deployment unit for those
boundary components that represent interfaces to external systems. A
deployment unit is represented as a UML artifact.
When components that interact have been placed on nodes, you need to
ensure that communication can take place among them if they are
distributed across nodes. In the logical architecture, you don’t concern
yourself with whether the physical connection is point to point or via an
intermediary mechanism such as a messaging bus; you simply represent
the connection as an association between the two nodes. You consider the
physical mechanisms involved when you consider the physical
architecture. Figure 8.27 shows the nodes previously identified for the
Central Office location with simple associations between nodes added.
Figure 8.27. Nodes and Connections in the Central Office Location
This separation can be useful in a logical architecture, too, when you want to
deploy the same set of elements to different nodes for some reason and want to
represent the packaging once (in a deployment unit). This technique also provides
consistency in the approach taken to specifying the logical architecture and the
physical architecture. A more important reason for considering logical deployment
units, however, is that it gives the architect an opportunity to associate particular
qualities with a set of components. This goal is achieved by grouping those
components that require a particular quality of service into a deployment unit,
which is then deployed to a node that provides the quality of service required.
The associations are added as a result of the interactions that take place
among the components deployed on each of the nodes. These interactions
are described by sequence diagrams such as that shown in Figure
8.20 earlier in this chapter. Connections have been added as shown
in Figure 8.28 because:
PURPOSE
The purpose of this task is to validate that the architecture supports the
requirements as currently stated.
ROLES
Application Architect (secondary), Data Architect (secondary), Infrastructure
Architect (secondary), Lead Architect, Project Manager (secondary)
STEPS
• Plan validation.
• Review architecture.
• Document findings.
• Assess risks and make recommendations.
ROLE OF THE ARCHITECT
• Planning and leading the validation.
• Documenting the findings.
• Noting any risks or issues and identifying appropriate mitigations.
Even though you are validating a logical architecture, it’s still possible to
evaluate the architecture against the requirements. You can take several
approaches to validate the architecture, and the specific techniques you
use at a given point in time may vary depending on where you are in the
overall project life cycle and the current state of the architecture. Early in
the project, for example, it may be best to validate the architecture simply
by presenting the architecture to the key stakeholders. Later in the
project, you may perform a more rigorous and systematic walk-through
of the architecture. As you will see in Chapter 9, “Creating the Physical
Architecture,” validation of the physical architecture may also consider
characteristics of the executing system.
In validating the architecture in this task, you focus not only on the
technical aspects of the architecture, but also on the context within which
the architecture exists, including the requirements from which the
architecture has been derived as well as the realities of delivery based on
the architecture that has been defined. In these respects, this task
encompasses a broad set of considerations:
To divide and conquer the task of validating the architecture, often it is useful to
consider a set of key scenarios that are used to walk through the architecture and
that allow the architect to demonstrate the architecture in action—in terms, for
example, of the decisions that have been made, the elements that comprise the
architecture and their collaboration, and the qualities that the architecture
exhibits.
One aspect of the ATAM is architecture evaluation, which follows a series of steps:
One important aspect of reviewing the architecture is ensuring that all the
requirements, as originally stated by the stakeholders, have been dealt
with. This is where having some form of traceability—linking
architectural elements back to requirements—comes into its own. Well-
defined traceability allows reviewers to trace from the architecture back
to the requirements to see how each requirement has been satisfied.
As the presentation proceeds, various items may not have been addressed
adequately in the architecture, or questions may remain unanswered. All
such comments should be recorded to ensure that they’re addressed, and
all such findings are documented in the Architecture Assessment work
product.
If it becomes apparent that the architecture cannot be validated against
the stated performance requirements because the requirements are not
described adequately, the finding might be as shown in Table 8.7.
After documenting all findings, the next step is deciding what risks are
associated with each finding. It is important that risks clearly state the
potential impact on the delivery of the project. As well as stating the risks,
it is helpful to quantify the risks according to the likelihood of their
actually occurrence and the potential impact on the project if the risks
actually occur. For each risk, you should also make some statement or
recommendation regarding risk mitigation, as shown in Table 8.8, by
doing one of the following things:
PURPOSE
The purpose of this task is to document the architecturally significant elements in
the Software Architecture Document.
ROLE
Lead Architect
STEP
• Update software architecture document.
ROLE OF THE ARCHITECT
• The architect is responsible for this task.
In this step, the architect updates the relevant views in the Software
Architecture Document. The outline of the Software Architecture
Document is discussed in Chapter 4, “Documenting a Software
Architecture.” In terms of that structure, the various sections are
populated from the content of the work products that have been created,
as shown in Table 8.9. Just as the requirements view is populated from
the various requirements-related work products, you can populate the
functional, deployment, and validation views from the various
architecture-related work products that are output from the tasks
described in this chapter. You can also populate the cross-cutting views
that are part of the architecture description framework too.
Table 8.9. Alignment of Sections in the Software Architecture
Document and Work Products
ROLES
Application Architect (secondary), Data Architect (secondary), Infrastructure
Architect (secondary), Lead Architect, Stakeholder
STEPS
• Baseline work products.
• Assemble work products.
• Review work products.
ROLE OF THE ARCHITECT
• Ensuring that the correct work products have been baselined.
• Leading the review.
• Answering questions and providing clarifying remarks as the review proceeds.
Baselining work products very simply consists of selecting the current set
that represents the architecture (which are the ones output from this
activity) and ensuring that the set is stored in a configuration
management system with suitable version numbers applied. Then you
need to publicize this set of work products as being the baseline so that it
can be referred to for all follow-up activities, such as performing detailed
design or defining the physical architecture (which we describe
in Chapter 9, “Creating the Physical Architecture”).
In this step, you review the architecture work products. This review may
be no more than walking through the content of the Software
Architecture Document, with the supporting work products available
for reference if needed. Any problems discovered are documented
in Change Requests. When the review is complete, you briefly capture
the results of the review, including any action items, in a Review Record.
Anything that needs to be raised as a project issue should be tracked in
the project RAID Log.
The review itself, depending on the architecture under review, may last
from a few hours to a few days (or longer). Reviews typically examine the
many aspects of the architecture in a similar vein to the verification
performed, including clarification of the goals of the architecture (in line
with the stated requirements), agreement on priorities, examination of
the trade-offs made (such as flexibility versus performance), and
consideration of the risks.
This review serves as a quality gate for an iteration that ensures that the
logical architecture is stable enough to support subsequent tasks, such as
the detailed design of the logical architecture, the creation of an outline
test plan, or the population of a project plan. As a result, it is important
that the relevant parties participate in the review, including the Project
Manager, Testers, and Developers, for example. In addition,
the Application Owner will be interested in getting an overview of the
architecture and an understanding of how it will meet the key strategic
requirements, and users will need assurance that the key business
requirements have been met.
SUMMARY
Defining a logical architecture is a critical part of the overall software
development process that, if performed well, results in a more robust and
understandable architecture, with a clear separation of concerns and a
balanced division of responsibility between system elements. Defining the
logical architecture is also a stepping stone that helps you move from the
system requirements to the physical architecture. The Create Logical
Architecture activity discussed in this chapter leads into the Create
Logical Detailed Design activity (discussed in Chapter 1, “Introduction”),
which fleshes out any remaining detail that may be required at a logical
level, such as the detail of a particular business rule.
In the next chapter, we describe how to use the logical architecture (and
logical detailed design) to derive a physical architecture that directly
supports subsequent development activities.
In this chapter, we describe each of the tasks that produce the physical
architecture that realizes the requirements defined in Chapter 7,
“Defining the Requirements,” and that evolves the logical architecture
defined in Chapter 8. We assume that several work products are input to,
and output from, the Create Physical Architecture activity, as shown
in Figure 9.1. As you can see from this figure, consideration of the physical
architecture involves both requirements and the logical architecture
work products.
Figure 9.1. Input and Output Work Products of the Create Physical
Architecture Activity
MOVING FROM LOGICAL TO PHYSICAL
ARCHITECTURE
Because the logical architecture is one of your primary inputs, when
moving from the logical to physical architecture, you should understand
what this input entails. As well as considering the requirements on the
system, you must consider the various elements defined in the logical
architecture, a diagram from which is shown in Figure 9.2. This figure
contains both functional and deployment elements and shows many of
the items that you need to consider in moving from the logical to physical
architecture, including components, locations, nodes, node connections,
and deployment units. Subsystems, component interfaces, operations, and
various relationships are not shown to simplify the diagram. Each of these
elements is discussed later in this chapter.
Figure 9.2. Subset of the Logical Architecture
Concept: Product
Moving from the logical to physical architecture requires you to make decisions
regarding technologies and products. We use the term product to represent
something that is sourced from outside the organization, as opposed to something
that is developed in-house. A product may represent software or hardware.
A software product may be a complete application or part of an application (such
as a configurable package or component). A commercial product (sometimes
referred to as a commercial-off-the-shelf, or COTS, product) is one that is acquired
through sale, lease, or license and includes licensed open-source products. From
the perspective of a software development project, a commercial product requires
you to consider product procurement.
We may give the impression that there is a clean separation of logical and
physical architecture and that they are always performed in a simple
sequence.
One thing you should avoid, however, is mixing logical and physical
concepts in the same model or diagram. Mixing these concepts can lead to
confusion about what elements have been addressed at a physical level
and may skew any effort estimates for the completion of the architecture
work. Mixing logical and physical elements in a single model or diagram is
a form of view overloading (Rozanski 2005) and generally should be
avoided. In this book, therefore, we always show logical and physical
concepts in separate diagrams.
In Chapter 8, you saw that the tasks that focus on functional elements and
deployment elements are divided into outline tasks and detail tasks. We
said that the outline tasks focus on those elements that are most
significant to the architecture and that would be the responsibility of
the Lead Architect on the project. The detail tasks are focused on the
less-significant elements and are the responsibility of the architect with
the relevant focus—such as the Application Architect, Infrastructure
Architect, or Data Architect. Table 9.1 summarizes the physical
elements considered in this chapter.
As a simple example, suppose that you have decided that the YourTour
system will have a separate content management subsystem, the
requirements for which will be analyzed and captured as responsibilities
of the relevant functional element. For now, you are assigning a single
Content Management component to the Content Management subsystem.
That assignment may change later if you decide that you need to
decompose the subsystem further or to source parts of it from different
vendors. (The database may be separate from the content management
workflow, for example.) The need for a content management solution was
identified in both the logical Architecture Overview as well as the
logical Functional Model. Furthermore, you will have determined the
non-functional requirements on this component. Table 9.2 summarizes
the characteristics of this component.
Table 9.2. Component Description for the Content Management
Component
While you are realizing the Functional Model and Deployment Model in
terms of technology-specific elements, it may be useful to reflect these
elements in an Architecture Overview of the physical architecture. As
for its logical counterpart, this Architecture Overview provides an initial
sketch of the envisaged physical architecture.
One of the major factors affecting the physical architecture is the approach taken
to address non-functional requirements (both qualities and constraints). Although
the architect takes certain steps to address these requirements in the logical
architecture, such requirements are addressed more explicitly and fully in the
physical architecture.
When making such decisions, you have several useful inputs. The RAID
Log helps you focus on those areas where decisions need to be made. The
architecture models (that is, the Data Model, Deployment Model,
and Functional Model work products) ensure that any decision is made
in the context of the evolving architecture. The Architecture
Assessment and Architecture Proof-of-Concept work products are
sources of quantitative information for selecting the right option and
actually arriving at a decision.
This task focuses on identifying the subsystems and components that will
comprise the physical architecture by ensuring that the logical
subsystems and components that have been identified are realized
appropriately.
• Many physical components are required to realize the logical component. The
physical components may be a combination of several products and custom built
components.
• Many physical components are required to support different service-level
characteristics that have been assigned to the logical component. In the case of
YourTour, for example, the ability to book a tour probably is needed 24 hours a
day, but canceling a tour usually is required only during a normal working day, as
this task probably requires additional confirmation and checking from a booking
clerk.
• Many physical components are required to accommodate a particular
architectural pattern that has been selected and that requires the responsibilities
assigned to a logical component to be realized in multiple physical components.
Here, we use the term buy to mean procuring anything that already exists,
including any of the types of assets discussed in Chapter 5, “Reusable
Architecture Assets,” and products from commercial software or
hardware vendors. The asset may already exist in the organization (that
is, it was developed for another project or as part of a corporate reuse
program). Guidance on whether to buy or build varies from organization
to organization as well as project to project. In deciding whether to buy or
build, it is worth reviewing the checklist in the sidebar “Checklist: Buy
versus Build Decisions.”
The following questions can be applied when trying to make “buy versus build”
decisions. In this checklist, the term product typically refers to something from
outside the organization, but we use the same term in this checklist to refer to
reusable assets inside the organization, because you need to ask many of the same
questions when reusing assets that have been produced by another team or
business unit.
• Does a corporate-wide policy favor buy versus build (or the other way around)?
• In the event that no products exist that completely provide the required
functionality, is it worth considering changing the requirements so that a product
can be reused?
• If an existing product requires a lot of customization before it can be used, would
it be better to custom-build the solution instead?
• Is the required component leading edge or unique in the sense that no
comparable products exist or, if they do, are likely to be unstable or immature?
• Is the product vendor financially sound?
• What support options are available from the vendor?
• How are problems raised and escalated with the vendor, and what service-level
agreements (SLAs) are offered (such as turnaround times for problem fixes)?
• Are any financial implications related to any ongoing maintenance costs of using
an existing product (including upgrades)?
• Have maintenance costs been factored into the decision and the total cost of
ownership (TCO) calculated?
• Does the product vendor have an acceptable policy regarding migration that
allows, for example, data to be migrated with minimal disruption to ongoing
operations?
• Does integration of any product require specialist skills that are hard to come by?
• Is customization of any product particularly onerous and time-consuming, which
could lead to schedule slippage?
• Is any product required dependent on other products or platforms, and have
these products or platforms been factored into the decision-making process?
• Is the product at the correct version number to be compatible with other
products that may be used? (Vendors often issue new versions of products that
may make the products at least temporarily incompatible with other products—
either their own or those from other vendors.)
• Does any product have credible references of previous (and successful) use?
• Does the vendor have a long-term road map for the product?
• Is the vendor credible and aligned with where you want to go as a user?
• Are the product release timelines acceptable?
• Are any suitable cost-free options available, such as open-source software that
isn’t licensed? (Although this class of software may be perceived as being too risky
for an enterprise to build mission-critical systems, it may have been built by a
dedicated online community of developers and may even be of higher quality than
commercial software. For a certain class of system, this route can be very
favorable. When using open-source software, you should be aware that even
though the license may be free, you will have ongoing support costs.)
Procuring Products
The reusable assets you seek to procure may align with the architectural
layers if you have used a layering strategy based on reuse. In particular,
you can separate the following:
Figure 9.6 summarizes some of the key technologies used in a typical Java EE
application, aligned by architectural tier.
Figure 9.6. Java EE Overview
EJB INTERFACES
A client’s access to an EJB is provided through interfaces. A client never interacts
directly with the EJB implementation, as the Java EE platform maps the methods of
the interface to the equivalent methods of the EJB implementation. The EJB
interface can be declared for local (co-located) or remote (distributed) access.
Session beans, as the name suggests, are beans whose state is valid in the context of
a user session. The Java EE platform specifies two types of session beans: stateless
session beans and stateful session beans. A stateless session bean is intended to be
very lightweight in that it maintains no conversational state whatsoever. Stateless
session beans are often used as controllers that coordinate a series of interactions
between other EJBs but don’t actually maintain any state of their own. A stateful
session bean, on the other hand, does maintain in-memory state between one
invocation and the next within the context of the user session. A shopping cart, for
example, could be implemented as a stateful session bean.
Entity beans represent coarse-grained elements that manage long-lived state;
therefore, they are provided support for persistence. Examples of entity beans are
Customer, Order, and Product. An entity bean may use the JDBC API, but may also
use the EJB3/JPA APIs if an object-to-relational mapping managed by the platform
is required.
In addition to session beans and entity beans, the Java EE platform specifies
message-driven beans. Message-driven beans are designed to support
asynchronous communication. A client sending messages to message-driven beans
does not block waiting for a response after sending a message.
For all types of EJBs, annotations can be provided that allow the EJB container to
manage the EJB appropriately. In addition, annotations allow the automatic
generation of a web service wrapper for the EJB.
As you can see, the session façade is implemented as a session EJB and
manages relationships between one or more BusinessObjects. Each
BusinessObject is instantiated as either a session bean or an entity bean.
When implementing the session façade pattern, you need to make several
architectural decisions, such as the following:
Figure 9.9 shows how the session façade pattern has been used to realize
the Book Tour Controller component. The BookTourController façade
provides a single interface for accessing all information related to a tour
booking, including tour participants, their preferred options, and
payment information related to the booking. The façade is a stateless
session bean because it maintains no state between method invocations.
This session façade wraps several session EJBs, all acting as business
objects in the pattern:
The extent to which you perform this task in the physical architecture depends on
several factors, however. If you have chosen not to create a logical architecture
(for reasons described in Chapter 8), you cannot imply any realization of
requirements by tracing the physical elements to the logical elements from which
they are derived and which in turn trace to the requirements they realize. In this
case, you may choose to perform a relatively extensive analysis of how
requirements are realized by physical elements. At the other extreme, if you have
performed an extensive analysis of how requirements are realized by logical
elements, you may not explicitly show the realization of any requirements by
physical elements, because we can imply this by tracing physical elements to those
logical elements that do realize the requirements.
The most common approach lies somewhere between the two options: You realize
a key set of requirements in terms of logical elements but also selectively show
how certain requirements are realized in terms of physical elements.
In Figure 9.10:
Taking into account the general guidance in the preceding sections, you
can develop the physical deployment elements as follows:
1. For each logical location, define how many physical instances of this
location there will be and where, geographically, these locations
will be placed.
2. For each node assigned to the logical location being considered,
create a corresponding physical node (bearing in mind the need to
split or aggregate nodes, as described in the preceding section).
3. Tag the node with an alignment to a specific hardware product
(assuming that nodes are procured and not built). Where no
obvious alignment exists, simply list candidates, and identify the
preferred option based on the requirements (especially non-
functional requirements). This may result in multiple nodes
residing at a single location, where each node represents a
candidate hardware product.
4. Size the physical nodes by reviewing the non-functional
requirements and—based on required throughput, availability,
scalability, and so on—coming up with suitably sized platforms
(that is, platforms with a suitable number of instances, amount of
disk space, processor speed, and so on). On a large, distributed
system, this task is a significant one in its own right and may
involve doing detailed performance modeling, possibly aided by
building a further Architecture Proof-of-Concept to support the
sizing estimates.
Figure 9.11 shows the level of detail you would expect after following the
preceding steps. The figure shows the Central Office location of the
YourTour system, which physically resides in London, and shows the
servers, workstations, and other devices together with their physical
attributes. In particular, you see the addition of a database server with an
associated disk array for storing any YourTour persistent data.
Figure 9.11. The Central Office Location in the Physical Deployment Model
We have also shown the likely connections that will be needed between
the nodes. These connections will be confirmed and updated as necessary
when deploying the physical components onto the nodes in the
task Detail Deployment Elements. Connections from the Admin Client
are not shown, as there is a connection to all other nodes in this figure
(with the exception of the Disk Array, which is a device).
It’s also possible to show the number of nodes required at each location
within a Unified Modeling Language (UML) model by creating a
composition aggregation relationship between the location and the nodes
it contains. Then this relationship can show the multiplicity of the
relationship. Figure 9.12 shows that the London Central Office location
has five Admin Client nodes. This information is clearly important in
procuring hardware—the topic of the next section.
Figure 9.12. Representing the Number of Nodes at a Given Location
Procuring Hardware
• Are some functional requirements only partially addressed and require further
proving?
• Is performance or any of the other required system qualities likely to be an issue,
and do detailed metrics proving that the system is likely to meet these qualities
need to be established?
• Are some components considered to be high risk or leading edge in what they are
required to do and, therefore, need to be proved?
• Are products being used that need to interface with other products or existing
systems, and do these interfaces need to be proved?
• Do products being used have an existing user interface that you need to show to
end users to verify that their needs are satisfied?
• Are products or packages being used that require complex customization or
configurations? (Some products can be configured in many ways, which can affect
the performance or availability of the product.)
In this task, you take these idiosyncrasies into account while providing
enough information to allow designers and developers to build the
system. Then the physical architecture becomes a blueprint for designers
and developers to follow. The execution of this task follows, exactly, the
description given for detailing functional elements in the logical
architecture, as discussed in Chapter 8, “Creating the Logical
Architecture.”
You know that the BookTourController is a stateless session EJB. You may
also stipulate, in a pattern, that all EJBs be fronted by a JavaBean class
that provides simplified access to EJBs. Rather than specify this JavaBean
class, you can simply state the pattern once and imply these elements
without ever expressing them explicitly in your models. This approach
can apply to other elements too, which can be useful because then you
can keep your models as simple as possible (and not clutter them with
unnecessary detail) without losing any useful detail.
You can add further detail by providing the operations signatures as well
as preconditions and postconditions. Detailing the signatures in this way
in the physical architecture ensures that the components are defined
unambiguously in terms of their interface. This means you can hand the
components over to the developers to implement, safe in the knowledge
that (provided that the interface is complied with) the component will be
implemented as intended.
Having identified the physical components and specified them to the level
where they can be procured or built, you can consider where these
components are deployed physically. This task considers the following:
• For custom-built components, determining how these components will
be packaged in such a way that they can be deployed to the relevant
physical nodes by identifying suitable deployment units.
• For products that have been selected, reviewing the product
documentation and working out how the products are to be deployed
alongside the system under development. For any customizable
components (such as packaged applications) that have been selected, you
also need to ensure that all configuration options and any customizations
that need to be made are specified.
Although diagrams such as that shown in Figure 9.16 are good for
showing summary information of deployments, you can capture only so
much detail in such diagrams. In most real-world scenarios, you are likely
to need additional supporting information, such as that shown in Table
9.4. This detailed physical specification of the node shows all components
deployed to it, including technical elements such as the middleware and
operating system.
Table 9.4. Component Mapping for the Tour Booking Server Node
Remember that at this stage the detailed physical design has still not been
done; the architect is simply providing guidance to ensure that the
detailed physical design will be done within necessary constraints (to
ensure the integrity of the architecture). Planning early how the system
will be packaged and deployed is particularly important for large,
complex, distributed systems, which may have many different elements to
be deployed. When packaging the software into appropriate deployment
units, you should consider the following:
• The mechanism by which any new system is populated with data. The
architect needs to focus not only on how new data gets put into the
system (users, products, customers, and so on), but also on how existing
data gets migrated from the system that is being replaced (if this is the
case). Data migration is the name given to the process of loading data
from an existing system onto the new system. In a large, complex
development, this process may be a complete project itself, requiring the
analysis of existing data, the cleansing of that data to remove errors and
duplications, and the development of a strategy for how existing data will
be moved (a “bigbang” approach in which data is moved wholesale just
before cutover to the new system, for example, or a phased approach in
which data is moved a piece at a time). Data migration might also
introduce new subsystems and components into the architecture, such as
an Extract, Transform, and Load (ETL) subsystem or file-transfer
components.
• Constraints involved in scheduling updates to existing systems,
especially if those systems are live and need to be running around the
clock.
During this task, you also refine the number of each type of physical node
required by considering some of the required service-level characteristics
involving performance, availability, and scalability. High or continuous
availability may be achieved only by ensuring duplication of some nodes,
for example, so that if one node fails, another can be switched in.
Similarly, scalability requirements may demand the use of multiple
processors (referred to as vertical scalability) or multiple nodes (referred
to as horizontal scalability), and such considerations add to the more
detailed specification of the deployment nodes as a result.
The steps that you carry out in performing the validation are the same as
those described for the corresponding task in defining the logical
architecture. The criteria being addressed are different, however, or at
least have a different focus. The criteria to consider when performing an
architecture validation at the physical level are similar to those for the
logical-level architecture; appropriate checklists are provided
in Appendix B, “Viewpoint Catalog.”
When you are validating the architecture, all the models built so far (that
is, the Functional Model, Deployment Model, and Data Model) will be
validated against known requirements. In addition, key decisions
documented in the Architecture Decisions work product (and
supported by the Architecture Proof-of-Concept) will be used during
the validation together with the Architecture Overview work product.
The main reasons for bringing together the architecture work products in
one overarching work product (the Software Architecture Document)
is to allow the work done to date to be communicated to all team
members and also reviewed by stakeholders so that they can sign off.
This review serves as a quality gate and ensures that the physical
architecture is stable enough to support tasks that depend on it. As a
result, it is important that the relevant parties participate in the review—
the Project Manager, Testers, and Developers, for example.
SUMMARY
Developing software architecture is an iterative process. The architect
must continuously refine, verify, and validate the architecture and also
gain agreement with stakeholders who have interests in the system under
development. Furthermore, as information is gathered and requirements
are better understood, the architect is able to move from a conceptual
view of the architecture to a more physical view.
In this chapter, we have shown how you can refine and elaborate on the
elements in the logical architecture by applying the same process pattern
to create a physical architecture that clearly identifies the technologies,
products, assets, and custom-built elements used to design and build the
system.
A particular pitfall for architects is always handing off the details to others,
considering such details to be outside their concern. Such architects lose the
respect of their teammates and tend to get a bad reputation with many negative
characterizations, such as being hand-wavers, being remote from the project in
their ivory tower, or being able to talk the talk but not walk the walk. Good
architects get their hands dirty and, when required to, get deeply involved in the
technical details.
Pitfall: The Architect and Project Manager Are the Same Person
The role of the architect and the role of the Project Manager are both significant
and often time-consuming. These two roles also have very different focuses. A
project in which a single person plays both roles is rarely successful, because there
is always a bias toward one role or the other. As a result, one of these roles is
performed inadequately. The beneficial interplay that always occurs between
architect and Project Manager is also missing, although it may go on in the
person’s head!
This structuring should also minimize the need to compare and merge
changes as practitioners work on the various elements concurrently. In
addition to defining the structure of the elements in the configuration
management repository, the architect helps define the approach to
changing elements stored in the repository. It may be decided that only
one person at a time can work on a source-code file, for example. In this
case, the file in question is locked when it is checked out, meaning that
others can get a copy of the file but cannot change it. If you decide that
two or more practitioners can work on the same file concurrently, it will
be necessary to compare and merge changes when each practitioner
checks his or her changes into the repository.
Development teams can get themselves into real trouble if they pay insufficient
attention to the configuration management strategy. This situation can occur when
a team does not appreciate the relationship between architecture and
configuration management. The main symptom is that a system is built that does
not reflect the changes that have been made in the project work products.
This situation may occur when files are stored in the wrong place in the
configuration management repository because the structure is not well defined.
Old versions of elements (which are stored in the correct repository location) are
then used by practitioners in preference to the most recent versions (which are
stored in the wrong repository location).
Another reason is that changes in files are lost as different practitioners fail to
compare and merge their changes correctly when too many practitioners are
allowed to work on the same files at the same time. This situation typically is the
result of inadequate consideration of what information is stored in what files and
how the files are likely to be accessed by practitioners in doing their work.
Both of these challenges can be influenced by the architect, who is able to make
informed decisions regarding the files being stored and the access that will be
required. The architect in particular wants to encourage as much concurrent work
as possible while ensuring that a simple configuration management repository
structure is in place, with associated policies.
All the business analysis work products influence the work of the
architect either directly or indirectly. These work products influence the
system requirements and therefore indirectly influence the work of the
architect. The architect also appreciates the broader context within which
the system must operate, however, and refers to the business analysis
work products, if they exist.
• Enterprise architecture
• Design authority
• Infrastructure provider
• Application maintenance provider
Enterprise Architecture
Design Authority
• For a small system, the design authority may be just the Lead Architect.
The system is small enough that it can be understood by one person, who
can ensure the overall technical integrity is being maintained.
• For a system of medium complexity, the design authority may be a
dedicated architect with one or more specialist architects reporting to
him or her on a part-time basis.
• For a large and complex system, the design authority may consist of a
full time team of architects with a design authority lead and various
specialist roles reporting to the team.
The responsibilities of the design authority are many and varied, but most
design authorities assume at least the following responsibilities:
• Define and run the various controls that are needed to ensure that the
architecture is developed consistently and supports the requirements.
• Ensure compliance with all mandated internal and external standards
and regulatory controls.
• Ensure that an effective development process (and tooling) is in place
and is being followed.
• Be accountable to the various stakeholders that have concerns and
interests in the system, and act as the interface between the technical
team developing and building the system and the stakeholders.
The work products discussed in the process described in this book, which
are relevant to the design authority, are
Infrastructure Provider
Many metrics can be used to measure the size of a system. One metric that
is sure to indicate system complexity is the number of resources (people)
required to develop the system. The complexity arises not through the
sheer amount of work to be performed, but through the communication
that is required among the people. Such communication channels
sometimes break down, such as when important messages do not
propagate to those who need to know. In addition, it is important for the
work itself to be coordinated in an appropriate manner and every effort
should be made to ensure that everyone is working to plan, delivering the
various project work products at the right time and in the right order.
These techniques translate into distinct practices and tasks performed by the
architect.
To ensure the integrity of the architecture across the team (which may be large
and distributed), it is important to establish the relevant standards that all team
members conform to when designing or developing the solution. Such standards
may include architecture and design patterns to be applied, modeling standards,
and programming standards. Enforcement of such standards can be governed by a
design authority, if one is in place.
Complex systems are often developed by teams that are not physically co-
located. There are many reasons for this arrangement, including cost
reduction through the use of cheaper labor (from a supplier in a different
location), and shortened delivery times by allowing development to
proceed around the clock (by developers in different geographies and
time zones). Although distributed development may indeed help, it also
adds to the complexity. Communication between individuals becomes
more difficult when different languages, time zones, and cultures are
taken into consideration, for example. In addition, appropriate
architectural and project governance needs to be in place to ensure that
the elements of the system are delivered as required.
[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 2003)
The neat thing about the MDSD approach is the set of techniques for the
allocation of system requirements to subsystems (both functional and
non-functional), in which a subsystem itself may also comprise software,
hardware, people, and data. One of these key techniques, joint realization,
is one of the cornerstones of MDSD. This technique shows how both
system functional and non-functional requirements are jointly realized
across the different types of element that comprise the system, in terms of
software, hardware, people, and data. MDSD attempts to tackle, head on,
the well-known problems that arise when such elements are considered
in isolation.
The result of applying the MDSD approach is a set of loosely coupled and
highly cohesive subsystems, each with its own set of requirements
(functional requirements to be met, qualities to be exhibited, and
constraints to be accommodated) that allows each subsystem to be
treated as a system in its own right.
SUMMARY
This chapter complements earlier chapters by introducing topics not
discussed elsewhere in this book—typically, those that are beyond a basic
understanding of the role of the architect in a typical software
development project.
However you use the content of this book, and whether you’re an aspiring
architect or an advanced practitioner, we hope that your application of
the various practices is successful. Finally, remember that even the best of
best practices can be improved!
architect
architecting
architectural description
architecture
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. (IEEE 1471 2000)
architecture decision
concern
development process
development project
environment
mission
A use or operation for which a system is intended by one or more
stakeholders to meet some set of objectives. (IEEE 1471 2000)
model
rationale
stakeholder
system
team
view
A representation of a whole system from the perspective of a related set
of concerns. (IEEE 1471 2000)
viewpoint
STAKEHOLDER SUMMARY
Each viewpoint in this catalog lists the stakeholders that are addressed by
the viewpoint. Table B.1 summarizes the stakeholders considered in this
catalog. You can use this summary as a starting point when identifying the
stakeholders in the architecture in any given situation. This table also
indicates the scope of each stakeholder; internal stakeholders are those
within the current development team, whereas external stakeholders are
not. Although not included in this table, it is assumed that the architect is
a stakeholder in all viewpoints.
BASIC VIEWPOINTS
This section contains descriptions of the basic viewpoints.
Requirements Viewpoint
Functional Viewpoint
Deployment Viewpoint
Validation Viewpoint
CROSS-CUTTING VIEWPOINTS
This section describes each of the cross-cutting viewpoints.
Application Viewpoint
Infrastructure Viewpoint
Systems Management Viewpoint
Availability Viewpoint
Performance Viewpoint
Security Viewpoint
VIEW CORRESPONDENCE
Not included in the descriptions of the preceding viewpoints are any
relationships between a view defined by a given viewpoint and any other
views. The placement of a component on a node is a concern of both a
functional view and a deployment view, for example, and you may want
all components identified in the functional view to be deployed to nodes
in the deployment view.
Rather than describe view correspondence in each of the preceding
sections, we chose to minimize duplication by providing Table
B.2 instead. This table indicates the correspondence between all the
views in the architecture description framework. The intention is to allow
you to look across the rows for each viewpoint you are adopting to see
what correspondence (and, therefore, completeness and consistency)
needs to exist.
ROLES
A role defines the behavior and responsibilities of an individual or a set of
individuals working together as a team, within the context of a software
development organization. A role is responsible for one or more work
products and performs a set of tasks.
The roles within the project team (as described in this book) are shown
in Figure C.1.
Figure C.1. The Project Team
Table C.1 provides a summary of the roles within the project team.
ACTIVITIES
An activity represents a grouping of tasks. The activities described
in Figure C.3 follow the flow described in Chapter 7, “Defining the
Requirements,” Chapter 8, “Creating the Logical Architecture,”
and Chapter 9, “Creating the Physical Architecture.” In addition, this
figure shows the more detailed design activities that would be
undertaken within the overall development process, although these
activities are not discussed in detail in this book. You should remember
that in an iterative development process, each of these activities is
executed within a single iteration.
Figure C.3. Activity Overview
TASKS
A task is a unit of work that provides a meaningful result in the context of
the project. It has a clear purpose, which usually involves creating or
updating artifacts. In the following sections, the various tasks are grouped
according to the activity to which they belong. Each activity has an overall
activity diagram that shows the flow between the tasks, as well as a table
that summarizes the steps for each task.
The flow between the tasks that comprise the Create Logical
Architecture activity is shown in Figure C.5 and a summary of each task
is given in Table C.4.
Figure C.5. Tasks in the Create Logical Architecture Activity
Table C.4. Create Logical Architecture: Task Summary
Activity: Create Physical Architecture
PHASES
[A phase is] a specialized type of activity that represents a significant
period in a project normally ending with a decision checkpoint, major
milestones, or a set of deliverables. Phases typically have well defined
objectives and provide the basis for how the project work will be
structured. (OpenUP 2008)
Inception
The Inception phase is where the business case for the project is
established and concurrence among all stakeholders on the objectives for
the project is established. Inception is where the architect focuses on
ensuring that the project is both valuable and feasible. Table C.5 presents
a summary of the objectives and milestone evaluation criteria for the
Inception phase.
Elaboration
Transition
The Transition phase is where the architect ensures that the software is
available to, and accepted by, its end users. This phase is where the
system is deployed into the user’s environment for evaluation and testing.
The focus is on fine-tuning the product and on addressing configuration,
installation, and usability issues. By the end of the Transition phase, the
project should be in a position to be closed out. Table C.8 presents the
objective and milestone evaluation criterion for the Transition phase.
USABILITY REQUIREMENTS
Usability requirements describe the degree to which the system is
understood and used. Table D.2 defines some usability requirements.
PERFORMANCE REQUIREMENTS
Performance requirements describe the degree to which the system
provides a defined level of execution performance. Table D.4 defines
some performance requirements.
SUPPORTABILITY REQUIREMENTS
Supportability requirements describe the degree to which the system can
be supported. Table D.5 defines some supportability requirements.
CONSTRAINTS
A constraint is a restriction on the degree of freedom we have in
providing a solution. (Leffingwell 2000)
Business Constraints
Some of the constraints imposed upon an architect may come from the
business. Table D.6 defines some constraints that are related to the
business.
Development Constraints
Physical Constraints
Table D.9 defines some constraints that are imposed by the physical
environment. Such requirements are particularly relevant when the
hardware housing the software is itself constrained in some way. Cellular
phones, airplanes, and military hardware (such as tanks) all place
physical constraints on the computing hardware, for example, and such
constraints may themselves impose constraints on the software that
executes on this hardware.
Glossary
A grouping of tasks.
antipattern
application framework
architect
architecting
architectural description
architectural mechanism
architectural style
architecture decision
business rule
component
concern
constraint
The role that takes specific responsibility for the overall technical
integrity of the system and provides the necessary governance that
links the IT system under development to the enterprise architecture
goals, strategies, and principles, thus ensuring the system will meet the
requirements.
development process
development project
discipline
domain
enterprise architecture
functional requirement
iteration
method
mission
model
non-functional requirement
packaged application
A large-grained commercial off-the-shelf product that provides a
significant amount of capability (and reuse), such as a
Customer Relationship Management (CRM) application, or an
Enterprise Resource Planning (ERP) application.
pattern
phase
practice
process
quality
rationale
reference architecture
An architecture associated with a particular domain of interest and
typically includes many different architectural patterns, applied in
different areas of its structure.
reference model
reusable asset
role
stakeholder
subsystem
system
task
team
traceability
The mechanism by which we trace (identify and measure) from one set
of development elements to another.
validation
verification
view
viewpoint
viewpoint catalog
A collection of viewpoints.
work product
References