Software Engineering Notes

Software Engineering Notes

Introduction to Software Engineering

  • Course Code: CSC 421

  • Description: This course introduces software engineering processes, lifecycle phases like problem analysis, requirements definition, design, implementation, testing, maintenance, integration, and project management.

  • CILOs: At the end of this course, students will:

    1. Understand basic software engineering concepts.

    2. Illustrate software development processes.

    3. Explain the importance of software engineering.

    4. Assess software engineering roles and responsibilities.

    5. Design, verify, validate, implement, apply, and maintain software systems.

    6. Properly document systems.

Course Requirements

  • Assessment Items:

    • Prelim Grade:

    • Term Examination: 50%

    • Quizzes/Exercises: 20%

    • Class Participation: 5%

    • Attendance: 5%

    • Others: 20%

    • Midterm and Final grade calculation follows similar percentages.

  • Passing Grade: 60%

Module Overviews

Module 5: Agile Software Development
  • Introduction: Focuses on rapid software development processes that can adapt to changing requirements. Traditional waterfall processes are often too slow for current business needs.

  • Learning Outcomes:

    • Understand agile methods and their rationale.

    • Learn about Extreme Programming and Scrum.

    • Address challenges in scaling Agile development for larger systems.

Lesson 1: Agile Methods
  • Overview: A shift from heavy planning and documentation to flexibility and responsiveness.

  • Agile Manifesto Principles:

    1. Individuals and interactions over processes and tools.

    2. Working software over comprehensive documentation.

    3. Customer collaboration over contract negotiation.

    4. Responding to change over following a plan.

  • Success Contexts: Agile is effective in small-to-medium product development and when customer collaboration is prioritized.

Lesson 2: Plan-driven vs Agile Development
  • Plan-driven Development: Structured approach with distinct stages. Agile is iterative and promotes informal interaction between teams.

  • Questions for Balance:

    • Importance of detailed specifications?

    • Feasibility of incremental delivery?

    • Size and nature of the system?

Module 6: System Requirements
  • Introduction: Requirements are critical for software functionality and constraints, it's a balance of specifying what is needed vs what can be done.

  • Learning Outcomes:

    • Understand functional vs non-functional requirements.

    • Grasp requirements management importance.

Lesson 1: Functional and Non-Functional Requirements
  • Functional Requirements: What the system should do (e.g., services, behaviors).

  • Non-Functional Requirements: Constraints like performance, security, etc.

Module 7: Design Concepts and Principles
  • Overview: Design transforms requirements into a functional system.

  • Levels of Software Design:

    1. Architectural Design: Overall system structure.

    2. High-Level Design: Modular breakdown of architecture.

    3. Detailed Design: Specific module implementation details.

Lesson 1: Software Design Levels
  • Importance of modular design; smaller, independent modules are easier to manage and maintain.

Module 8: System Modeling
  • Purpose: Abstract models represent different views of a system for clarity and analysis.

  • Types of Models:

    1. External Perspective

    2. Internal Perspective

    3. Structural Perspective

    4. Behavioral Perspective.

Lesson 1: Types of UML Diagrams
  1. Activity Diagrams - depict process activities.

  2. Use Case Diagrams - show system interactions.

  3. Sequence Diagrams - show system interactions over time.

Module 9: Software Architecture and Design
  • Architecture Definition: Major components, relationships, and interactions.

  • Architectural Models: Include views like logical, process, development, physical, and use-case diagrams.

    • Common Architectural Patterns:

    • Model-View-Controller (MVC)

    • Repository Pattern

    • Client-Server Architecture

    • Pipe and Filter Architecture.

Conclusion and Exam Preparation

  • Review key concepts from agile methods, requirements engineering, design principles, and system architecture.

  • Prepare for discussions regarding advantages of prototyping, importance of DFD, and flowcharts in system development.


For further detail, consult the manuals and recommended references from various lectures.