Preface

In this course the students learn the main principles of Software Engineering. This means that students will make the step from Coders to Software Engineers which is a fundamentally important step in the learning experience of every student in a Computer Science degree. This course can therefore be regarded as the essence of the Software and Information Engineering Bachelor and students are expected to approach it with appropriate seriousness and discipline.

The focus is on a very applied and real-world form of software engineering, therefore the heart of the course is the Project which serves as the reference point around which the whole course is structured. The lecture content is synced with the Project and avoids teaching content which is of rather academic and detached from real-world software engineering. Thus, a fully agile approach is implemented from start until the end and we avoid heavy-weight upfront analysis and aim to get the project off the ground within 3 weeks.

The central aim is to teach concepts and not technology: in the lecture the students will learn the concepts, which they then apply in the project using various technologies. Therefore, ultimately, the focus is on applying software engineering concepts in an interesting and complex domain which has to be implemented using Domain-Driven Design (DDD) principles.

The course runs in sync with two other courses: Agile Projectmanagement and Web Technologies which teach additional concepts and also technologies, which lie beyond the focus of this courses lecture but which are important ingredients to the Project.

For more discussion see Software Engineering is a learning process, working code a side effect and From Coder to Developer.

Seminar

The seminar is used to work on the project: live coding, sprint planing, discussing issues, introducing new requirements, preparing students for customer workshops, discussion among groups, presenting implementations, getting feedback,… Also, in the seminar students apply certain techniques learned in the lectures in selected examples and exercises to deepen their understanding and be able to apply it in the Project.

Project

In the project students develop a product for a fake customer in an interesting and complex domain (Product Vision: Hotel Management Software) in groups of 5.

  • The general focus is on a complex domain. Students analyse and prioritise features from a business-value perspective and translate them into software features.

  • Domain Driven Design (DDD) is used as the central methodology to translate the conceptual domain into software.

  • As development process a fully agile SCRUM is used as well as strictly following Test-Driven Development (TDD) principles.

  • The technological focus is on Multiuser and Full-Stack: Monolithic Web (server-side MVC and client-side SPA), relational DB.

The project is structured into 7 sprints:

  1. Sprint: 16 Feb - 9 Mar (3 weeks) Project and Team Setup
    • Setting up Azure DevOps
    • Analysing Product Vision
    • Impact Mapping
    • Defining Epics, Features and User Stories
    • Priorisation
    • Event Storming
  2. Sprint: 9 Mar - 23 Mar (2 weeks)
    • Code and Architecture Setup
    • Setting up coding tools and guidelines
    • Setting up architecture
    • Implementing the first simple user story
  3. Sprint: 23 Mar - 6 Apr (2 weeks)
    • First User Stories
  4. Sprint: 6 Apr - 20 Apr (2 weeks)
    • Core Features
  5. Sprint: 20 Apr - 4 May (2 weeks)
    • Core Features
  6. Sprint: 4 May - 18 May (2 weeks)
    • New Requirements
    • Refactoring architecture
  7. Sprint: 18 May - 1 Jun (2 weeks)
    • New Requirements

The project shall be implemented as a full-stack web application using the following technology stack:

  • Java 11 (MS DevOps supports up to 11)
  • Spring Boot 2.4
  • Spring Data JPA with Hibernate
  • Postgres DB
  • Server-Side rendering with Spring MVC using Thymeleaf
  • REST with Spring Boot
  • Client-Side rendering with React / Angular / Vue (includes JS/TS)
  • Gradle
  • Microsoft Azure DevOps
  • Microsoft Azure VM

Additional Tools

  • Miro.com: real-time online collaborative boards for Impact Mapping, Event Storming and User Story Mapping

Timeline

PHASE I Product Vision, Analysis and Requirements
  1. Lecture 2 SWS on Tuesday 16th Feb, 11:30-13:05
    • Introduction
    • Impact Mapping
  2. Lecture 2 SWS on Wednesday 17th Feb, 08:10-09:45
    • Impact Mapping
    • Scrum
  3. Seminar 2 SWS on Wednesday 17th Feb, 09:50-11:25 / 11:30-13:05
    • Introducing Product Vision
    • Impact Mapping
  4. Lecture 2 SWS on Tuesday 23rd Feb, 11:30-13:05
    • Scrum
    • User Stories
  5. Lecture 2 SWS on Wednesday 24th Feb, 08:10-09:45
    • Story Mapping
    • Event Storming (Big Picture)
  6. Seminar 2 SWS on Wednesday 24th Feb, 09:50-11:25 / 11:30-13:05
    • User Stories & Story Mapping
    • Big Picture Event Storming
  7. Lecture 2 SWS on Tuesday 2nd Mar, 11:30-13:05
    • DDD Basics
    • Event Storming (Design)
  8. Lecture 2 SWS on Wednesday 3rd Mar, 08:10-09:45
    • Event Storming (Design)
    • Domain Modeling
  9. Seminar 2 SWS on Wednesday 3rd Mar, 09:50-11:25 / 11:30-13:05
    • Design Event Storming
    • Domain Modeling
  10. CUSTOMER WORKSHOP on Friday 5th Mar, 09:00-13:05 + 14:00-17:15
    • Happens together as a whole, because it will be online all groups at once, everyone can talk and participate-
    • Focus is on
      • Understanding the domain with the customer.
      • Conversations with the Customer about the User Stories.
      • Scope Negotiations.
    • Activities:
      1. Impact Mapping
      2. Big Picture Event Storming
      3. User Story Discussion
PHASE II Setting up the Architecture, First User Stories
  1. Lecture 2 SWS on Tuesday 9th Mar, 11:30-13:05
    • Server-Side Architecture
  2. Lecture 2 SWS on Wednesday 10th Mar, 08:10-09:45
    • Server-Side Architecture
  3. Seminar 2 SWS on Wednesday 10th Mar, 09:50-11:25 / 11:30-13:05
    • Implementation Kick-Off
  4. Lecture 2 SWS on Tuesday 16th Mar, 11:30-13:05
    • DDD Tactical Design: General, Entities
  5. Lecture 2 SWS on Wednesday 17th Mar, 08:10-09:45
    • DDD Tactical Design: Value Objects, Domain Services
  6. Seminar 2 SWS on Wednesday 17th Mar, 09:50-11:25 / 11:30-13:05
    • DevOps (Sergii Maidanov)
  7. Lecture 2 SWS on Tuesday 23rd Mar, 11:30-13:05
    • DDD Tactical Design: Domain Events, Aggregates
  8. Lecture 2 SWS on Wednesday 24th Mar, 08:10-09:45
    • DDD Tactical Design: Aggregates, Factories, Repositories
  9. Seminar 2 SWS on Wednesday 24th Mar, 09:50-11:25 / 11:30-13:05
    • DDD Tactical Design Code Demonstration
  10. Lecture 2 SWS on Tuesday 30th Mar, 11:30-13:05
    • Testing
  11. Lecture 2 SWS on Wednesday 31st Mar, 08:10-09:45
    • Unit Testing
    • Test-Driven Development
  12. Seminar 2 SWS on Wednesday 31st Mar, 09:50-11:25 / 11:30-13:05
    • Test-Driven Development Demonstration
PHASE III Implementing Core Features with TDD
  1. Lecture 2 SWS on Tuesday 6th Apr, 11:30-13:05
    • Coupling, Cohesion and SOLID Principles
    • Refactoring
  2. Lecture 2 SWS on Wednesday 7th Apr, 08:10-09:45
    • Refactoring
  3. Seminar 2 SWS on Wednesday 7th Apr, 09:50-11:25 / 11:30-13:05
    • Security: Server Side (Armin Simma)
  4. Lecture 2 SWS on Tuesday 13th Apr, 11:30-13:05
    • Patterns: Introduction, Observer, Strategy
  5. Lecture 2 SWS on Wednesday 14th Apr, 08:10-09:45
    • Patterns: State, Composite, Visitor
  6. Seminar 2 SWS on Wednesday 14th Apr, 09:50-11:25 / 11:30-13:05
    • Implementing Patterns
  7. Lecture 2 SWS on Tuesday 20th Apr, 11:30-13:05
    • Patterns: Factories (Static, Method, Abstract), Bridge
  8. Lecture 2 SWS on Wednesday 21st Apr, 08:10-09:45
    • Patterns: Decorator, Adapter, Proxy
  9. Seminar 2 SWS on Wednesday 21st Apr, 09:50-11:25 / 11:30-13:05
    • Implementing Patterns
  10. Lecture 2 SWS on Tuesday 27th Apr, 11:30-13:05
    • Client-Side Architecture
  11. Lecture 2 SWS on Wednesday 28th Apr, 08:10-09:45
    • Client-Side Architecture
  12. Seminar 2 SWS on Wednesday 28th Apr, 09:50-11:25 / 11:30-13:05
    • New Requirements Kick-Off
PHASE IV New Requirements with SPA
  1. Lecture 2 SWS on Tuesday 4th May, 11:30-13:05
    • Systemanalysis
    • Context Diagrams
  2. Lecture 2 SWS on Wednesday 5th May, 08:10-09:45
    • Use Cases
  3. Seminar 2 SWS on Wednesday 5th May, 09:50-11:25 / 11:30-13:05
    • Use Case Modeling
  4. Lecture 2 SWS on Tuesday 11th May, 11:30-13:05
    • Domain Modeling Revisited
  5. Lecture 2 SWS on Wednesday 12th May, 08:10-09:45
    • State Machine Diagram
  6. Seminar 2 SWS on Wednesday 12th May, 09:50-11:25 / 11:30-13:05
    • State Machine Modeling
  7. Lecture 2 SWS on Tuesday 18th May, 11:30-13:05
    • Sequence Diagram
    • Contracts
    • SSDs
  8. Lecture 2 SWS on Wednesday 19th May, 08:10-09:45
    • Activity Diagram
  9. Seminar 2 SWS on Wednesday 19th May, 09:50-11:25 / 11:30-13:05
    • Activity Diagram Modeling
  10. Lecture 2 SWS on Tuesday 25th May, 11:30-13:05
    • Project Estimation
  11. Seminar 2 SWS on Wednesday 26th May, 09:50-11:25 / 11:30-13:05
    • Wrap up Seminar
Customer Presentation
  1. CUSTOMER WORKSHOP on Friday 4th Jun, 09:00-13:05 + 14:00-17:15

Oral exams around Tuesday 15th June


Assessment

80% group project mark + 20% individual oral exam (both need to be positive to pass the course)

  • Group project mark is given to the whole group (except in special circumstances).
  • Individual oral exam is a 15 minute discussion with the examiner on the content of the lecture in relation to the project.¸

Reading List / Main References

  • Essential Scrum (Rubin)
  • Large Scale Scrum (Larman et al)
  • Impact Mapping (Adzic)
  • Event Storming (Brandolini)
  • User Story Mapping (Patton)
  • Specification by Example (Adzic)
  • Domain-Driven Design (Evans)
  • DDD Distilled (Vernon)
  • Implementing DDD (Vernon)
  • Applying Domain-Driven Design and Patterns (Nilsson)
  • Applying UML and Patterns (Larman)
  • Patterns of Enterprise Application Architecture (Fowler)
  • UML Distilled (Fowler)
  • Softwaretechnik (Grechenig)
  • Software Engineering (Sommerville)
  • Patterns (GoF)