Software Design Basics - Software Engineering

What is Software Design?

The requirements can be changed into any other desired form enabling the coding and implementation of the software by the programmers. This process is defined as Software Design.

Software Requirement specification document is used for assessing the requirements. But requirements need to keen, specific and should be more particular for carrying out coding and implementation. The programming languages utilize the output for implementation.

The attention is being shifted from the area of problem to the area of solution by Software design. The requirements that are stated in SRS are being fulfilled by Software design.

What are the different levels of Software Design?

There are three different levels of software design. They are -

  • Architectural Design – Software is considered as a system that has huge number of components and enabling the components to communicate among them. The idea of the proposed area of solution is acquired by the users at this level.
  • High-level Design- Software is considered as a collection of modules and sub-systems and the communication between them is described. The design aims at implementation of the system along with the components. For each of the sub-system the high-level design enables to identify the modular structure and the communication between the sub-systems is recognized.
  • Detailed Design- The system as considered in the architectural design and sub-systems as considered in high-level designs are implemented in detailed design. Detailed design facilitates in implementation of the modules. For each of the module, this design defines their logical structure and the interface for interaction.

What is Modularization?

A software system is separated into a number of independent modules thus enabling each of the modules to work and carry out the task independently. This separation practice is known as Modularization. For the complete software the independent modules serve as basic constructs. The modules are separated in such a manner that they are enabled to independently compile or execute.

‘Divide and Conquer’ strategy is followed for solving the problems. The practice of modularization has many benefits associated. They are as follows -

  • It becomes easy to maintain the small components
  • On the basis of functional aspects, the programs are separated.
  • The level of abstraction as required can be implemented in the program.
  • There can be a re-use facility for the high cohesion modules.
  • It is possible to implement concurrent execution
  • It is very helpful from the security point of view.

What do you mean by Concurrency?

All the software programs are always executed one after the other. As the instructions execute one after the other, at a specific point of time, it is considered that only a portion of the program is active and not the complete program. For instance, At any specific time of execution, only any one of the modules among multiple modules of a software, is active.

The software is separated into different independent modules, enabling each of the modules to execute independently. This facilitates in parallel execution of the modules. This process is known as Concurrency. Hence, parallel execution of the software at multiple places is facilitated by the concept of concurrency.

It is always suggested to identify the modules which can be executed at the same time.


For the word processor software, spell check is a module that works independently. Both the software, word processor and the module spell check runs at the same time parallel.

What do you mean by Coupling and Cohesion?

By modularization, a software system is separated into a number of independent modules. Each module includes set of instructions used for performing a task. Each of the modules is considered independent but they work in a relation with each other. The quality of designing the modules and their interaction is quantified by using certain measures which are known as coupling and cohesion.


For the elements that are within the module, the level of their intra-dependability is defined by Cohesion. It is considered that the program design is better when the rate of cohesion is high.

Cohesion is of different types. They are -

  • Co-incidental cohesion – When modularization is practiced simply for the sake of it without any planning, such cohesion is known as co-incidental cohesion. It is usually not preferred and accepted by the programmers as there are chances of cohesion confusing the programmers.
  • Logical cohesion – When modularization is practiced on the basis of certain logic, and the elements are made together in a particular module based on that logic, such cohesion is known as logical cohesion.
  • Temporal Cohesion – When all the elements of the module are structured in such a manner it enables the modules to be processed at the same time, such cohesion is known as temporal cohesion.
  • Procedural cohesion – All the elements of the module are structured in such a manner that it enables to execute them one after the other for performing a specified task, such cohesion is known as procedural cohesion.
  • Communicational cohesion – All the elements of the module are structured in such a manner that they are sequentially executed on the same data; such cohesion is known as communicational cohesion.
  • Sequential cohesion – The elements of the modules are arranged in such a manner that the input for the second module will be the output of the previous module, such cohesion is known as sequential cohesion.
  • Functional cohesion – All the elements of the module are grouped in such a way that they work for a single function, such cohesion is known as Functional cohesion.


For the modules of a software program, the inter-dependability level is quantified by the measure known as Coupling. A particular level at which the modules interface and interact is measured by Coupling. It is considered that the software program is better when coupling is low.

Coupling has five different levels. They are -

  • Content coupling – When the content of the module can be accessed directly by other modules, it is known as content coupling.
  • Common coupling- When the global data can be accessed for reading and writing by multiple modules, it is known as common coupling.
  • Control coupling- When the execution flow of the module is changed and when the functions of the modules are designed by other module, it is known as control coupling.
  • Stamp coupling- When the data structure is commonly shared by multiple modules, it is known as stamp coupling.
  • Data coupling- When a module uses the components as passed by other module, it is known as data coupling.

What do you mean by Design Verification?

All the functional and non-functional requirements are processed and executed by software design for accomplishing a specific task. The process of software design comes up with output which is in many forms. The output of the process include – design documentation, pseudo codes, logical and process diagrams.

Depending on these outputs, the software is implemented.

It is mandatory to check the output prior to implementation. It is always better to detect mistakes if any, at early stage. If not, it is not possible to detect until the stage of testing. Verification tools which are associated with specific phase of the design are used for detecting errors. In other way, verification and validation cab be done by a detailed and through review of the design.

At some instances, some conditions remain overlooked which may lead to some defects. These defects can be detected by using a approach of structured verification which is usually done by the reviewers. For a software design to a good, accurate and qualitative, it is essential to have a good design review.

All rights reserved © 2018 Wisdom IT Services India Pvt. Ltd Protection Status

Software Engineering Topics