@@@Throughout the design process, the quality of the evolving design is evaluated with a series of technical reviews discussed in Chapter 16. McGlaughlin [McG91] suggests three characteristics that serve as a guide for evaluating a good design:
1. The design must implement all explicit requirements contained in the requirements model, and must accommodate all implicit requirements desired by stakeholders.
2. The design must be a readable and understandable guide for those who generate the code and for those who test and subsequently support the software.
3. The design should provide a complete picture of the software, addressing the data, functional, and behavioral domains from an implementation perspective.
Each of these characteristics is a goal of the design process. But how is each of these goals achieved?
Quality guidelines. To assess the quality of a design representation, technical criteria for good design must be established.
1. A design should exhibit an architecture that (a) has been created using recognizable architectural styles or patterns,
(b) is composed of components that exhibit good design features (these are discussed later in this chapter), and (c) can be implemented in an evolutionary manner, thus facilitating implementation and testing.
2. A design should be modular; that is, the software should be logically divided into elements or subsystems.
3. A design should contain different representations of data, architecture, interfaces and components.
4. A design must lead to data structures that are appropriate for the classes to be implemented and are drawn from recognizable data patterns.
5. A design must lead to components that exhibit independent functional characteristics.
6. A design should lead to interfaces that reduce the complexity of connections between components and with the external environment.
7. A design should be derived using a repeatable method that is based on the information obtained during the analysis of software requirements.
8. A design must be represented using a notation that effectively communicates its definition.
Chance alone will not achieve these design guidelines. They are achieved through the application of fundamental design principles, systematic methodology and thorough review.
Evaluating Design Quality: The Technical Review
During design, quality is assessed by conducting a series of technical reviews (TRs). TRs are discussed in detail in Chapter 16,4 but it is worth providing a summary of the technique at this point. A technical review is a meeting conducted by members of the software team. Typically two, three, or four people participate depending on the scope of the design information to be reviewed.
Each person plays a role. The review leader plans the meeting, sets an agenda, and leads the meeting.
Some of the elements that must be taken into account to evaluate the design of the software are the following: A software design is correct if it meets the requirements of the intended users and performs the functions for which it was designed. In addition, it is reliable, predictable, and consistent in its behavior. Maintainability: A software design is maintainable if it is easy to modify, update, and extend over time. A maintainable software design is modular, well organized, and easy to understand. It should also be well documented and have clear guidelines for its use. Efficiency: A software design is efficient if it uses computing resources effectively and performs in a timely manner. An efficient software design is optimized for the hardware and software environment in which it will run. It must also be scalable so that it can handle larger and more complex data sets as they emerge. Among the activities that allow to evaluate the quality of the software design and include: Design documentation review: The design documentation should clearly define the requirements, architecture, and implementation details of the software. You should also include diagrams, flowcharts, and other visual aids to help understand the design. Analysis of the design framework: The design framework should be modular, with a clear separation of concerns and well-defined interfaces between modules. You should also follow the best practices for coding standards and style. Performing code reviews – Code reviews can identify problems with the implementation of the design and help ensure that the code is consistent with the design documentation. Test the software: Testing can help identify problems with the software design, particularly in terms of correctness and efficiency.