Design Fundamentals
Software design is the activity of transforming customer requirements (as specified in the SRS) into a form that can be implemented in a programming language. A good design is rarely obtained in a single step; instead, it is refined iteratively through a series of design activities.
In practice, software design is usually divided into two broad levels:
4.1 Levels of Software Design
4.1.1 High-Level Design (HLD)
High-Level Design (HLD), also called preliminary design, architectural design or conceptual design, focuses on the overall structure of the software system.
- Identifies major modules and subsystems.
- Defines control and data relationships among modules.
- Specifies interfaces between subsystems and with external systems.
- Produces the software architecture or program structure.
A common notation at this level is the structure chart, which represents the system as a tree-like hierarchy of modules.
4.1.2 Low-Level Design (LLD)
Low-Level Design (LLD), also called detailed design or technical design, focuses on the internal design of individual modules.
- Designs data structures and internal representations used by each module.
- Specifies algorithms and control logic within modules.
- Defines module-level interfaces (inputs, outputs, preconditions, postconditions).
- Produces detailed module specification documents that guide coding.
4.2 Difference Between Analysis and Design
Although closely related, analysis and design serve different purposes in the software life cycle.
Analysis Phase
- Aim: Understand what the problem is.
- Focus: Remove inconsistencies, incompleteness, and ambiguity in the requirements.
- Output: A clear and validated statement of the problem, typically documented as the SRS.
Design Phase
- Aim: Provide a model that offers a smooth transition to coding (i.e. how the system will meet the requirements).
- Focus: Structure the system into components, define data and control flows, and specify algorithms and interfaces.
- Output: A design model (architecture and detailed design) that can be implemented directly.
4.3 Conceptual Design Questions
During conceptual (high-level) design, the designer refines the problem view from the SRS into an implementable solution view by answering questions such as:
- Where will the data come from (inputs, external systems, sensors, users)?
- What will happen to data inside the system (processing, validation, storage)?
- How will the system look to users (screens, reports, interfaces)?
- What choices or options will be offered to users during interaction?
- What are the timing constraints and event sequences (e.g. response time, schedules)?
- How will reports and screens be structured and formatted?