Modular and Layered Design
In the previous chapter of this software engineering tutorial, we have already informed that a good software design should be modular and layered.
Both modular and layered designs are easily understandable.
To make a design understandable, following steps may be taken:
meaningful names should be assigned to various components,
make good use of principles of decomposition and abstraction to ease the design
Modular software design
Modular software design is one in which the original problem statement is broken down into several modules. Modular nature is the basic characteristics of a good software design. When decomposed, each module has its own functionality to take care of. And each module will interact with other modules to form the complete software system.
While decomposing the problem statement into modules, it should be ensured that each modules should be designed such that they are functionally independent. There should be very little or no interactions with other modules involved. This would decrease the dependency of one module on other module. This would also help each module to be understood seperately.
A software design is said to be modular if the different modules have high cohesion and their inter-module couplings are low.
Layered software design
A layered software design is one in which when the call relationships among different modules are represented graphically, it would result in a tree-like diagram with clear layering. In the layered design, the modules are arranged in the hierarchy of layers.
In such design, a module can only invoke functions of the modules in the layer immediately below it. The higher layer module can be considered similar to management who can invoke lower layer module to get a certain task done.
Layered design makes the work easily understandable, since the layered design easily reflect the relationships among different layers and clears which layer invokes the other layers. This is also helpful in debugging in case of error. When failure is detected then it is obvious that only lower layer can possibly be source of the error.
In next chapters of the tutorial, we will learn about cohesion and coupling. Both are very important concept in software design.