Software Engineering – Software Design and
Architecture (Expanded Notes)
1. Introduction to Software Design
Software design is a critical phase of the Software Development Life Cycle (SDLC) where system
requirements are transformed into a blueprint for implementation.
It serves as a bridge between requirements analysis and coding, ensuring that the system is
logically structured and technically feasible.
Good software design reduces development effort, improves maintainability, and enhances system
reliability.
2. Objectives of Software Design
The primary objective of software design is to create a solution that satisfies functional and
non-functional requirements.
Design aims to minimize complexity, promote reusability, and support future evolution of the
software system.
A well-designed system ensures clarity, consistency, and robustness.
3. Design Process
The design process typically involves architectural design, high-level design, and detailed design.
Architectural design defines system structure, while detailed design focuses on internal logic of
components.
Iterative refinement is often used to improve design quality.
4. Fundamental Design Concepts
Abstraction helps designers focus on essential features while ignoring unnecessary details.
Modularity divides the system into manageable components.
Information hiding restricts access to internal data structures, reducing dependencies.
Refinement is the process of elaborating high-level designs into detailed representations.
5. Design Principles
Design principles guide developers toward creating high-quality software systems.
Principles such as low coupling and high cohesion improve maintainability.
Consistency and simplicity are key principles in effective design.
6. Architectural Design
Architectural design defines the overall organization of a software system.
It identifies subsystems, components, and their interactions.
Architecture acts as a foundation for detailed design and implementation.
7. Architectural Styles and Patterns
The Layered architecture separates concerns into distinct layers.
Client-Server architecture divides responsibilities between service providers and requesters.
Model-View-Controller (MVC) separates user interface from business logic.
Microservices architecture structures applications as loosely coupled services.
8. Component-Level Design
Component-level design focuses on defining individual modules and their interfaces.
It includes algorithms, data structures, and control logic.
Clear interfaces improve reusability and testability.
9. Object-Oriented Design
Object-Oriented Design (OOD) organizes software around objects and classes.
Key concepts include encapsulation, inheritance, polymorphism, and abstraction.
OOD supports reuse and scalability.
10. UML in Software Design
Unified Modeling Language (UML) provides standard notations for visualizing system design.
Common UML diagrams include class diagrams, sequence diagrams, and component diagrams.
UML enhances communication among stakeholders.
11. Design Quality Attributes
Maintainability refers to ease of modification.
Performance measures system efficiency.
Scalability ensures system growth handling capability.
Security protects system resources and data.
12. Design Metrics
Metrics such as coupling, cohesion, and complexity help evaluate design quality.
Design metrics provide quantitative insights into system structure.
13. Design Documentation
Design documentation records architectural decisions and component details.
It serves as a reference during development and maintenance.
14. Design Challenges
Handling changing requirements is a major challenge.
Balancing flexibility with simplicity requires experience.
Ensuring performance and security adds complexity.
15. Best Practices in Software Design
Follow established design patterns.
Conduct design reviews regularly.
Document assumptions and decisions clearly.
16. Summary
Software design plays a vital role in determining system success.
A structured, principle-driven design approach leads to reliable and maintainable software.