Software Design
Software design translates requirements into a blueprint for constructing the software. The purpose of design phase is to produce a solution to be Problem given in Software Requirement Specification (SRS) document Here, we generate a Software Design document. Document (SDD
Design Concepts
It basically describes the three things given below
- Separation of function/data structure detail from a conceptual representation of the software (abstraction and refinement),
- Deciding criteria to partition software into individual components
(i.e,, modularity).
- Criteria to define the technical quality of a software design.
Abstraction
Abstraction can be defined as the process of looking what is essential to your perspective or understanding without looking at the complex or low level details.
Types of Abstraction
Two types of abstractions are available in modern programming language.
- Data Abstraction e., a named collection of data that describes a data object.
- Procedural Abstraction e., a named sequence of instructions with a specific and limited function.
Consider a sentence of two words i.e., open door, In this sentence, open
could be an example of procedural abstraction and door could be an example of data abstraction.
Open implies a long sequence of procedural steps such as
- Walk to the door
- Turn knob and pull door
Refinement/Stepwise Refinement
A hierarchy is developed by decomposing a macroscopic statement of
function (a procedural abstraction) in a stepwise fashion until programming
language statements are reached.
Top.down Decomposition In each step of the refinement, one or several
Instructions of the given program are decomposed into more detailed
instructions. This successive decomposition or refinement of specifications
terminates when all instructions are expressed in terms of underlying
computer or programming language.
Modularity
Modularity is the process, wherein software is divided into separately named and addressable components, often called modules, that are Integrated to satisfy problem requirements. it uses the divide and conquere approach for solving a complex problem by breaking it or modularising it Into smaller modules.
Control Hierarchy
lt represents the organisation of program components (modules) and implies a hierarchy of control. does not It represent procedural aspects of software such as sequence of processes, occurence or order of decisions or repetitions, nor is it necessarily applicable to all architectural styles.
Horizontal Partitioning
A module that controls other module is called as manager module, while module controlled by another is known as subordinate of the manager module. Horizontal partitioning defines separate branches of the hierarchy for each valor program function. The simplest approach to horizontal partitioning defines three partitions; input, data transformations or processing and output.
Vertical Partitioning
It is also called factoring. it suggests that control (decision-making) and work should be distributed top-down in the program structure.
Key Points
- Top-level modules should perform control functions and do little processing
- Modules that reside lower in the structure should be the workers, performing all input, computations and output tasks.
Functional Independence
Functional independence is achieved by developing modules with single-minded functionality (functionally cohesive) and an aversion to excessive interactive, with other modules (weak coupling). Functional independence is a key to good design and good design is key to software quality.
Functional independence is measured using two qualitative criteria
(I) Cohesion (ii) Coupling
Cohesion
Cohesion is a measure of the degree to which the elements of a module are functionally related.
Key Points
- A strongly cohesive module implements functionality that is related to one feature of the solution and requires little or no interaction with other modules.
- Cohesion is equal to strength of relations within modules.
Here , an important design objective is to maximize the module cohesion and minimize the module coupling.
Coupling
Coupling is the measure of the degree of interdependence or interconnection between modules.
Key Points
- Two modules with high coupling are strongly interconnected and thus dependent on each other.
- Two modules with low coupling are less or not dependent on one another.