System Design Concepts
System design is a process to transform user requirements into some suitable form, which helps the programmer in software coding and implementation. It is the most important step in system development. At first, user requirements are obtained using an SRS (Software Requirement Specification) document. Then coding and implementation is done and later detailed requirements are obtained. It moves the concentration from problem domain to solution domain and tries to specify how to fulfill the requirements mentioned in SRS.
Basic Steps of Software Development:
- Requirement Gathering and analysis
- Diagrams to represent models and relationships Eg: Class diagram
- Prototype Design
- Feedback gathering from Users
- Add feedbacks to make it feed-forward in the system
- System Design: Eg: Modularization, sub-systems.
Software Design Levels
- Highest abstract version of the system
- Identifies the software as a system with many components interacting with each other
- Gives designers the idea of proposed solution domain
- Breaks the ‘single entity-multiple component’ concept of architectural design into less-abstracted view of sub-systems and modules and depicts their interaction with each other.
- Focuses on how the system, along with all of its components can be implemented in forms of modules
- Deals with the implementation part of what is seen as a system and its sub-systems in the previous two designs
- Is more detailed towards modules and their implementations
- Defines logical structure of each module and their interfaces to communicate with other modules.
Important concepts in System Design
Modularization is a technique to divide a software system into multiple discrete and independent modules, which are expected to be capable of carrying out task(s) independently. * Modules are designed such that they can be executed and/or compiled separately and independently. * Follows the rules of ‘divide and conquer’ problem-solving strategy.
Advantages of Modularization
- Smaller components are easier to maintain
- Desired level of abstraction can be brought in the program
- Program can be divided based on functional aspects
- Concurrent execution can be made possible
- Components with high cohesion can be re-used again
Cohesion is a measure that defines the degree of intra-dependability within elements of a module. Higher the cohesion, the better the program becomes.
Coupling is a measure that defines the level of inter-dependability among modules of a program. It tells at what level the modules interact with each other. Lower the coupling, the better the program.
Software design is a step in software development that allows programmers to get the overall picture of required software. The output of software design process is design documentation, pseudo codes, detailed logic diagrams, process diagrams, and detailed description of all functional or non-functional requirements. These helps to make programmers to easily code the picturized software and move forward.