ENCT352

Software Engineering

Syllabus

  1. Introduction (4 hours)
    1. Software and software engineering
    2. Nature and characteristics of software
    3. Software application domains
    4. Legacy software
    5. Software crisis
    6. Software myths
    7. Software engineering practice: essence of practice, general principles
  2. The Software Process (8 hours)
    1. Process framework and umbrella activities
    2. Traditional (plan-driven) process models: waterfall and its extensions, incremental, evolutionary (prototyping, spiral)
    3. Agile and adaptive process models: agile manifesto and the 12 principles, agile versus plan-driven development, Scrum framework (roles, artifacts, ceremonies), Extreme Programming (XP) practices, lean software development
    4. Model selection considerations
  3. Software Requirements Engineering (6 hours)
    1. Requirement engineering process
    2. SRS (structure, characteristics, users)
    3. Functional and non-functional requirements
    4. Gathering requirements using use cases modeling and scenarios
    5. Agile requirements engineering: user stories and acceptance criteria, product backlog creation and prioritization, story mapping basics, continuous requirements refinement (backlog grooming)
  4. Architectural Design (3 hours)
    1. Introduction and importance
    2. Architectural design principles
    3. Taxonomy of architectural styles
    4. Modular design, cohesion and coupling
  5. System Modeling (9 hours)
    1. System modeling: need for system modeling, role of abstractions in managing complexity
    2. Process modeling using DFD
    3. Scenario-based analysis: concept of scenarios, use-case descriptions and diagrams
    4. Behavioral and structural modeling: activity diagrams, class-based modeling
  6. Coding and Testing (5 hours)
    1. Coding standards and guidelines
    2. Code review: code walkthrough, code inspection, cleanroom technique
    3. Software testing fundamentals: verification and validation, unit, integration, system and acceptance testing
    4. Black-box and white-box testing approach
    5. Agile testing practices: test-driven development (TDD), continuous testing, automated unit testing basics, refactoring for code quality
  7. Software Quality, Assurance, Maintenance (4 hours)
    1. Quality concepts
    2. Quality attributes
    3. Reviews, inspections and QA concepts
    4. ISO standards, CMMI levels
    5. Software maintenance and its types
    6. Maintenance effort and lifecycle considerations
  8. Software Configuration Management (3 hours)
    1. Software configuration management
    2. Version control and continuous integration
    3. Change management process
    4. Branching strategies (Git-flow basics)
  9. Recent Trends (3 hours)
    1. DevOps and continuous deployment pipelines
    2. Continuous integration/continuous delivery (CI/CD) in modern projects
    3. Cloud-native, microservices architectures and infrastructure as code (IaC)
    4. AI-assisted software development
    5. Low-code/no-code, green software engineering

Practicals

  1. Preparation and organization of software requirements specification (SRS) using standard templates
  2. Construction of UML diagrams (use case, activity, class, and sequence) using modeling tools
  3. Design of system architecture and component structure using CASE tools
  4. Implementation of key system modules following coding standards and best practices
  5. Execution of testing procedures (unit and integration) and documentation of results
  6. Application of version control (Git), CI/CD workflow setup, and containerization using Docker
  7. Term project