Kontakt
stefan.bente[at]th-koeln.de
+49 2261 8196 6367
Discord Server
Prof. Bente Personal Zoom
Adresse
Steinmüllerallee 4
51643 Gummersbach
Gebäude LC4
Raum 1708 (Wegbeschreibung)
Sprechstunde nach Vereinbarung
Terminanfrage: calendly.com Wenn Sie dieses Tool nicht nutzen wollen, schicken Sie eine Mail und ich weise Ihnen einen Termin zu.

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 zeitliche Organisation der Veranstaltung
28.03.2022 - 04.07.2022. Organisiert als 5 Ganztages-Workshops (Montags 10:00 - 17:00). Genaue Daten und Inhalte stehen weiter unten.
Ort der Veranstaltung
Die Veranstaltung findet in einem Hybrid-Format statt. Bitte schauen Sie bei dem jeweiligen Zeitschlitz oder Workshoptag nach (siehe unten auf dieser Seite), ob dieser online oder in Präsenz stattfindet. Falls auf dieser Seite keine Angaben sind, prüfen Sie bitte die sonstige Kommunikation (z.B. Discord).
Raum: 0502 (Gebäude LC6, gegenüber dem Haupteingang der Schwalbe-Arena), siehe auch detaillierte Wegbeschreibung
Videokonferenz-Link: https://th-koeln.zoom.us/j/88910722611?pwd=cXd0RzZMTzBrR0xZRU9hRnp5MVdQQT09 (nur in Ausnahmefällen und wenn explizit vorher für den Tag kommuniziert)
ILIAS/ILU-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 werden Sie Mitglied in dieser ILIAS/ILU-Gruppe . (liegt in diesem ILIAS/ILU-Kurs). Die Deadline ist 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.archi-lab.io/. Bitte loggen Sie sich unbedingt vorab einmal mit Ihrer campusId dort ein. Sonst kann das Repo Ihnen nicht automatisch zugewiesen werden. (Achtung, wir sind auf einen neuen Gitlab-Server umgezogen. Wenn Sie die Veranstaltung vor einiger Zeit absolviert haben, müssen Sie sich erneut einloggen.)
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 beitreten unter https://discord.gg/YYNYb5whU8. Navigieren Sie zum Channel #rollenzuweisung und klicken Sie auf st2. Die entsprechenden Kanäle zur Veranstaltung werden anschließend für Sie freigeschaltet.
Youtube-Kanal
Für diese Veranstaltung sind Lehrvideos auf Youtube verfügbar. Abonnieren Sie dafür am besten den Kanal ArchiLab. Für die Videos zu dieser Veranstaltung gibt es eine Playlist. (Disclaimer - die Videos auf diesem Kanal sind nicht monetarisiert. Weder ich persönlich noch das Labor ArchiLab verdienen damit Geld. Wir nutzen YouTube vor allem deshalb, weil es für Studierende ein leicht zugänglicher Kanal ist. Außerdem bekommen wir als Labor an der TH Köln so auch Sichtbarkeit nach außen, was z.B. bei dem Einwerben von externen Gastvorträgen hilft.)
Script
Für diese Veranstaltung ist ein Script verfügbar (in den Videos verwendete Folien als PDF, mit abschnittsweisen Links auf das entsprechende Video).

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 ...

  • passende Prinzipien, Patterns und Architekturstile für mein IT-System auswähle, wie etwa die SOLID-Prinzipien und die Regeln des Clean Code, und dann eine gängige Schichtenarchitektur auswähle,
  • ein Rich Domain Model nach dem Ansatz des Domain-Driven-Design (DDD) in Building Blocks konzipiere und mit Hilfe von Spring JPA umsetze,
  • meine Domäne(n) in Aggregates strukturiere,
  • diese Aggregates als REST Level 2 API für die Kommunikation mit Umsystemen und Clients verfügbar mache, und dies mit Spring Web MVC umsetze,

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 am 13.7.22 um 14:00.

Auf vielfachen Wunsch haben wir den Ort der Klausur geändert. Statt im PC-Pool der Hochschule (oder in einem Hörsaal, mit eigenem Laptop) zu schreiben, wird die Klausur von zu Hause aus geschrieben. Wie gewohnt erhalten Sie für die Klausur ein individualisiertes Repo, das nur Sie selbst und wir sehen können. Vorher müssen wir Ihre Identität sicherstellen. Im Hörsaal wäre das einfach - Kontrolle von MultiCa und Personalausweis, plus Sichtkontrolle, ob Sie es selbst sind.

Aufgrund der Remote-Situation werden wir das so machen: Sie benötigen ein Endgerät mit Webcam, mit dem Sie sich in eine Zoom-Session einwählen können. Wir werden den regulären ST2-Zoomlink dafür verwenden. Dann halten Sie (ganz ähnlich wie bei der Video-ID für eine Konto-Eröffnung) Ihre MultiCa und Ihren Personalausweis neben Ihr Gesicht in die Kamera. Wir kontrollieren dann Ihre Identität. Danach können Sie den Zoom-Call verlassen. Sie können die Klausur auf einem anderen Endgerät schreiben (z.B. Ihrem Desktop-PC). Ab 13:30 am Mi nächster Woche können Sie sich unter https://th-koeln.zoom.us/j/88910722611?pwd=cXd0RzZMTzBrR0xZRU9hRnp5MVdQQT09 einwählen. Sie gehen dann in Breakout-Rooms gemäß des Anfangsbuchstabens Ihres Nachnamens. Dort müssen Sie dann die Kamera anschalten und wir kontrollieren Ihren Ausweis (MultiCa + Personalausweis). Um 14:00 geht dann die Klausur los.

WICHTIG: Damit wir rechtlich auf der sicheren Seite sind, müssen Sie und bitte bestätigen, dass Sie das verstanden haben und umsetzen können. Bitte bestätigen Sie uns in dieser Umfrage (nur 1 Klick): https://ilias.th-koeln.de/ilias.php?ref_id=2279394&cmd=infoScreen&cmdClass=ilobjsurveygui&cmdNode=qc&baseClass=ilObjSurveyGUI

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.

Ort des Workshops

Videokonferenz-Link: https://th-koeln.zoom.us/j/88910722611?pwd=cXd0RzZMTzBrR0xZRU9hRnp5MVdQQT09 .

Ziel des Tages

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

Schauen Sie bitte vorab 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.

Ort des Workshops

Videokonferenz-Link: https://th-koeln.zoom.us/j/88910722611?pwd=cXd0RzZMTzBrR0xZRU9hRnp5MVdQQT09 .

Ziel des Tages

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

Schauen Sie bitte vorab 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.

Ort des Workshops

Videokonferenz-Link: https://th-koeln.zoom.us/j/88910722611?pwd=cXd0RzZMTzBrR0xZRU9hRnp5MVdQQT09 .

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 vorab 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.

Ort des Workshops

Raum: 0502 (Gebäude LC6, gegenüber dem Haupteingang der Schwalbe-Arena), siehe auch detaillierte Wegbeschreibung.

Ziel des Tages

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

Schauen Sie bitte vorab nachfolgende Videos

Agenda

  • 10:00 - 10:15:  Orga und Fragen
    • Allgemeine Fragen und Rückschau auf M2
  • 10:15 - 11:15:  Aggregate-Grenzen Übung: Aggregates bestimmen (am Beispiel eines Campus-Management-Systems CAMS)
    • In dieser Übung geht es darum, Aggregates zu identifizieren. Dazu nutzen Sie die aus Videos bekannte Checkliste.
    • Gehen Sie in Kleingruppen irgendwohin, wo Sie Ruhe haben (im Raum oder in angrenzenden Räumen, es sollte genug frei sein)
    • Diskutieren Sie die Aufgabe miteinander
    • anschließend treffen wir uns wieder hier und vergleichen die Ergebnisse
  • 11:15 - 12:30:  Aggregate-Grenzen Übung: Aggregates bestimmen (am Beispiel der Firma MadMaxRacing)
    • In dieser Übung geht es darum, Aggregates zu identifizieren. Dazu nutzen Sie die aus Videos bekannte Checkliste.
    • Wie oben, gehen Sie in Kleingruppen irgendwohin, wo Sie Ruhe haben. Diskutieren Sie die Aufgabe miteinander.
    • Anschließend treffen wir uns wieder hier und vergleichen die Ergebnisse.
  • 12:30 - 13:30:  Mittagspause
  • 13:30 - 14:30:  REST-API Übung: REST-API spezifizieren (am Beispiel MadMax Racing)
    • In dieser Übung geht es darum, für die in einer vorangegangenen Übung gefundenen Aggregates jeweils ein REST-API zu spezifizieren.
    • Gehen Sie in Kleingruppen irgendwohin, wo Sie Ruhe haben
    • Diskutieren Sie die Aufgabe miteinander
    • anschließend treffen wir uns wieder hier und vergleichen die Ergebnisse
  • 14:30 - 16:00:  Arbeit am Meilenstein
    • Schauen Sie sich den aktuellen Meilenstein M3 an
    • Diskutieren Sie die möglichen Lösungen
    • Die ST2-Betreuer sind vor Ort, Sie können Fragen zur Aufgabenstellung stellen

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.

Ort des Workshops

Videokonferenz-Link: https://th-koeln.zoom.us/j/88910722611?pwd=cXd0RzZMTzBrR0xZRU9hRnp5MVdQQT09 .

Ziel des Tages

Sie wissen, wie Sie REST APIs mit Spring Boot implementieren

Schauen Sie bitte vorab nachfolgende Videos

Agenda

  • 10:00 - 17:00: Übung: REST-API für das "Internship Management System" implementieren
    • In dieser Übung geht es darum, ein REST-API mit Hilfe von Spring Boot umzusetzen.
    • Wir treffen uns im Zoom, und ich stelle die Aufgabe kurz vor.
    • Gehen Sie dann in die Breakout Rooms, diskutieren Sie die Aufgabe miteinander und schreiben Sie Code
    • Für jeden Zwischenschritt treffen wir uns wieder im Hauptraum.

Aufgabe bis zum nächsten Workshop

Nach dem Workshop bearbeiten Sie bitte Meilenstein M4.

  • In dieser Übung geht es darum, ein REST-API mit Hilfe von Spring Boot umzusetzen.

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

Ort des Workshops

Raum: 0502 (Gebäude LC6, gegenüber dem Haupteingang der Schwalbe-Arena), siehe auch detaillierte Wegbeschreibung.

Agenda

  • 10:00 - 11:00:
    • Sie können zunächst alle Fragen zum Stoff und zur Klausur loswerden, die Sie noch haben.
    • Danach machen wir dann die große "Wiederholungs-Übung".
  • 11:00 - 17:00: Übung: Wiederholung ST2
    • Diese Übung enthält in einem kompakten Beispiel den gesamten Stoff von ST2.
    • In der verwendeten Übung gibt es eine kleine durchgehende Coding-Aufgabe, an der Sie alle Themen der Veranstaltung üben können. Dafür gibt es ein Übungs-Repo mit dem Ausgangs-Code.
    • Die Übung ist in 6 Teilaufgaben gegliedert. Für jeden der 6 Teilschritte gibt es ein Repo mit einer Beispiel-Lösung. Wahrscheinlich werden wir heute nicht komplett damit fertig. Ich gebe dann die verbleibenden Repos in den nächsten Tagen vor der Klausur Stück für Stück frei, so dass Sie dann die restlichen Teile noch selbst machen können und im Discord weiter Fragen stellen können.
    • In der Klausur wird es, anders als in dieser Übung, KEINE DURCHGEHENDE Aufgabe geben, sondern jeweils neue kleinere Teilaufgaben. Außerdem ist die Übung deutlich umfangreicher als die Klausur - klar.
    • Die Art der Aufgaben in der Übung ist aber nahe an der Klausur. An den nachfolgenden Stellen verlangt die Übung etwas, was wir in der Klausur NICHT machen werden.
    • (E5), Schritt 5 - da wir uns in der Veranstaltung nicht systematisch mit Unittests beschäftigt haben, werden Sie in der Klausur keine Tests neu schreiben (oder sehr stark abändern) müssen.
    • (E6), Schritt 3 - auch diese Aufgabe (Schreiben von REST-Tests) kommt nicht in der Klausur vor.

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) überprüft.

  • Ausgabe: Mon 28.03.2022, 18:00
  • Abgabe bis spätestens: Fri 08.04.2022, 18:00

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) überprüft, teils gibt es manuelles Feedback. Manuelles Feedback geben wir frühestens dann, wenn die automatisch überprü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.

  • Ausgabe: Mon 11.04.2022, 18:00
  • Abgabe bis spätestens: Fri 29.04.2022, 18:00

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) überprüft, teils gibt es manuelles Feedback. Manuelles Feedback geben wir frühestens dann, wenn die automatisch überprü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.

  • Ausgabe: Mon 02.05.2022, 18:00
  • Abgabe bis spätestens: Fri 20.05.2022, 18:00

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) überprüft.

  • Ausgabe: Mon 23.05.2022, 18:00
  • Abgabe bis spätestens: Fri 10.06.2022, 18:00

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) überprüft.

  • Ausgabe: Mon 13.06.2022, 18:00
  • Abgabe bis spätestens: Fri 01.07.2022, 18:00

Zugehörige Videos