Softwaretechnik 1 (ST1)

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

ST1 - Aktuelles

Der nächste ST1-Workshop ist am Mo 16.11.2020 von 10:00 bis 16:00. Wir beantworten Fragen zum Stoff und machen Übungen für die im Meilenstein M1 relevanten Aufgaben.

Am Nachmittag wird M1 veröffentlicht, und und Sie können damit dann im Workshop schon mal anfangen (und den Betreuern dazu Fragen stellen). Zu diesen Themen wird es jeweils eine Aufgabe in M1 geben:

  • Use-Case-Diagramme erstellen 
  • Use-Case-Szenarien dazu schreiben
  • Fachliches Glossar aufstellen
  • Daraus das fachliche Datenmodell machen
  • Dann beides per CRUD-Matrix abgleichen

ST1 wird voraussichtlich vollständig remote stattfinden. Wenn nicht ausdrücklich anders genannt, dann treten Sie bitte folgendem Zoom-Link bei: https://th-koeln.zoom.us/my/stefanbente?pwd=K3hQOXRFa0YzUmZYSVRIejlZRklKdz09 (Meeting-ID 442 508 8059, Passcode 420)


Inhalte dieser Seite

Format der Veranstaltung

Mit diesem Wintersemester wird sich das Format von ST1 ändern. An die Stelle einer regelmäßigen Vorlesung werden 6 ganztägige Workshops treten (Termine siehe Tabelle unten. 

  • Inhalte werden vorab als Videos zur Verfügung gestellt. Dafür gibt`s einen eigenen Youtube-Kanal.
  • Außerdem bekommen Sie die Inhalte als PDF-Script, das dieselben Inhalte wie die Videos hat, aber mit mehr Text.
  • An den Workshoptagen werde ich dann mit Ihnen Übungen zu den Vorlesungsinhalten machen. Sie bearbeiten die Inhalte in Kleingruppen über Discord. Dabei können Sie ausführlich Fragen stellen. 

ILIAS-Kurs

Die Inhalte und weiterführende Inhalte zur ST1-Veranstaltung im WS 20/21 finden Sie auf dieser Seite. Melden Sie sich aber trotz bitte unbedingt im ILIAS-Kurs an: https://ilias.th-koeln.de/ilias.php?ref_id=1349272&cmdClass=ilrepositorygui&cmdNode=w4&baseClass=ilrepositorygui. ILIAS nutze ich für wichtige Kommunikation an Sie. 

Youtube-Kanal 

Bis jetzt habe ich meine Videos auf einem Vimeo-Kanal gehostet. Da ich aber annehme, dass Sie eher in Youtube unterwegs sind, und da der Youtube-Player besser auf schwankende Bandbreite reagiert, werde ich es in diesem Semester mal mit Youtube versuchen. Wenn die Nachteile überwiegen, gehe ich zurück zu Vimeo. Die Videos für ST1 müssen noch produziert werden. Das mache ich während des Semesters nach und nach. 

Den Youtube-Kanal finden Sie hier: https://www.youtube.com/channel/UC29euiLjp5m-hPoU3QP3nGA/

Script zur Veranstaltung

Zustätzlich zu den Videos wird es ausführliche Folien zu den Inhalten geben, die laufend aktualisiert werden (im Zug der Videoerstellung). Das Script finden Sie auf ILIAS immer unter diesem Link:

https://ilias.th-koeln.de/goto.php?target=file_1695656_download&client_id=ILIAS_FH_Koeln

Ergänzende Inhalte als Gitbook: Git-Tutorial, DevEnv, Einführung Java

Ergänzende Inhalte (Git-Tutorial, DevEnv, Einführung Java), die Sie für Meilenstein M0 (und die danach natürlich auch) brauchen, finden Sie hier: http://staff.pages.st.archi-lab.io/st1/learning-material/

Discord-Server

Treten Sie am besten unserem Discord-Server bei (https://discord.gg/v9NPqJMg - gilt für Mo 02.11.). Dort können Sie Fragen und Anmerkungen zu Vorlesungsinhalten und Praktikum diskutieren. Es gibt eine Kategorie "Softwaretechnik I" mit einigen Channeln. 

Ziel der Veranstaltung

In der Veranstaltung ST1 lernen Sie, eine gegebene fachliche Domäne in ihren strukturellen und Verhaltens-Eigenschaften zu analysieren und diese dann in Code umzusetzen. Im Praktikum machen Sie das ganz praktisch, auch durch das Schreiben von Code. 

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

abgeleitet aus den fachlichen Anforderungen nach dem Ansatz des Domain-Driven Design das Domänenmodell für ein Softwaresystem erarbeiten und dieses Modell in Sourcecode implementieren, 

indem ich
  • in der Domain Exploration Anwendungsfälle (Use Cases) aus der Aufgabenstellung ableite und Geschäftsobjekte im Fachlichen Datenmodell als Klassendiagramm modelliere, 
  • im Structural Domain Modelling aus dem Fachlichen ein Logisches Datenmodell erarbeite, 
  • dieses dann unter Nutzung von Standards (Spring Boot, JPA) implementiere, 
  • im Dynamic Domain Modelling das Verhalten des Systems spezifizieren und in Code umsetzen,
so dass 

eine Implementierung mit passender, langlebiger, änderungsfähiger Architektur des Systems entsteht.

Zeitplan und Inhalt der Vorlesungen

Nachfolgend finden Sie die Liste der Workshops für die Veranstaltung. Zu den Workshops 2 - 6 gibt es jeweils thematischen Unterseiten, die hier verlinkt sind. 


     DatumThemaMInhalt (Details)Zur Vorbereitung:
Videos / Materialien
Live-Übungen
1

02.11.

10:00 - 16:00


0) Introduction

M0
  • Ziele der Vorlesung
  • Zusammenhang ST1, ST2 und FAE
  • Zeitplan
  • Bewertung
  • Organisation des Praktikums
  • Vorstellung Aufgabenstellung Meilenstein 0
  • Einführung Git, IDE / Dev Env
  • Zuordnung der Repos für MS0
  • Dev Env Setup

keine Übungen, aber praktische Hilfestellung beim Setup des Dev Envs:

  • Discord
  • IDE
  • Git
  • Modellierungstools
2

16.11.

10:00 - 16:00

1) Domain ExplorationM1
  • Vorstellung Aufgabenstellung Meilenstein 1
  • Beratung zur Tool-Auswahl für die UML-Modellierung
  • Übungen zu Use Cases
  • Übungen zu fachlichem Glossar und Datenmodell
  • Übungen zum Abgleich der beiden
  1. Identifikation und Abgrenzung von Use Cases (Textanalyse, User Happiness Test, Coffee Break Test)
  2. Wie drückt man die Beziehung zwischen zwei Use Cases am besten aus?

  3. Szenarien im Template erfassen
  4. Erstellung eines fachlichen Glossars aus einem gegebenen Anforderungstext
  5. Erstellung des fachlichen Datenmodells aus dem Glossar
  6. Abgleich Fachliches DM - Use Cases via CRUD-Matrix
3

14.12.

10:00 - 16:00

2a) Structural Domain Modelling:

Logical Data Model

M2
  • Vorstellung Aufgabenstellung Meilenstein 2
  • Übungen zum Logischen Datenmodell
  • Fragen zu DDD
  • Taktische vs. strategische Architektur
  • Basic Building Blocks: Entities, Value Objects, Repository
  • Unterscheidung Entity - Value Object
  • Was ist Software-Architektur?
  • 2.1 Vom Fachlichen zum Logischen Datenmodell
  • 2.2 Bereinigung des Datenmodells
  • 2.3 Stamm-, Änderungs- Bestands-, Bewegungsdaten
  • 2.4 Einführung in Domain-Driven Design (DDD)
  • 2.5 Komplexität in Iterationen verstehen
  • 2.6 Ubiquitous Language
  • 2.7 Tactical vs. Strategic Design
  • 2.8 DDD Basic Building Blocks - Entity, Value Object, Repository
  1. Identifikation von Stamm-, Änderungs- Bestands-, Bewegungsdaten
  2. Bereinigung eines vorgegebenen Fachlichen Datenmodells
  3. Unterschied Entity - Value Object
4

21.12.

10:00 - 16:00

2b) Structural Domain Modelling:

DDD Implementation via JPA


  • Grundlegende Einführung zu Spring
  • Recap: Git und IDEs installiert?
  • Grundprinzipien von Spring: Dependency Injection und andere elementare Patterns
  • Praktische Einführung in Spring
  • ORM-Mapping mit Spring
  • Durchgehen von praktischen Programmieraufgaben
  • 2.9 Object-Relational Mapping (ORM)
  • 2.10 ORM durch Annotation - Java Persistence API (JPA)
  • 2.11 AOP und Dependency Injection
  • 2.12 Attribute und Value Objects
  • 2.13 Assoziationen im Domain Layer

Programmieraufgaben verschiedener Art:

  1. Entity und Repo
  2. Umsetzung Value Object
  3. 1:1 - Assoziation
  4. 1:n - Assoziation
  5. n:m - Assoziation
5

11.01.

10:00 - 16:00

3) Dynamic Domain ModellingM3
  • Fragen zu verschiedenen Verhaltens-Sichten
  • Übungen zur Erstellung der Diagramme
  • Umsetzung in Code
  • 3.1 Verschiedene Sichten auf Software
  • 3.2 Aktivitätsdiagramme zur Abbildung von Geschäftsprozessen
  • 3.3 Verwendung von Swimlanes in Aktivitätsdiagrammen
  • 3.4 Zustandsmodellierung
  • 3.5 Sequenzdiagramme
  • 3.6 Kommunikationsdiagramm und Abgrenzung zum Sequenzdiagramm
  1. Erstellung Aktivitätsdiagramm
  2. Erstellung Zustandsdiagramm
  3. Umsetzung in Code
  4. Erstellung Sequenzdiagramm
  5. Erstellung von Kommunikationsdiagramm
6

08.02.

10:00 - 16:00

Fragen, Wiederholung und Klausur-vorbereitung
  • Offene Punkte werden vorher als Umfrage abgefragt
  • Dann gezielt Beantwortung von Fragen
  • Übungen zu den genannten offenen Punkten


Tools

Sie brauchen für die Veranstaltung (insbesondere für das Praktikum) zwei Arten von Tools. 

UML Modelling

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:

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

Praktikum

Das Praktikum besteht aus vier Meilensteinen (M0 - M3). Es deckt die wesentlichen Teile des Vorlesungsstoffes ab, indem es Aufgaben mit einem konzeptionellen Lernanteil in einer praktischen Implementierung verlangt. Die Meilensteine decken jeweils die folgenden Vorlesungsteile ab. In der Tabelle sind auch die Ausgabe- und Abgabetermine angezeigt. 

MeilensteinVorlesungsteilAusgabeAbgabe
M0(Wiederholung und Auffrischung der Inhalte aus AP2, um sicherzustellen, dass die nachfolgenden Programmieraufgaben bewältigt werden können)02.11.15.11.
M1Domain Exploration16.11.13.12.
M2Structural Domain Modelling14.12.10.01.
M3Dynamic Domain Modelling11.01.08.02.

Anmeldung

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

  1. Sagen Sie Jann Intveen Bescheid, dass Sie noch einen Gitlab-Account und ein Repo brauchen
  2. Melden Sie sich einmalig unter https://git.st.archi-lab.io/ mit ihrer CampusID an

Die Deadline hierzu ist Freitag, der 06.11.2020 um 19:00 Uhr.

Betreuungsteam

  • Jann Intveen (jann.intveen@th-koeln.de)
    • 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.
  • Stefan Bente (stefan.bente@th-koeln.de
    • 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/sprechstunde

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. Wer eine Frage zum Praktikum hat und den Discord-Server nicht nutzen möchte, kann auch Jann Intveen direkt ansprechen. 

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 ist bestanden, wenn die automatisierten Tests alle bestanden wurden
  5. Sind bis zur Deadline nicht alle Tests erfolgreich, so gilt der Meilenstein (und somit das Praktikum) als nicht bestanden.
  6. Wer über Discord oder auf anderem Wege ganze Lösungen teilt, begeht einen Täuschungsversuch und wird aus dem Praktikum ausgeschlossen
  7. 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.

Individualisierung

Außer in Meilenstein 0 sind alle Meilensteine (M1 - M3) für Sie persönlich individualisiert. Lösungen können also nicht einfach zwischen den Aufgabenstellungen ausgetauscht werden.

Wie funktioniert die Praktikumsbearbeitung und Abgabe?

Lösen der Aufgabe

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.

Testseite

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:

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

Meilenstein 0

Das eigene Repository mit den Übungsaufgaben ist unter folgendem Link zu finden: https://git.st.archi-lab.io/students/st1/meilenstein-0

Da wir in ST1 auch die praktische Umsetzung des Domain Models in Sourcecode betrachten wollen, brauchen Sie für das Praktikum Java-Kenntnisse auf dem Niveau von AP2 (Algorithmen und Programmierung 2, siehe Modulbeschreibung in HOPS). Daher machen wir in Meilenstein eine Auffrischung dieses Stoffes. Damit ist sichergestellt, dass Sie das nötige Grundverständnis für die Programmieresprache Java und die damit verbundenen Werkzeuge haben.

Dazu erhält jede/r Student*in Zugriff auf ein Repository mit kleinen Übungsaufgaben, die die notwendigen Konzepte zur Programmierung mit Java näherbringen sollen. Dies beinhaltet folgende Aufgabenbereiche:

  • Variablen
  • Bedingungen
  • Schleifen
  • Methoden
  • Klasse
  • Arrays
  • Listen

Zwar ist es gewünscht, dass sich Studierende über Probleme austauschen. Sie sollten aber die Übungsaufgaben nutzen, um sich auf folgende Meilensteine vorzubereiten. Infolgedessen sollten Übungsaufgaben weitestgehend alleine gelöst werden. 

Die meisten Aufgaben beinhalten leere Methodenrümpfe, welche nur noch gefüllt werden müssen. (Die Methoden sind deklariert, aber noch nicht definiert). Nur in den Aufgabenbereichen Methoden und Klassen müssen Methoden nach Vorgaben deklariert oder Klassen angelegt werden. Nachdem nun also Aufgaben gelöst wurden, müssen die Änderungen nun committet und der neue Stand gepusht werden.