1 of 18

SOFTWARE DESIGN

Dr. Noman Islam

2 of 18

INTRODUCTION

​

  • Chapter introduces software design concepts.
    • Focus on translating requirements into system structure.
    • Covers architectural, component, and procedural design.
  • Importance of design in software engineering.
    • Ensures maintainability and scalability.
    • Guides efficient implementation.
  • Goal.
    • Learn principles, techniques, and quality metrics.
    • Understand design trade-offs.

3 of 18

4 of 18

DESIGN PROCESS OVERVIEW

​

  • Transform requirements into design.
    • Identify components and their interactions.
    • Define system architecture.
  • Iterative and incremental process.
    • Refine designs through iterations.
    • Incorporate feedback continuously.
  • Document design decisions.
    • Maintain design rationale.
    • Support communication with stakeholders.

5 of 18

DESIGN PRINCIPLES 1

​

  • Abstraction.
    • Focus on essential details.
    • Hide unnecessary complexity.
  • Modularity.
    • Divide system into cohesive modules.
    • Facilitate reuse and maintenance.
  • Separation of concerns.
    • Keep unrelated functions separate.
    • Enhances clarity and quality.

6 of 18

7 of 18

DESIGN PRINCIPLES 2

​

  • Information hiding.
    • Encapsulate internal module details.
    • Expose only necessary interfaces.
  • Coupling and cohesion.
    • Minimize inter-module dependencies.
    • Maximize internal cohesion.
  • Design simplicity.
    • Keep designs as simple as possible.
    • Avoid unnecessary complexity.

8 of 18

ARCHITECTURAL DESIGN

​

  • Define system’s high-level structure.
    • Identify major components.
    • Determine interactions and interfaces.
  • Architectural styles.
    • Layered, client-server, MVC, etc.
    • Select based on requirements.
  • Benefits of good architecture.
    • Supports scalability and maintainability.
    • Facilitates communication among teams.

9 of 18

COMPONENT-LEVEL DESIGN 1

​

  • Identify and define modules.
    • Each module has clear responsibility.
    • Define module interfaces.
  • Design for reusability.
    • Use generic and flexible components.
    • Reduce duplication.
  • Encapsulate data and functionality.
    • Maintain abstraction.
    • Prevent unintended interactions.

10 of 18

COMPONENT-LEVEL DESIGN 2

​

  • Cohesion in modules.
    • Keep related functionality together.
    • Simplify understanding.
  • Coupling between modules.
    • Minimize dependencies.
    • Improve maintainability.
  • Interface specification.
    • Clear input/output contracts.
    • Facilitate integration.

11 of 18

PROCEDURAL DESIGN

​

  • Design algorithms and procedures.
    • Define step-by-step operations.
    • Ensure correctness and efficiency.
  • Flow of control diagrams.
    • Visualize program logic.
    • Identify loops and decisions.
  • Mapping to modules.
    • Align procedures with components.
    • Support modular design.

12 of 18

USER INTERFACE DESIGN CONCEPTS

​

  • Design for usability.
    • Simple and intuitive layout.
    • Minimize user errors.
  • Consistency in design.
    • Uniform look and feel.
    • Predictable interactions.
  • Feedback mechanisms.
    • Inform users of system state.
    • Support error recovery.

13 of 18

DESIGN QUALITY ATTRIBUTES

​

  • Maintainability.
    • Easy to modify or extend.
    • Facilitates bug fixes.
  • Performance.
    • Efficient resource usage.
    • Timely response to requests.
  • Reliability and robustness.
    • Minimize failures.
    • Ensure graceful degradation.

14 of 18

DESIGN METRICS 1

​

  • Module size and complexity.
    • Lines of code, function points.
    • Assess understandability.
  • Coupling and cohesion metrics.
    • Low coupling desirable.
    • High cohesion desirable.
  • Code readability and clarity.
    • Easier for maintenance.
    • Reduces defects.

15 of 18

DESIGN METRICS 2

​

  • Reusability metrics.
    • Assess module generality.
    • Identify opportunities for reuse.
  • Flexibility metrics.
    • Ability to accommodate change.
    • Support evolving requirements.
  • Testability metrics.
    • Ease of verification.
    • Facilitates quality assurance.

16 of 18

DESIGN TRADE-OFFS

​

  • Performance vs maintainability.
    • Optimized code may reduce readability.
    • Simpler code may be slower.
  • Coupling vs cohesion.
    • Minimizing coupling may affect cohesion.
    • Balance is required.
  • Flexibility vs complexity.
    • Highly flexible designs may be complex.
    • Too simple may lack adaptability.

17 of 18

DESIGN PATTERNS OVERVIEW

​

  • Reusable solutions to common problems.
    • Capture best practices.
    • Provide standardized templates.
  • Examples include Singleton, Observer, Factory.
    • Solve common software challenges.
    • Promote consistency.
  • Benefits.
    • Reduce design errors.
    • Improve maintainability and communication.

18 of 18

CHAPTER SUMMARY

​

  • Design transforms requirements into system structure.
    • Architectural, component, and procedural design.
    • UI and behavioral aspects included.
  • Design principles guide quality.
    • Abstraction, modularity, information hiding.
    • Coupling, cohesion, simplicity.
  • Metrics and patterns support maintainability and reuse.
    • Evaluate quality quantitatively.
    • Apply proven solutions.