Page 132 - DCAP405_SOFTWARE_ENGINEERING
P. 132

Unit 8: Design Engineering




          best thing might be some tools that let programmers (or technical writers) extract specific  Notes
          information from the source code that can then be documented in some other way. Undoubtedly,
          keeping such documentation up to date manually is difficult. This is another argument for the
          need for more expressive programming languages. It is also an argument for keeping such
          auxiliary documentation to a minimum and keeping it as informal as possible until as late in the
          project as possible. Again, we could use some better tools, otherwise we end up falling back on
          pencil, paper, and chalk boards.
          The design of software is often depicted by graphs that show components and their relationships.
          For example, a structure chart shows the calling relationships among components. Object-oriented
          design is based on various graphs, as well. Such graphs are abstractions of the software, devised
          to depict certain design decisions. Coupling and cohesion are attributes that summarizes the
          degree of interdependence or connectivity among subsystems and within subsystems,
          respectively. When used in conjunction with measures of other attributes, coupling and cohesion
          can contribute to an assessment or prediction of software quality.
          (a)  Abstraction: When we consider a modular solution to any problem, many levels of
               abstraction can be posed. At the highest level of abstraction, a solution is stated in broad
               terms using of the problem environment. At lower levels of abstraction, a more detailed
               description of the solution is provided.
          (b)  Architecture: An architecture is not a simple flat view of the component topology, though
               an architecture diagram showing the components and relationships among them is a
               central thinking and communicating tool for the architects and the development team,
               and others they partner with. Our architecture needs to include:

                    Meta-architecture: the architectural vision, style, principles, key communication and
                    control mechanisms, and concepts that guide the team of architects in the creation of
                    the architecture.
                    Architectural views: Just as building architectures are best envisioned in terms of a
                    number of complementary views or models, so too are software architectures. In
                    particular, structural views help document and communicate the architecture in
                    terms of the components and their relationships, and are useful in assessing
                    architectural qualities like extensibility. Behavioral views are useful in thinking
                    through how the components interact to accomplish their assigned responsibilities
                    and evaluating the impact of what-if scenarios on the architecture. Behavioral models
                    are especially useful in assessing run-time qualities such as performance and security.
                    Execution views help in evaluating physical distribution options and documenting
                    and communicating decisions.
          (c)  Design Patters: A software design pattern describes a family of solutions to a software
               design problem. It consists of one or several software design elements such as modules,
               interfaces, classes, objects, methods, functions, processes, threads, etc., relationships among
               the elements, and a behavioral description. Example design patterns are Model/View/
               Controller, Blackboard, Client/Server, and Process Control. The purpose of design patterns
               is to capture software design know-how and make it reusable. Design patterns can improve
               the structure of software, simplify maintenance, and help avoid architectural drift. Design
               patterns also improve communication among software developers and empower less
               experienced personnel to produce high-quality designs.
          (d)  Modularity: The basic idea underlying modular design is to organize a complex system
               (such as a large program, an electronic circuit, or a mechanical device) as a set of distinct
               components that can be developed independently and then plugged together. Although
               this may appear a simple idea, experience shows that the effectiveness of the technique
               depends critically on the manner in which systems are divided into components and the




                                           LOVELY PROFESSIONAL UNIVERSITY                                   125
   127   128   129   130   131   132   133   134   135   136   137