Lecture Notes 1 - SDA

ZCAS University - CCS3232 Lecture Notes

Introduction and Basic Principles

  • Course focuses on software architecture and design.

  • Distinguishes between phases: Software Architecture and Software Design.

Software Architecture vs Software Design

  • Software Architecture:

    • Addresses system-level concerns.

    • Organizes major components and interactions.

    • Focuses on overall structure.

  • Software Design:

    • Solves specific design-level issues.

    • Detailed design of modules/components.

    • Focuses on interactions within components.

Key Definitions

  • Software Architecture: High-level structure defining components and relationships in a system.

  • Software Design: Process of planning and creating a blueprint for software applications.

Software Architecture Details

  • Defines structure and constraints for developers.

  • Includes component interactions and operating environment.

  • Involves documentation for stakeholder communication.

Software Design Overview

  • Produces effective and efficient software systems.

  • Considers user needs and hardware/software constraints.

  • Defined in terms of how the modules and components interact.

Major Differences Between Software Architecture and Design

  • Architecture defines fundamental properties and high-level infrastructure.

  • Design specifies detailed properties and provides implementation guidance.

Key Principles of Software Architecture

  • Build to Change: Flexibility for future modifications.

  • Reduce Risk: Use design tools to capture and analyze requirements.

  • Iterative Approach: Start with baseline architecture and evolve.

Key Principles of Software Design

  • Separation of Concerns: Avoid overlapping features among components.

  • Single Responsibility Principle: Each module should have one specific responsibility.

  • Communication Definition: Ensure knowledge of component communication.

  • Exception Handling and Naming Conventions: Plan for error management and consistent naming.

Types of Software Architecture/Design

  1. High-Level Design (HLD): Overall system structure and major components.

  2. Low-Level Design (LLD): Individual components and their interactions.

  3. User Interface Design: Visual and interactive aspects of the software.

  4. Database Design: Planning data storage and retrieval efficiency.

  5. Performance Optimization: Address scalability and performance issues.

  6. Architectural Patterns: Reusable solutions for design problems (e.g., MVC).

  7. Design Patterns: Solutions for specific module design issues (e.g., Singleton).

  8. Object-Oriented Design (OOD): Class and object interactions.

  9. Functional Design: Inputs, outputs, and function behaviors.

  10. Security Design: Identifying risks and mitigation strategies.

  11. Integration Design: Communication between different modules.

  12. Data Flow Design: Outlining data movement throughout the system.

  13. Testability Design: Planning for testing components effectively.

  14. Documentation: Recording design decisions and architecture.

  15. Review & Validation: Ensuring design meets project goals.

  16. Refinement & Iteration: Adjusting design based on feedback.

  17. Deployment Design: Planning software deployment strategies.

Importance of Software Architecture and Design

  • Structuring Complexity: Maintains code organization.

  • Scalability: Supports increased loads without performance loss.

  • Maintainability: Enhances code modularity.

  • Flexibility: Adapts to changing requirements.

  • Reusability: Encourages creation of reusable components.

  • Testability: Facilitates effective testing practices.

  • Security: Enforces measures against vulnerabilities.

  • Team Collaboration: Improves understanding among team members.

  • Project Planning: Aids in realistic project estimation.

  • Client Satisfaction: Results in high-quality software products.