TOPIC 1
Software Design Fundamentals
Learning Outcomes
Explain the role of software design in SDLC (Software Development Life Cycle)
Describe fundamental software design concepts
Understand key principles: modularity, abstraction, cohesion, and coupling
Recognize key software design activities
Identify major design models used in software development
What is Design?
Definition:
A creative planning process that transforms ideas into structured solutions.
In engineering and computing, design involves:
Problem solving
Decision making
Planning before building
Representing ideas using models and diagrams
Why Design is Important
Design helps developers understand the system before implementation.
Consequences of lack of design:
Development becomes chaotic.
Systems become difficult to maintain.
Errors increase.
Team collaboration becomes harder.
Design vs Development
Design:
Involves planning how the system will work.
Involves creating models and structures.
Development:
Involves implementing the system using code.
Involves testing and deployment.
Software Design
Definition:
The process of transforming software requirements into a blueprint for implementation.
The blueprint guides programmers in building the software system.
Software Design Goals:
Translate requirements into technical solutions
Structure the system into manageable parts
Improve maintainability and scalability
Reduce complexity
Software Design in the SDLC
Requirements Analysis
Design
Development
Testing
Maintenance
Activities in Software Design
Understanding system requirements
Designing system components
Defining data structures
Designing system interfaces
Preparing documentation
Software Design Outputs
Design Specifications
System Models
Interface Descriptions
Data Structures
Components Design
Conceptual vs Technical Design
Technical Design:
How the system will be implemented.
Involves technologies, tools, and structures.
Conceptual Design:
What the system should do.
Involves system behavior and user interaction.
Design Models
Purpose: Helps developers visualize system structure.
Data Design:
Involves data structures, data storage, and data relationships.
Often derived from analysis models such as Entity-Relationship Diagrams (ERD) and data dictionaries.
Interface Design:
Involves user-system interactions and communication between system components.
Integrates with external systems.
Component Design:
Breaks the system into smaller components or modules.
Each component has:
A specific responsibility.
Defined inputs and outputs.
Fundamental Design Concepts
1. Abstraction
Types of Abstraction:
Data Abstraction: Focuses on the necessary data representations.
Procedural Abstraction: Focuses on the functions or procedures.
Definition: It focuses on essential details while hiding unnecessary complexity.
2. Modularity
Definition: Divides a system into smaller independent modules.
Benefits:
Easier development.
Easier debugging.
Better maintenance.
3. Information Hiding
Benefits:
Reduced system complexity.
Better maintainability.
Principle: Modules should hide internal details and expose only necessary information.
4. Functional Independence
Cohesion:
Measures how strongly related the functions within a module are.
High cohesion is desirable.
A good module should:
Perform one specific task.
Have minimal dependency on other modules.
Coupling:
Measures the dependency between modules.
Low coupling is desirable.
5. Refinement
Definition: Start with high-level design and progressively add details.
Process: Gradually elaborating a design.
6. Refactoring
Definition: Improving internal code structure without changing external behavior.
Example Cases:
Removing redundant logic.
Simplifying algorithms.
Later Topics
1. Software Architecture
Focuses on the high-level structure of software systems.
Defines major components and how they interact.
2. Process Modelling
Used to represent workflows and system processes.
Data Flow Diagrams (DFD).
3. Data Modelling
Describes how data is structured and related.
Entity Relationship Diagrams (ERD).
4. Object-Oriented Modelling
Focuses on objects, classes, and relationships.
UML Class Diagrams.
UML Sequence Diagrams.
5. User Interface Design
Designing the interaction between users and software.
Focuses on usability, accessibility, and user experience.
Summary
Software design translates requirements into a blueprint.
Design improves software quality and maintainability.
Key principles include: abstraction, modularity, cohesion, and coupling.
Several design models help structure software systems.