Design Concepts and Principles
Design Concepts and Principles
Design -> The first step in the development phase for any engineered product.
It serves as the foundation for all software engineering and software
maintenance steps that follow.
Figure 13.1
Software Design
Design quality is very important. Two methods are used to check the quality:
a) formal technical reviews, and b) design walkthroughs
Each step in the software engineering process is a refinement in the level of abstraction of
the software solution.
- Data abstractions: a named collection of data
- Procedural abstractions:
A named sequence of instructions in a specific function
- Control abstractions:
A program control mechanism without specifying internal details.
- Modular decomposability:
a design method provides a systematic mechanism for decomposing the problem
into sub-problems --> reduce the complexity and achieve the modularity
- Modular composability:
a design method enables existing design components to be assembled into a new
system.
- Modular understandability:
a module can be understood as a standalone unit it will be easier to build and
easier to change.
- Modular continuity:
small changes to the system requirements result in changes to individual
modules, rather than system-wide changes.
- Modular protection:
an aberrant condition occurs within a module and its effects are constrained
within the module.
Software Architecture
- Structural properties:
The architecture design defines the system components and their interactions.
- Extra-functional properties:
The architecture design should address how the design architecture achieves
requirements for performance, capacity, reliability, adaptability, security.
Figure 13.3.
Software Architecture
Different architectural design methods: (Figure 13.3)
Fan-out
Control Hierarchy
Fan-in
Structural Partitioning
The program structure should be partitioned both horizontally and vertically. (Figure 13.4)
(1) Horizontal partitioning defines separate branches of the modular hierarchy for each
major program function.
(2) Vertical partitioning suggests the control and work should be distributed top-down in
program structure.
Information hiding:
Modules should be specified and designed so that the internal details of
modules should be invisible or inaccessible to other modules.
Functional independence:
Design modules based on independent functional features
A cohesive module performs a single task in a procedure with little interactions with others.
Good coupling ---> reduce or avoid change impact and ripple effects.
---> reduce the cost in program changes, testing, maintenance
Types of coupling: