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

  1. Requirements Analysis

  2. Design

  3. Development

  4. Testing

  5. 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.