Software Design is the process to transform the user requirements into some suitable form, which helps the programmer in software coding and implementation. During the software design phase, the design document is produced, based on the customer requirements as documented in the SRS document. Hence the aim of this phase is to transform the SRS document into the design document.
The following items are designed and documented during the design phase:
- Different modules required.
- Control relationships among modules.
- Interface among different modules.
- Data structure among the different modules.
- Algorithms required to implement among the individual modules.
Objectives of Software Design:
A good design should be correct i.e. it should correctly implement all the functionalities of the system.
A good software design should address the resources, time and cost optimization issues.
A good design should be easily understandable, for which it should be modular and all the modules are arranged in layers.
The design should have all the components like data structures, modules, and external interfaces, etc.
A good software design should be easily amenable to change whenever a change request is made from the customer side.
Software Design Concepts:
The set of fundamental software design concepts are:
An abstraction is a powerful design tool which allows a designer to consider a component at an abstract level without bothering about the internal details of the implementation. The concept of abstraction can be used in two ways: as a process and as an entity.
As a process, it defines a mechanism of hiding irrelevant details and representing only the essential features of an item. As an entity, it defines a model or view of an item. There are two common abstraction mechanisms are Functional Abstraction and Data Abstraction. A sequence of instruction that contains a specific and limited function refers to a Functional Abstraction and Data Abstraction is a collection of data that describes a data object.
The complete structure of the software, which is composed of various components of a system, the attributes of those components and the relationship amongst them is called Software Architecture. This software architecture is the structure of program modules where they interact with each other in a specialized way and enables software engineers to analyze the software design efficiently.
A modular design achieves effective decomposition of the problem that means the problem has been decomposed into a set of modules. Modularity is the single attribute of software that allows a program to be easily manageable.
Advantage of modularization:
- Program can be divided based on functional aspects.
- Each module is a well-defined system that can be used with other applications.
- It allows large programs to be written by several or different people.
- It provides a framework for complete testing, more accessible to test.
- Concurrent execution can be made possible.
- Information Hiding:
The fundamental concept of Information Hiding suggests that modules can be characterized by the design decisions that protect from the others. The use of information hiding provides the most significant benefits when modifications are required during testing’s and later during software maintenance.
Different levels of Software Design:
There are three different levels of software design. They are:
- Architectural Design:
The architecture of a system can be viewed as the overall structure of the system & the way in which structure provides conceptual integrity of the system. The architectural design identifies the software as a system with many components interacting with each other. At this level, the designers get the idea of the proposed solution domain.
- Preliminary or high-level design:
Here the problem is decomposed into a set of modules, the control relationship among various modules identified and also the interfaces among various modules are identified. The outcome of this stage is called the program architecture. Design representation techniques used in this stage are structure chart and UML.
- Detailed design:
Once the high level design is complete, detailed design is undertaken. In detailed design, each module is examined carefully to design the data structure and algorithms. The stage outcome is documented in the form of a module specification document.
- Software Engineering | Project size estimation techniques
- Types of Software Testing
- Software Testing | Basics
- Software Engineering | Architectural Design
- Software Engineering | Halstead’s Software Metrics
- Beta Testing | Software Testing
- Software Engineering | Debugging Approaches
- Pairwise Software Testing
- Software Engineering | COCOMO Model
- Software Engineering | Classification of Software Requirements
- Software Engineering | Classical Waterfall Model
- Software Engineering | Iterative Waterfall Model
- Software Engineering | Spiral Model
- Software Engineering | Requirements Engineering Process
- Software Engineering | Requirements Elicitation
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to email@example.com. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.