Effective Modular Design in Software Engineering
The role of effective modular design in software engineering:
Any software comprises of many systems which contains several sub-systems and those sub-systems further contains their sub-systems. So, designing a complete system in one go comprising of each and every required functionality is a hectic work and the process can have many errors because of its vast size.
Thus in order to solve this problem the developing team breakdown the complete software into various modules. A module is defined as the unique and addressable components of the software which can be solved and modified independently without disturbing ( or affecting in very small amount ) other modules of the software. Thus every software design should follow modularity.
The process of breaking down a software into multiple independent modules where each module is developed separately is called Modularization.
Effective modular design can be achieved if the partitioned modules are separately solvable, modifiable as well as compilable. Here separate compilable modules means that after making changes in a module there is no need of recompiling the whole software system.
In order to build a software with effective modular design there is a factor “Functional Independence” which comes into play. The meaning of Functional Independence is that a function is atomic in nature so that it performs only a single task of the software without or with least interaction with other modules. Functional Independence is considered as a sign of growth in modularity i.e., presence of larger functional independence results in a software system of good design and design further affects the quality of the software.
Benefits of Independent modules/functions in a software design:
Since the functionality of the software have been broken down into atomic levels, thus developers get a clear requirement of each and every functions and hence designing of the software becomes easy and error free.
As the modules are independent they have limited or almost no dependency on other modules. So, making changes in a module without affecting the whole system is possible in this approach.
Error propagation from one module to another and further in whole system can be neglected and it saves time during testing and debugging.
Independence of modules of a software system can be measured using 2 criteria : Cohesion, and Coupling. These are explained as following below.
Cohesion is a measure of strength in relationship between various functions within a module. It is of 7 types which are listed below in the order of high to low cohesion:
1. Functional cohesion 2. Sequential cohesion 3. Communicational cohesion 4. Procedural cohesion 5. Temporal cohesion 6. Logical cohesion 7. Co-incidental cohesion
Coupling is a measure of strength in relationship between various modules within a software. It is of 6 types which are listed below in the order of low to high coupling:
1. Data Coupling 2. Stamp Coupling 3. Control Coupling 4. External Coupling 5. Common Coupling 6. Content Coupling
A good software design requires high cohesion and low coupling.