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.
   160   161   162   163   164   165   166   167   168   169   170