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
Klausur ST1
Die nächste Klausur findet am 3.3.21 um 11:00 als virtuelle (digitale) Klausur statt. Stellen Sie also bitte sicher, dass Sie für die Teilnahme über eine stabile Internetverbindung verfügen. Weitere Randbedingungen haben wir hier zusammengefasst: ST1: FAQs zur Klausur am 03.03.2021
Die nächste Veranstaltung ST1
Die Veranstaltung findet das nächste Mal im WS 2021/22 statt.
Format der Veranstaltung
ST1 findet in diesem Semester vollständig remote statt. 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).
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 |
|
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.
Datum | Thema | M | Inhalt (Details) | Zur Vorbereitung: Videos / Materialien | Live-Übungen | |
---|---|---|---|---|---|---|
1 | 02.11. 10:00 - 16:00 | 0) Introduction | M0 |
| keine Übungen, aber praktische Hilfestellung beim Setup des Dev Envs:
| |
2 | 16.11. 10:00 - 16:00 | 1) Domain Exploration | M1 |
|
|
|
3 | 14.12. 10:00 - 16:00 |
| ||||
4 | 21.12. 10:00 - 16:00 | 2a) Structural Domain Modelling: Logical Data Model | M2 |
|
| Übung für den Workshop hier: Übung Transformation zum logischen Datenmodell
|
5 | 04.01. ab 10:00 | Offenes Frage- und Beratungstreffen | Keine Übungen; zunächst Treffen im Zoom, um allgemeine Fragen klären, dann individuelle Beratung im Discord | |||
6 | 11.01. 10:00 - 16:00 | 2b) Structural Domain Modelling: DDD Implementation via JPA |
| Hier findet sich die Übung für heute: Workshop 11.1.21: Übung M2 (Beziehungen)
| ||
7 | 18.01. ab 10:00 | Offenes Frage- und Beratungstreffen | Keine Übungen; zunächst Treffen im Zoom, um allgemeine Fragen klären, dann individuelle Beratung im Discord | |||
8 | 25.01. 10:00 - 16:00 | 3) Dynamic Domain Modelling Aktivitäts-diagramme | M3 |
|
Übung steht hier: ST1 - Workshop M3: Aktivitätsdiagramme (25.01.21) | |
9 | 01.02. ab 10:00 | 3) Dynamic Domain Modelling Statusdiagramme |
|
|
| |
10 | 08.02. 10:00 - 16:00 | Fragen, Wiederholung und Klausur-vorbereitung | Stoff der gesamten Veranstaltung |
|
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:
- Modelio, https://www.modelio.org/
- UMLet, https://www.umlet.com/
- diagrams.net (früher draw.io), https://www.diagrams.net/
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.
Meilenstein | Vorlesungsteil | Ausgabe | Abgabe |
---|---|---|---|
M0 | (Wiederholung und Auffrischung der Inhalte aus AP2, um sicherzustellen, dass die nachfolgenden Programmieraufgaben bewältigt werden können) | 02.11. | 15.11. |
M1 | Domain Exploration | 16.11. | 18.12. |
M2 | Structural Domain Modelling | 21.12. | 15.01. (für E3: 22.01.) |
M3 | Dynamic Domain Modelling | 25.01. | 12.02. (für E1: 03.02.) |
Anmeldung
Um im Sommersemester 2020 am ST2-Praktikum teilzunehmen, sind zwei Schritte erforderlich:
- Sagen Sie Jann Intveen Bescheid, dass Sie noch einen Gitlab-Account und ein Repo brauchen
- 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
- Fabian Krampe (fabian.krampe@th-koeln.de)
- Primärer Ansprechpartner für die inhaltlichen Fragen im Praktikum
- 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.
- 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.
- Philipp Schmeier (philipp.schmeier@th-koeln.de)
- Unterstützt zu "Stoßzeiten"
- 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
- Das bestandene Praktikum ist Voraussetzung für die Teilnahme an der Klausur
- Das Praktikum wird nicht benotet. Man kann auch keine Bonuspunkte erwerben.
- Das Praktikum ist bestanden, wenn alle Meilensteine erfolgreich bestanden wurden
- Ein Meilenstein ist bestanden, wenn die automatisierten Tests alle bestanden wurden
- Sind bis zur Deadline nicht alle Tests erfolgreich, so gilt der Meilenstein (und somit das Praktikum) als nicht bestanden.
- Wer über Discord oder auf anderem Wege ganze Lösungen teilt, begeht einen Täuschungsversuch und wird aus dem Praktikum ausgeschlossen.
- 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.
Unterstützende Links
- Informationen zu zur Benutzung von Git oder zur Java Programmierung: http://staff.pages.st.archi-lab.io/st1/learning-material/
- Zusätzliches Video zur Erklärung, wie man Git benutzt, und was man fürs Praktikum beachten muss: Einführung in Git und DevEnv
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:
- (2) Diese UUID setzen wir nun an das Ende von folgendem Link:
http://students.pages.st.archi-lab.io/st1/meilenstein-0/tests/basics_tests_group_<uuid> (TODO check Link-Syntax)
Bei unserem Beispiel würde der Link dann wie folgt aussehen:
http://students.pages.st.archi-lab.io/st1/meilenstein-0/tests/basics_tests_group_482de55b-e650-4b77-b47d-85c48d9201ff - (3) Auf der Testseite sind nun alle relevanten Tests aufgeführt. Grüne Tests sind bestanden und rote nicht bestanden. Auf rote Tests kann geklickt werden, um Informationen bezüglich des Fehlschlagens eines Tests zu erhalten:
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.