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:
Concepts are defined as a principal idea or invention that comes in our mind or in thought to understand something. The software design concept simply means the idea or principle behind the design. It describes how you plan to solve the problem of designing software, the logic, or thinking behind how you will design software. It allows the software engineer to create the model of the system or software or product that is to be developed or built. The software design concept provides a supporting and essential structure or model for developing the right software. There are many concepts of software design and some of them are given below:
Following points should be considered while designing a Software:
- Abstraction- hide relevant data
Abstraction simply means to hide the details to reduce complexity and increases efficiency or quality. Different levels of Abstraction are necessary and must be applied at each stage of the design process so that any error that is present can be removed to increase the efficiency of the software solution and to refine the software solution. The solution should be described in broadways that cover a wide range of different things at a higher level of abstraction and a more detailed description of a solution of software should be given at the lower level of abstraction.
- Modularity- subdivide the system
Modularity simply means to divide the system or project into smaller parts to reduce the complexity of the system or project. In the same way, modularity in design means to subdivide a system into smaller parts so that these parts can be created independently and then use these parts in different systems to perform different functions. It is necessary to divide the software into components known as modules because nowadays there are different software available like Monolithic software that is hard to grasp for software engineers. So, modularity is design has now become a trend and is also important.
- Architecture- design a structure of something
Architecture simply means a technique to design a structure of something. Architecture in designing software is a concept that focuses on various elements and the data of the structure. These components interact with each other and use the data of the structure in architecture.
- Refinement- removes impurities
Refinement simply means to refine something to remove any impurities if present and increase the quality. The refinement concept of software design is actually a process of developing or presenting the software or system in a detailed manner that means to elaborate a system or software. Refinement is very necessary to find out any error if present and then to reduce it.
- Pattern- a repeated form
The pattern simply means a repeated form or design in which the same shape is repeated several times to form a pattern. The pattern in the design process means the repetition of a solution to a common recurring problem within a certain context.
- Information Hiding- hide the information
Information hiding simply means to hide the information so that it cannot be accessed by an unwanted party. In software design, information hiding is achieved by designing the modules in a manner that the information gathered or contained in one module is hidden and it cant be accessed by any other modules.
- Refactoring- reconstruct something
Refactoring simply means to reconstruct something in such a way that it does not affect the behavior or any other features. Refactoring in software design means to reconstruct the design to reduce and complexity and simplify it without affecting the behavior or its functions. Fowler has defined refactoring as “the process of changing a software system in a way that it won’t affect the behavior of the design and improves the internal structure”.
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.
Attention reader! Don’t stop learning now. Get hold of all the important CS Theory concepts for SDE interviews with the CS Theory Course at a student-friendly price and become industry ready.
- Software Engineering | Software Design Process
- Difference between Good Design and Bad Design in Software Engineering
- An Introduction to Software Development Design Principles
- Process Improvement in Defect Management Process (DMP)
- Difference between Function Oriented Design and Object Oriented Design
- Introduction to Business Process Re-engineering
- Software Engineering | Software Process Framework
- Software Engineering | Introduction to Software Engineering
- Personal Software Process (PSP)
- Software Engineering | Requirements Engineering Process
- Software Engineering | Incremental process model
- Software Engineering | Project Management Process
- Agile Software Process and it's Principles
- What is the Software Testing Automation Process ?
- Prototyping Approaches in Software Process
- Selection Process Parameters for a Software Life Cycle Model
- Software Process Customization and Improvement
- Components of Software Maintenance Process
- Advantages of Prototyping approach in Software Process
- Difference between Software Engineering process and Conventional Engineering Processs
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to firstname.lastname@example.org. 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.
Improved By : madhurihammad