Page 169 -
P. 169

152   Chapter 6   Architectural design


                                    reliability of the system. This is a major topic in its own right and I cover it sepa-
                                    rately in Chapter 18.
                                       The architecture of a software system may be based on a particular architectural
                                    pattern or style. An architectural pattern is a description of a system organization
                                    (Garlan and Shaw, 1993), such as a client–server organization or a layered architecture.
                                    Architectural patterns capture the essence of an architecture that has been used in dif-
                                    ferent software systems. You should be aware of common patterns, where they can be
                                    used, and their strengths and weaknesses when making decisions about the architec-
                                    ture of a system. I discuss a number of frequently used patterns in Section 6.3.
                                       Garlan and Shaw’s notion of an architectural style (style and pattern have come to
                                    mean the same thing) covers questions 4 to 6 in the previous list. You have to choose
                                    the most appropriate structure, such as client–server or layered structuring, that will
                                    enable you to meet the system requirements. To decompose structural system units,
                                    you decide on the strategy for decomposing components into sub-components. The
                                    approaches that you can use allow different types of architecture to be implemented.
                                    Finally, in the control modeling process, you make decisions about how the execu-
                                    tion of components is controlled. You develop a general model of the control rela-
                                    tionships between the various parts of the system.
                                       Because of the close relationship between non-functional requirements and soft-
                                    ware architecture, the particular architectural style and structure that you choose for
                                    a system should depend on the non-functional system requirements:

                                    1.  Performance If performance is a critical requirement, the architecture should
                                        be designed to localize critical operations within a small number of com-
                                        ponents, with these components all deployed on the same computer rather than
                                        distributed across the network. This may mean using a few relatively large com-
                                        ponents rather than small, fine-grain components, which reduces the number of
                                        component communications. You may also consider run-time system organiza-
                                        tions that allow the system to be replicated and executed on different processors.
                                    2.  Security If security is a critical requirement, a layered structure for the architec-
                                        ture should be used, with the most critical assets protected in the innermost lay-
                                        ers, with a high level of security validation applied to these layers.

                                    3.  Safety If safety is a critical requirement, the architecture should be designed so
                                        that safety-related operations are all located in either a single component or in a
                                        small number of components. This reduces the costs and problems of safety val-
                                        idation and makes it possible to provide related protection systems that can
                                        safely shut down the system in the event of failure.
                                    4.  Availability If availability is a critical requirement, the architecture should be
                                        designed to include redundant components so that it is possible to replace and
                                        update components without stopping the system. I describe two fault-tolerant
                                        system architectures for high-availability systems in Chapter 13.
                                    5.  Maintainability If maintainability is a critical requirement, the system architec-
                                        ture should be designed using fine-grain, self-contained components that may
   164   165   166   167   168   169   170   171   172   173   174