Softwaretechnik 2 (ST2)

ST2 ist eine Veranstaltung im 4. Semester des Informatik Bachelor. Diese Seite (mit den entsprechenden Unterseiten) wird fortlaufend aktualisiert. Es wäre also sinnvoll, wenn Sie die Seite bookmarken

ST2 - Aktuelles

M2 kann bis Di Abend (01.06.) bearbeitet werden.

Mi 02.06. (14:00 - 19:00 Uhr) - Workshop zu den Themen von M3 (Aggregates, REST)

Am Mi 02.06. ist von 14:00 - 19:00 Uhr außer der Reihe ein ST2-Workshop zu den Themen von M3, also

  • Konzept der Aggregates
  • Regeln und Praxistipps für REST-APIs

(Ich muss hier von dem üblichen Mo-Rhythmus wegen zwei Wochen Code & Context Blockkurs abweichen.)

Inhalte dieser Seite

Ziel der Veranstaltung

Die Veranstaltung ST2 versucht Sie mit grundlegenden Überlegungen beim Design und der Implementierung von komplexen Softwaresystemen vertraut zu machen. Im Praktikum wird dabei 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 ichein Softwaresystem für eine gegebene Aufgabenstellung iterativ konzipieren und mit gängigen Tools implementieren,
indem ich
  1. 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,
  2. ein Rich Domain Model nach dem Ansatz des Domain-Driven-Design (DDD) in Building Blocks konzipiere und mit Hilfe von Spring JPA umsetze, 
  3. meine Domäne(n) in Aggregates strukturiere
  4. 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
so dass ich

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

Organisation der Veranstaltung

Wie Sie dem Stundenplan entnehmen können, liegt die ST2-Vorlesung auf dem Montagmorgen, gefolgt vom ST2-Praktikum während des Rests des Montags. Diese Vorgabe werde ich nicht wörtlich umsetzen, sondern in der folgenden Form:

  • Klassische Vorlesungen wird es nicht geben. Stattdessen stelle ich den Vorlesungsstoff in eigens produzierten Videos und als begleitendes Script zur Verfügung. 
  • Die im Stundenplan vorgesehenen Zeitschlitze werde ich in Form von ganztägigen Workshops nutzen. "Ganztägig" bedeutet hier im Allgemeinen 10:00 - 16:00 mit einer Mittagspause. Nicht jeder Montag ist belegt, siehe Zeitplan unten. 
  • An diesen Workshoptagen werde ich in der Regel zum aktuellen Stoff / Praktikums-Meilenstein eine oder mehrere Übungen mit Ihnen machen. Sie bearbeiten die Übungen allein oder in selbstorganisierten Gruppen. Meine Mitarbeiter und ich stehen als Ansprechpartner zur Verfügung. Abschließend besprechen wir die Lösungen. 

Team

Das ist das Beratungsteam für ST2:

  • Ansprechpartner für Feedback zur Veranstaltung, weitergehende Fragen / Anregungen / Wünsche, Rückfragen zu Vorlesungsinhalten
  • Erreichbar am besten Discord, wenn es um Fragen von allgemeinem Interesse geht
    • bei persönlichen Anliegen am besten per Email (antwortet in der Regel innerhalb eines Tages, sonst bitte nochmal nachfragen)
  • für weitergehende Anliegen am besten eine Sprechstunde buchen: https://calendly.com/bente/termine (aber bitte probieren Sie erstmal, ob es auch via Discord oder Mail zu klären ist)
  • Primärer Ansprechpartner für die inhaltlichen Fragen im Praktikum 
  • erreichbar am besten über den Discord, ersatzweise per Email
  • Sie dürfen gerne außerhalb "üblicher" Zeiten Fragen stellen, eine Antwort dauert dann unter Umständen nur etwas länger.
  • Ansprechpartner für technische Problem mit Gitlab oder der sonstigen Infrastruktur, sowie in Fragen der Programmierung
  • erreichbar am besten über den Discord-Server, ersatzweise per Email
  • Sie dürfen gerne außerhalb "üblicher" Zeiten Fragen stellen, eine Antwort dauert dann unter Umständen nur etwas länger.
  • Unterstützt zu "Stoßzeiten" 

Beratung vorzugsweise via Discord

Als sehr effektive Plattform zur Beratung und Diskussion hat sich bei uns Discord herausgestellt. Sie können daher dem ArchiLab-Discord-Server beitreten: https://discord.gg/YYNYb5whU8. Wählen Sie dann "ST2" als Rolle, und Sie sehen die Channels für diese Veranstaltung. 

Wer Discord nicht nutzen will, kann das ST2-Team auch direkt per Mail kontaktieren. 

Für die Workshops nutzen wir immer denselben Zoom-Link: 

Videos und Script

Die Videos zur Vorlesung finden Sie auf dem ArchiLab-Youtube-Kanal: https://www.youtube.com/channel/UC29euiLjp5m-hPoU3QP3nGA/Die Videos für ST2 werden zu Beginn der Veranstaltung nicht fertig produziert sein. Das ergänze ich während des Semesters nach und nach. Bitte haben Sie Nachsicht, wenn es mal einen Tag länger dauert, bis das Video verfügbar ist. Die Erfahrung zeigt, dass das leider ein sehr aufwändiger Prozess ist. 

Das Skripte zum Inhalt der Videos (also zum Veranstaltungsstoff) finden Sie (fortlaufend ergänzt) auf ILIAS: https://ilias.th-koeln.de/goto.php?target=file_1854728_download&client_id=ILIAS_FH_Koeln

Zeitplan und Inhalt

     DatumThemaMInhalt (Details)Bitte vorab diese Videos anschauenLive-Übungen
1Mo, 12.04., 10:00 - 11:30

0) Einführung, Orga, Praktikum

M0
  • Ziele der Veranstaltung
  • Zeitplan
  • Bewertung
  • Organisation des Praktikums
  • Vorstellung M0

2Mo 26.04. 10:00 - 16:001) Prinzipien, Patterns, Architekturstile
M1
  • Abgrenzung Prinzipien / Patterns / Architekturstile
  • Einführung SOLID
  • Clean Code Attitudes & Rules
  • Refactoring eines wirklich schlechten Codes tinymce.emotions_dlg.smile
3Mo 03.05. 10:00 - 16:00

(Weiterführung des Themas vom vorigen Montag)
  • Refactoring schlechten Codes am praktischen Beispiel
4Mo 17.05. 10:00 - 16:002) Rich Domain ModelM2
  • TDD und systematisches Testen
  • Architekturstile
  • Vorstellung Meilenstein 2: Rich Domain Model
  • Anwenden von TDD
  • Übungen zu Domain Primitives (Design von dedizierten Value Objects) mit Tests
5

Mi 02.06. 14:00 - 19:00

Verlegt auf Mi wegen Kollision mit Code & Context am Montag

3) Aggregates als REST Level 2 API


M3
  • Was sind Aggregates?
  • Motivation, Definition und Checkliste
  • Regeln für Aggregates
  • Abbildung mit Spring JPA
  • Entities vs. Value Objekts für innere Klassen
  • Eigenschaften von Interfaces
  • REST-Prinzipien
  • REST Maturity Levels 0 - 2
  • Guter Stil bei REST
  • Die Rolle von IDs in Entities
  • Was sind Aggregates
  • Regeln für Aggregates
  • Aggregates mit Spring JPA
  • Welche Interface-Typen sind gebräuchlich
  • HTTP-Grundlagen und -Tools
  • Prinzipien von REST
  • REST Level 3 (REST und Hypermedia)
  • Regeln und Standards für REST
  • Returncodes in REST APIs
  • Identifikation von Aggregates
  • Design eines REST-Interfaces
6Mo 21.06. 10:00 - 16:00

4) REST-APIs mit Spring implementieren

M4
  • Postman als Testing-/Dev-Tool
  • Umsetzung in Spring Web MVC
  • DDD-Schichtenarchitektur und alternative Schichtenmodelle
  • Rich vs. Anemic Domain Model
  • Coding REST - GET all
  • Coding REST - GET one, DELETE, PUT, POST
  • ApplicationServices und DTOs
  • Coding REST-Operationen auf Assoziationen
  • Value Objects in 1-n-Beziehung
  • Dokumentation von REST APIs
  • Vom CRUD-basierten zum State-basierten REST-API
  • Beispiele für Architekturstil
  • Implementierungsübung
7Mo 05.07. 10:00 - 16:00

  • Fragen zur REST-Implementierung


8Mo 12.07. 10:00 - 16:005) Architektur großer Systeme: Strategisches DDD
  • Strategische DDD-Architektur (Bounded Context, Context Map)
  • Architekturstile für große IT-Landschaften: 
    • Microservices
    • Service-Orientierte Architektur (SOA
    • Vergleich
  • Eventing
  • Vertiefung und Fragen
  • Ausblick auf Klausur(en)
  • Architekturansätze für die gesamte IT-Landschaft
  • Microservices als Architecture for Agility
  • Bounded Contexts und Context Map
  • Context Map erstellen
  • Integration Patterns bestimmen


Praktikum

Das Praktikum besteht aus fünf Meilensteinen (M0 - M4). Es deckt die wesentlichen Teile des Vorlesungsstoffes ab, indem es Aufgaben mit einem konzeptionellen Lernanteil in einer praktischen Implementierung verlangt. 

MeilensteinVorlesungsteilAusgabeAbgabe
M00) Initiale Programmieraufgabe als Basis für die nachfolgenden Meilensteine12.04.23.04.
M11) Prinzipien, Patterns, Architekturstile - Refactoring der M0-Aufgabe unter Anwendung von SOLID und Clean Code26.04.16.05.
M22) Rich Domain Model - Erweiterung der erstellten Software auf ein RDM17.05.01.06.
M33) Aggregates als REST Level 2 API  - Identifikation von Aggregates und Design eines REST-APIs02.06.18.06.
M44) REST-APIs mit Spring implementieren - Exposen der Aggregates als REST-APIs mittels Spring Web MVC21.06.09.07.

Anmeldung

Um im Sommersemester 2021 am ST2-Praktikum teilzunehmen, sind zwei Schritte erforderlich:

  1. Melden Sie sich in dem ST2-ILIAS-Kurs an
  2. Melden Sie sich einmalig unter https://git.st.archi-lab.io/ mit ihrer CampusID an

Die Deadline hierzu ist Freitag, der 09.04.2021 um 16:00 Uhr.

Organisation des Praktikums

  • Es wird keine von uns verwaltete Praktikumsgruppen mehr geben. Jede*r Teilnehmer*in liefert eine individuelle Lösung ab. Sie sind aber herzlich eingeladen, sich selber in Lerngruppen zu organisieren.
  • Die Abnahme erfolgt durch "git push" auf unseren Gitlab Server.
  • Feste Praktikumstermine wird es ebenfalls nicht mehr geben. In den ST-Workshoptagen machen wir Übungen zu dem Stoff der Vorlesung. In der verbleibenden Zeit können Sie schon einmal anfangen, am Praktikum zu arbeiten. Das Betreuerteam ist dann verfügbar, um Fragen zu beantworten. 
  • Für den Austausch untereinander sowie Fragen an die Betreuer wurde ein Discord-Server erstellt (siehe oben). Der Beitritt ist freiwillig, allerdings (als einfachste Lösung) zu empfehlen. 

Regeln

  1. Das bestandene Praktikum ist Voraussetzung für die Teilnahme an der Klausur
  2. Das Praktikum wird nicht benotet. Man kann auch keine Bonuspunkte erwerben.
  3. Das Praktikum ist bestanden, wenn alle Meilensteine erfolgreich bestanden wurden
  4. Ein Meilenstein kann aus automatisierten und aus manuell bewerteten Aufgaben bestehen. Für beides finden Sie das Feedback in Ihrer personalisierten Feedback-Seite (siehe unten).
  5. Ein Meilenstein ist bestanden, wenn alle Aufgaben bestanden sind (also alle automatisierten und alle manuell kontrollierten). 
  6. Sind bis zur Deadline nicht alle Tests erfolgreich, so gilt der Meilenstein (und somit das Praktikum) als nicht bestanden.
  7. Wer über Discord oder auf anderem Wege ganze Lösungen teilt, begeht einen Täuschungsversuch und wird aus dem Praktikum ausgeschlossen
  8. Sich gegenseitig zu helfen ist aber ausdrücklich erwünscht! Nutzen Sie Discord (den #praktikum Channel), um über Probleme zu diskutieren. Sie sollen einfach nur nicht Ihre eigenen Lösungen dort posten.

Geänderte Regelung für E2/E3 (SOLID- und Clean-Code-Konformität)

Bei der Bearbeitung des Praktikums haben wir festgestellt, dass ca. 1/4 bis 1/3 der Lösungen einen recht souveränen Umgang mit gutem Code-Stil zeigen. Bei dem Rest sind aber teilweise deutliche Defizite zu erkennen. Deshalb machen wir mit sofortiger Wirkung folgende Änderungen im Praktikumsablauf: 

  1. Für das Bestehen von Meilenstein 1 (M1) ist nur noch "E1 grün" notwendig.
  2. Die Aufgaben E2 und E3 bleiben aber erhalten - Sie haben dafür bis Ende des Praktikums Zeit. Wer des jetzt (in M1) schon fertig hat, braucht an der Stelle nichts mehr zu tun. Alle anderen müssen irgendwann bis Ende des Praktikums die Konformität mit SOLID und Clean Code nachweisen. 
  3. Denjenigen, die E2/E3 noch nicht haben, legen wir die intensive Nutzung von Peer Reviews nahe. Wir unterstützen Sie dabei, einen Peer-Review-Partner zu finden. 
  4. Mit den Peer Reviews bereiten Sie die E2/E3-Abnahme vor. Statt einer Begutachtung vereinbaren Sie einen Abnahmetermin mit den ST2-Mitarbeitern. Es gibt nur einen Abnahmetermin (plus ein Nachholversuch). Sie haben also den Anreiz, Ihren Code in Peer Reviews sorgfältig auf die Abnahme vorzubereiten. 
  5. Sie können ab sofort also aufhören, um ein Nachsehen von E2/E3 zu bitten. Prüfen Sie stattdessen, ob Sie reif für die Abnahme sind, und vereinbaren Sie dann einen Termin. Details, wie man das macht, folgen. 

Wie funktioniert die Praktikumsbearbeitung und Abgabe?

Alle Meilensteine sind für Sie persönlich individualisiert. Lösungen können also nicht einfach zwischen den Aufgabenstellungen ausgetauscht werden. 

Um die Aufgaben erfolgreich bearbeiten zu können, muss sich der Student sein eigenes Repository lokal clonen (mit Git). Achtung: Um die Funktionalität des Projekts zu gewährleisten, sollen Studenten nichts, was außerhalb des Ordners "src/main" liegt, verändern.

Hier finden Sie noch zusätzliche Infos: 

Persönliche Feedbackseite

Für jede/n Student*in wird eine persönliche Testseite generiert. Diese listet sämtliche Tests des Übungsprojektes auf und wird bei jeder Codeänderung aktualisiert (dauert teils mehrere Minuten). Erst wenn alle Tests auf der Testseite grün markiert sind, gilt der Meilenstein als bestanden. Anhand der Testseite ist erkennbar, wer die einzelnen Meilensteine besteht und wer nicht. Der Link zur Testseite hängt von dem jeweiligen Repository-Namen ab. Hier eine schrittweise Anleitung, wie man zur jeweiligen eigenen Testseite kommt.

  • (1) Als erstes ist es wichtig, die UUID des Projekts herauszufinden. Dazu schauen wir uns den Namen des Projekts an und kopieren die UUID aus dem Ende des Namens. Im folgenden Screenshot ist die UUID rot markiert:

Tools

SSH

Wer im Gitlab kein Passwort hinterlassen möchte, um auf das remote Repository zu pushen kann sich auch einen ssh key generieren und diesen in gitlab eintragen. Eine Anleitung hierzu findet man hier: https://docs.gitlab.com/ee/ssh/. Da sich durch Nutzung von SSH unter anderem das Protokoll ändert, muss man beim Clonen eines Repositories den Link anpassen. Normalerweise würde man ein Repository mit folgendem Befehl klonen:

git clone https://git.st.archi-lab.io/students/st1/meilenstein-0/basics_group_<uuid>

Durch Nutzung von SSH würde sich dieser Befehl zu folgendem ändern:

git clone ssh://git@git.st.archi-lab.io:22996/students/st1/meilenstein-0/basics_group_<uuid>.git

Java Development

Für die Java-Entwicklung brauchen Sie zwei Arten von Tools: 

  • Git: am besten die Git Bash
  • IDE: hier bieten sich zwei Optionen an: 
    • IntelliJ Ultimate (frei für Studierende)
    • Visual Studio Code

UML Modelling

UML-Modelle sind kein Schwerpunkt in ST2 (eher in ST1). Es kann aber vorkommen, dass auf Modelle Bezug genommen wird oder eine Modellierung im Praktikum verlangt wird.

Es gibt eine große Menge von dedizierten UML-Modellierungstools und sonstigen Zeichenwerkzeugen, die auch UML können. Keines dieser Tools (jedenfalls keins der freien Tools) finde ich so gut, dass ich eine klare Empfehlung aussprechen möchte. Mit einigen habe ich selbst gearbeitet, und diese drei sind zumindest empfehlenswert: