Types of Software Design in Software Engineering

Software Design:

During the software design phase, the design document is produced, based on the customer requirements as documented in the SRS document. The activities carried out during the design phase are called Design Process.

Classification of Software Design Methodologies:

Analysis versus design:

The analysis results are generic and do not consider the implementation of the issues associated with specific platforms. The analysis model is usually documented using some graphical formalism. In the case of the function-oriented approach that we are going to discuss, the analysis model would be documented using data flow diagrams (DFDs), whereas the design would be documented using a structure chart.

On the other hand, for the object-oriented approach, both the design model and the analysis model will be documented using the unified modelling language (UML). The analysis model would normally be very difficult to implement using a programming language.

Modularity:

A modular design is an effective decomposition of a problem. It is a basic characteristic of any good design solution. A modular design, in simple words, implies that the problem has been decomposed into a set of modules that have only limited interactions with each other.

The decomposition of a problem into modules facilitates taking advantage of the divide-and-conquer principle. If different modules have either no interactions or little interactions with each other, then each module can be understood separately. This reduces the perceived complexity of the design solution greatly.

Layered Design:

A layered design is one in which when the call relations among different modules are represented graphically, it would result in a tree-like diagram with clear layering. In a layered design solution, the modules are arranged in a hierarchy of layers. A module can only invoke functions of the modules in the layer immediately below it. The higher layer modules can be considered to be similar to managers that invoke (order) the lower layer modules to get certain tasks done.

A layered design can be considered to be implementing control abstraction. A layered design can make the design solution easily understandable since to understand the working of a module, one would at best have to understand how the immediately lower layer modules work without having to worry about the functioning of the upper layer modules.