Softwaretechnik 2 (ST2), SS22

Die Veranstaltung ST2 versucht Sie mit grundlegenden Überlegungen beim Design und der Implementierung von komplexen Softwaresystemen vertraut zu machen. Ein besonderer Fokus liegt dabei auf den Konzepten des Domain-Driven Designs (DDD) und deren beispielhafter Umsetzung im Backend mittels Spring Boot.

Studiengang und Modulbeschreibung
Informatik Bachelor (siehe auch Modulbeschreibung auf der Studiengangs-Seite)
Zeitraum und Art der Veranstaltung
Als semesterbegleitende Workshops, 28.03.2022 - 04.07.2022
Format
Hybrid (https://th-koeln.zoom.us/j/88910722611?pwd=cXd0RzZMTzBrR0xZRU9hRnp5MVdQQT09)
ILIAS-Kurs zur Veranstaltung
https://ilias.th-koeln.de/ilias.php?ref_id=1471469&cmdClass=ilrepositorygui&cmdNode=wc&baseClass=ilrepositorygui
Praktikum
Das Praktikum wird über eine Folge von personalisierten und individuell für Sie generierten Git-Repos durchgeführt. Für jeden Meilenstein erhalten Sie ein neues Repo von uns. Jede:r Teilnehmer:in muss eine eigenständige Bearbeitung der Praktikumsaufgabe durchführen. Wir ermutigen Sie ausdrücklich, Ihre Lösungen in Arbeitsgruppen zu diskutieren. Ein einfaches Copy-Paste von Lösungen (unter Anpassung der Personalisierung) werten wir aber als Täuschungsversuch. Studierende, bei denen wir dieses sehen (und wir haben automatisierte Möglichkeiten, dies zu sehen) werden ohne Vorwarnung vom Praktikum ausgeschlossen. Das gilt sowohl für die Person, die kopiert hat, wie auch für die-/denjenigen, die/der die Lösung zur Verfügung gestellt hat.
Anmeldung zum Praktikum
Bitte treten Sie dieser ILIAS-Gruppe (in dem o.g. ILIAS-Kurs) bei. Die Anmeldung ist möglich bis zum 01.04.2022. Bitte denken Sie daran, dass Sie sich zusätzlich noch über PSSO zur Prüfung anmelden müssen. Die Anmeldefristen dafür finden Sie auf den F10-Informationsseiten der TH Köln.
Git-Repo für das Praktikum
https://git.st.archi-lab.io/ . Bitte loggen Sie sich unbedingt vorab einmal mit Ihrer campusId dort ein. Sonst kann das Repo Ihnen nicht automatisch zugewiesen werden.
Discord-Server für schnelle Kommunikation
Discord hat sich als sehr effektive Plattform für den Informationsaustausch, Diskussionen und Fragen an Lehrende/Betreuer:innen erwiesen. Deshalb sollten Sie dem ArchiLab-Discord-Server unter https://discord.gg/YYNYb5whU8 beitreten. Navigieren Sie zum Channel #rollenzuweisung und klicken Sie auf st2. Dann sieht man die entsprechenden Kanäle für diese Veranstaltung.
Youtube-Kanal
Für diese Veranstaltung sind Lehrvideos auf Youtube verfügbar. Abonnieren Sie dafür am besten den Kanal ArchiLab. Die gesamten Inhalte dieser Veranstaltung sind in einer Playlist zusammengefasst.
Script
Für diese Veranstaltung ist ein Script verfügbar (in den Videos verwendete Folien als PDF, mit abschnittsweisen Links auf das entsprechende Video).
1

Inhalt

Learning Outcome

Im ST2-Praktikum wird großer Wert darauf gelegt, das theoretische Wissen auch praktisch umzusetzen. Folgendes Learning Outcome liegt der Veranstaltung zugrunde - das sollten Sie am Ende können, wenn Sie für sich das Beste aus der Veranstaltung herausholen.

Als SW-Entwickler:in oder SW-Architekt:in kann ich ein Softwaresystem für eine gegebene Aufgabenstellung iterativ konzipieren und mit gängigen Tools implementieren,

indem ich ...

damit ich eine nachhaltig wartbare Software mit passender, langlebige und änderungsfähiger Architektur erstellt habe.

Bewertung

Die Bewertung von ST2 erfolgt über die ST2-Klausur.

Workshops

Mon 28.03.2022, 10:00 - 12:00: ST2-Kickoff

Ich stelle Ihnen den Inhalt von ST2 vor und des Praktikums vor. Darüber hinaus wird der erste Meilenstein M0 vorgestellt.

Ziel des Tages

Sie kennen die Rahmenbedingungen für ST2 und können mit dem ersten Meilenstein beginnen.

Schauen Sie bitte nachfolgende Videos

Agenda

  • 10:00 - 12:00:  Organisatorisches
    • Zeitplan
    • Inhalt der Meilensteine
    • Youtube-Channel
    • Discord als präferiertes Kommunikationsforum
    • Klausur
    • Inhalt von M0

Aufgabe bis zum nächsten Workshop

Nach dem Workshop bearbeiten Sie bitte Meilenstein M0 .

Mon 11.04.2022, 10:00 - 17:00: Clean Code & SOLID

In diesem Workshop geht es darum, die Clean Code & SOLID Prinzipien anzuwenden und Verstöße zu erkennen, sowie diese zu beheben. Dazu nutzen Sie die aus Videos bekannte Vorgehensweise.

Ziel des Tages

Sie können Clean Code und SOLID auf den eigenen Code anwenden.

Schauen Sie bitte nachfolgende Videos

Agenda

  • 10:00 - 10:20:  Retrospektive zu M0
  • 10:20 - 10:30:  Vorstellung von M1
  • 10:30 - 12:30:  Review und Refactoring von einfachen Projekten zum Einstieg in die Thematik
    • Alle weiteren Details zu den einzelnen Aufgaben sowie den zu reviewenden Code finden Sie in einem gesonderten Repo
  • 12:30 - 13:30:  Mittagspause
  • 13:30 - 17:00:  Review und Refactoring einer Auswahl Ihrer eigenen Projekte

Aufgabe bis zum nächsten Workshop

Nach dem Workshop bearbeiten Sie bitte Meilenstein M1 .

Mon 02.05.2022, 10:00 - 17:00: Packages, Schichtenarchitektur und Domain Primitives

Es gibt verschiedene Mittel, um seinen Code so aufzubauen, dass er gut wartbar und leicht verständlich ist. Dazu gehört eine sinnvoll gewählte Package-Struktur, Schichtenarchitektur und Domain Primitives. Letzere (auch "Rich Domain Model" genannt) sind domänenspezifische Basisklassen mit Funktionalität und Validierung. Wir refactorn Beispielcode, um passende Domain Primitives zu definieren.

Ziel des Tages

Sie wissen, wie sinnvoll gewählte Packages, Schichten und Domain Primitives in Ihrem Code aussehen, und können das in Ihrem eigenen Code nutzen.

Schauen Sie bitte nachfolgende Videos

Agenda

  • 10:00 - 10:50:  Retrospektive M1
    • M1 ist der vermutlich umfangreichste und auch vielleicht anspruchsvollste Meilenstein in ST2. Ich würde gern mit Ihnen eine kurze Zwischen-Retrospektive machen.
    • Wir nutzen dieses EasyRetro-Board für die Retro
  • 11:00 - 12:30:  Schichtenarchitektur und Package-Struktur in der Praxis
    • Ich gebe Ihnen einen Inhaltsimpuls zu dem Thema (da gibt es leider noch kein Video zu). Dies ist Motivation dazu, wo eigentlich die Schichtenarchitektur herkommt. Was gehört in welche Schicht? Worauf sollte man achten? Wie sieht eine sinnvolle Packagestruktur für Ihr Praktikumsbeispiel aus?
    • Hier sind die Folien zu dem Impuls.
    • Das ist der Mitschnitt davon, Passwort rW7y=CP?
    • Danach gehen Sie in Untergruppen oder Einzelarbeit und überarbeiten Ihre M1-Lösung (die ja die Basis für M2 darstellen wird).
  • 12:30 - 13:30:  Mittagspause
  • 13:30 - 15:00:  Häufige DDD-Anti-Patterns bei Spring JPA
    • Wir haben eine Seite mit gängigen Anti-Patterns und Fehlern zusammgestellt. Wir gehen die mal zusammen durch (ich zeichne das als Video auf) und diskutieren das.
    • Danach nehmen Sie sich in Kleingruppen oder alleine Zeit, um Ihren eigenen Code bezüglich dieser Anti-Patterns zu durchforsten.
    • Hier ist der Mitschnitt (Passwort rW7y=CP?)
  • 15:00 - 17:00:  Domain Primitives & Vorschau auf M2
    • Schauen Sie sich das Video zu Domain Primitives an, wenn noch nicht geschehen.
    • Gehen Sie in Kleingruppen und diskutieren, welche Domain Primitives in der Praktikums-Aufgabenstellung existieren könnten.
    • Das tragen wir dann im Plenum zusammen.
    • Anschließend stelle ich Ihnen M2 als Vorschau vor. Dort geben wir Ihnen die Domain Primitives vor, diese werden automatisch getestet. Vergleichen Sie "Ihre" mit "unseren" Domain Primitives :-).
  • 17:00 - 17:30:  OPTIONAL - Good Practices for Git in Teams
    • Auf Anfrage eines Studierenden mache ich eine kurze Demo, wie man Git in einem kleinen Team nutzen kann
    • Das ist optional - für ST2 selbst brauchen Sie das nicht (da arbeiten Sie ja allein an Ihrem Repo), aber natürlich später in der Berufspraxis, vermutlich aber auch im DB2-Projekt, oder in Informatik-Projekten.
    • Hier ist eine wirklich gute und leicht verständliche Skizze, wie man mit Features Branches arbeiten kann (aus einem Blog-Post von Tapas Das).
    • Auch das kann ich aufnehmen und dann zur Verfügung stellen.

Aufgabe bis zum nächsten Workshop

Nach dem Workshop bearbeiten Sie bitte Meilenstein M2 .

Mon 23.05.2022, 10:00 - 17:00: Aggregates als REST Level 2 API

Wir beschäftigen uns mit der Frage, was Aggregates sind - Motivation, Definition und Checkliste. In der Folge werden Aggregates genutzt, um REST APIs zu definieren.

Ziel des Tages

Sie wissen, wie Sie Aggregates nutzen, um REST APIs zu definieren

Schauen Sie bitte nachfolgende Videos

Agenda

  • 10:00 - 17:00:  (wird noch definiert)

Aufgabe bis zum nächsten Workshop

Nach dem Workshop bearbeiten Sie bitte Meilenstein M3 .

Mon 13.06.2022, 10:00 - 17:00: REST-APIs mit Spring implementieren

Welche Prinzipien sollte man bei der REST-Implementierung einhalten? Wie macht man das in einem Framework wie Spring Boot? Wir machen das anhand von Programmierübungen.

Ziel des Tages

Sie wissen, wie Sie REST APIs mit Spring Boot implementieren

Schauen Sie bitte nachfolgende Videos

Agenda

  • 10:00 - 17:00:  (wird noch definiert)

Aufgabe bis zum nächsten Workshop

Nach dem Workshop bearbeiten Sie bitte Meilenstein M4 .

Mon 04.07.2022, 10:00 - 17:00: Fragen zum Stoff und Wiederholung

In Vorbereitung auf die Klausur wiederholen wir den Stoff, der noch unklar ist

Agenda

  • 10:00 - 17:00:  (wird noch definiert)

Praktikums-Meilensteine

Das Praktikum gliedert sich in die folgenden Meilensteine. Alle Meilensteine müssen bestanden sein, um das Gesamtpraktikum zu bestehen. Die Tests eines Meilensteins müssen komplett 'grün' sein, um ihn zu bestehen. Eine Teilnahme an einem Meilenstein ist nur möglich, wenn alle vorigen Meilensteine bestanden wurden.

M0: Initiale Implementierung einer Aufgabe

In diesem Meilenstein implementieren Sie (erstmal ohne weitere Vorgaben) eine Aufgabenstellung gegen vorgegebene Unit Tests. Der Meilenstein wird komplett automatisch (per Unit-Tests) geprüft.

Zugehörige Videos

M1: Neue Anforderung(en) und Refactoring nach Clean Code / SOLID-Prinzipien

Es kommen eine oder mehrere neue Anforderungen dazu, und Sie entwickeln Ihre Lösung aus M0 weiter. Dazu beschäftigen Sie sich mit den Clean-Code-Regeln und den SOLID-Prinzipien und machen ein Refactoring Ihrer Lösung, so dass Ihr Code diesen Regeln genügt. Der Meilenstein wird teils automatisch (per Unit-Tests), teils per manuellem Feedback geprüft. Manuelles Feedback geben wir frühestens dann, wenn die automatisch geprüften Aufgaben davor alle grün sind. Bitte beachten Sie, dass wir nur ein (Zwischen-)Feedback vor der Abgabe garantieren können. Nutzen Sie also die Workshops, um Fragen zu stellen und Ihre Lösung(en) zu diskutieren.

Zugehörige Videos

M2: Domain Primitives

Sie machen ein Refactoring Ihrer Lösung, indem Sie Domain Primitives verwenden. Der Meilenstein wird teils automatisch (per Unit-Tests), teils per manuellem Feedback geprüft. Manuelles Feedback geben wir frühestens dann, wenn die automatisch geprüften Aufgaben davor alle grün sind. Bitte beachten Sie, dass wir nur ein (Zwischen-)Feedback vor der Abgabe garantieren können. Nutzen Sie also die Workshops, um Fragen zu stellen und Ihre Lösung(en) zu diskutieren.

Zugehörige Videos

M3: REST API Design

Sie identifizieren Aggregates in Ihrer Lösung und designen darauf aufbauend ein REST-API für wesentliche Funktionalitäten. Der Meilenstein wird komplett automatisch (per Unit-Tests) geprüft.

Zugehörige Videos

M4: REST-API-Implementierung

Für eine Auswahl von REST-APIs für Ihre Lösung machen Sie eine Implementierung basierend auf Spring Data JPA und Spring Web MVC. Der Meilenstein wird komplett automatisch (per Unit-Tests) geprüft.

Zugehörige Videos