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
High-Level Design (HLD): Overall system structure and major components.
Low-Level Design (LLD): Individual components and their interactions.
User Interface Design: Visual and interactive aspects of the software.
Database Design: Planning data storage and retrieval efficiency.
Performance Optimization: Address scalability and performance issues.
Architectural Patterns: Reusable solutions for design problems (e.g., MVC).
Design Patterns: Solutions for specific module design issues (e.g., Singleton).
Object-Oriented Design (OOD): Class and object interactions.
Functional Design: Inputs, outputs, and function behaviors.
Security Design: Identifying risks and mitigation strategies.
Integration Design: Communication between different modules.
Data Flow Design: Outlining data movement throughout the system.
Testability Design: Planning for testing components effectively.
Documentation: Recording design decisions and architecture.
Review & Validation: Ensuring design meets project goals.
Refinement & Iteration: Adjusting design based on feedback.
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.