Page 165 -
P. 165
148 Chapter 6 Architectural design
Architectural design is concerned with understanding how a system should be
organized and designing the overall structure of that system. In the model of the soft-
ware development process, as shown in Chapter 2, architectural design is the first
stage in the software design process. It is the critical link between design and
requirements engineering, as it identifies the main structural components in a system
and the relationships between them. The output of the architectural design process is
an architectural model that describes how the system is organized as a set of commu-
nicating components.
In agile processes, it is generally accepted that an early stage of the development
process should be concerned with establishing an overall system architecture.
Incremental development of architectures is not usually successful. While refactor-
ing components in response to changes is usually relatively easy, refactoring a sys-
tem architecture is likely to be expensive.
To help you understand what I mean by system architecture, consider Figure 6.1.
This shows an abstract model of the architecture for a packing robot system that
shows the components that have to be developed. This robotic system can pack dif-
ferent kinds of object. It uses a vision component to pick out objects on a conveyor,
identify the type of object, and select the right kind of packaging. The system then
moves objects from the delivery conveyor to be packaged. It places packaged objects
on another conveyor. The architectural model shows these components and the links
between them.
In practice, there is a significant overlap between the processes of requirements
engineering and architectural design. Ideally, a system specification should not
include any design information. This is unrealistic except for very small systems.
Architectural decomposition is usually necessary to structure and organize the spec-
ification. Therefore, as part of the requirements engineering process, you might pro-
pose an abstract system architecture where you associate groups of system functions
or features with large-scale components or sub-systems. You can then use this
decomposition to discuss the requirements and features of the system with stake-
holders.
You can design software architectures at two levels of abstraction, which I call
architecture in the small and architecture in the large:
1. Architecture in the small is concerned with the architecture of individual pro-
grams. At this level, we are concerned with the way that an individual program
is decomposed into components. This chapter is mostly concerned with pro-
gram architectures.
2. Architecture in the large is concerned with the architecture of complex enter-
prise systems that include other systems, programs, and program compo-
nents. These enterprise systems are distributed over different computers,
which may be owned and managed by different companies. I cover architec-
ture in the large in Chapters 18 and 19, where I discuss distributed systems
architectures.