Die Studierenden erlernen das produktive und selbständige Mitarbeiten in großen Software-Projekten. Dies umfasst sowohl das Zerlegen anfallender Aufgaben als auch die Bestimmung und Bewertung geeigneter Architekturen. Dabei werden sie befähigt, die nötigen Schritte im Kontext einer gestellten Aufgabe selbständig zu erfassen, zu strukturieren und mittels des Einsatzes geeigneter Werkzeuge und Methoden formal zu beschreiben.
In diesem Kontext erlangen die Studierenden auch die Fähigkeit, Ziele und Probleme verteilter Software-Systeme zu erkennen und einzuordnen. Sie können die allgemeinen Konzepte für Architekturen, Prozesse, Kommunikation, Benennung, Koordination, Replikation, Fehlertoleranz und Sicherheit erklären und sie zur Konstruktion verteilter Software Dienste und Anwendungen anwenden.
Die Lehrveranstaltung „Software-Engineering“ baut auf den praktischen Erfahrungen der Studierenden aus ihrer Praxistätigkeit auf und vermittelt Techniken sowie Methoden für die strukturierte Entwicklung von groß angelegten Softwaresystemen. Zu Beginn der Veranstaltung werden elementare Konzepte wie Objekt, Klasse, Assoziation, Methode, Vererbung und Polymorphie wiederholt und gefestigt, um ein gemeinsames Verständnis der Grundlagen sicherzustellen. Anschließend liegt der Fokus auf den Herausforderungen moderner Softwareentwicklungsprozesse und deren strukturierter Bewältigung.
Die Studierenden lernen, wie agile Methoden wie Scrum mit etablierten Prozessmodellen, beispielsweise dem Unified Software Development Process, kombiniert werden können, um anspruchsvolle Entwicklungsprojekte erfolgreich umzusetzen. Dabei wird UML als zentrale Beschreibungssprache eingeführt, um Entwicklungsentscheidungen zu dokumentieren und klar zu kommunizieren. Ein besonderer Schwerpunkt liegt darauf, die Komplexität großer Softwareprojekte zu verstehen und durch die Anwendung strukturierter Methoden und Prozesse zu bewältigen.
Im Rahmen der Veranstaltung erwerben die Studierenden die Fähigkeit, selbstständig in agilen Umfeldern zu agieren, fundierte Entwicklungsentscheidungen zu treffen und diese methodisch zu dokumentieren. Die theoretischen Inhalte werden durch praxisorientierte Beispiele ergänzt, die den Transfer der vermittelten Methoden in reale Anwendungsfälle erleichtern.
Im zugehörigen Labor wenden die Studierenden das erlernte Wissen an wechselnden Beispielprojekten an, indem sie die erste Iteration eines Softwareentwicklungsprozesses durchführen. Dabei üben sie sowohl die Arbeit im Team als auch die Nutzung agiler Methoden und die professionelle Dokumentation mithilfe von UML.
Seminaristischer Unterricht; Übungsblätter
Im Software-Engineering Labor durchlaufen die Studierenden einen vollständigen iterativen Softwareentwicklungsprozess in einem Team. Sie beginnen mit der Anforderungsanalyse, entwickeln darauf basierend ein Analyse- und Designmodell und setzen dieses schließlich in Java um. Dabei setzen sie sich aktiv mit Konzepten wie use-case-driven Entwicklung, Architekturorientierung, iterativen und inkrementellen Vorgehensweisen sowie komponentenbasierter Softwareentwicklung auseinander.
Anhand eines konkreten Beispielprojekts erleben die Studierenden die praktische Anwendung dieser Methoden und erlernen, wie sie eigenständig Entwurfsentscheidungen treffen und diese im Einklang mit vorgegebenen Anforderungen umsetzen können. Das Labor legt besonderen Wert auf die Förderung von Teamarbeit und Selbstständigkeit, sodass die Teilnehmenden befähigt werden, effektiv in einem agilen Entwicklungsteam mitzuwirken und die Herausforderungen komplexer Softwareentwicklungsprojekte zu meistern.
Betreutes Labor, Gruppenarbeit
Die Vorlesung vermittelt sowohl grundlegende als auch erweiterte Prinzipien verteilter Systeme und veranschaulichen diese in praktischer Form anhand konkreter Paradigmen und Technologien. Das Spektrum behandelter Prinzipien umfasst grundlegende Aspekte der Zielsetzungen und Klassen verteilter Systeme sowie deren Architekturen, Prozesse, Kommunikation und Namenssysteme. Erweiterte Prinzipien beinhalten Koordination, Konsistenz und Replikation, Fehlertoleranz sowie Sicherheit. Die behandelten Prinzipien werden anhand verschiedener Paradigmen exemplarisch vertieft. Dabei werden beispielhafte Umsetzungen einzelner Prinzipien vorgestellt. Zudem erfolgt eine Einführung in die Entwicklung entsprechender Systeme anhand konkreter Technologien.
Nach Abschluss der Vorlesung werden die Studierenden ein umfassendes Verständnis der Prinzipien verteilter Systeme erlangen, die von ihren grundlegenden Zielen und Architekturen bis zu fortgeschrittenen Konzepten wie Koordination, Konsistenz, Replikation, Fehlertoleranz und Sicherheit reichen. Sie erhalten Einblicke in die praktische Anwendung dieser Prinzipien durch die Untersuchung spezifischer Paradigmen und Technologien und verbessern so ihre Fähigkeit, verteilte Systeme zu analysieren und zu entwerfen. Darüber hinaus wird die Einführung in die Entwicklung dieser Systeme unter Verwendung konkreter Softwaretechnologien die Studierenden mit den praktischen Fähigkeiten ausstatten, die für die Implementierung robuster, effizienter und sicherer verteilter Systeme in verschiedenen Computerumgebungen erforderlich sind.
Eigenständige Arbeitsanteile betreffen Vor- und Nacharbeit der Vorlesungsinhalte, Laborarbeit und Klausurvorbereitung.
Das Labor vermittelt praktische Einblicke in die Funktionsweise und Konstruktion verteilter Informationssysteme. Dabei werden aktuelle Paradigmen aufgegriffen und fundamentale Prinzipien im Kontext exemplarischer Realisierungen untersucht. Die Aufgabenstellungen orientieren sich an den Inhalten der Vorlesung, greift aber auch aktuelle Themenstellungen industrieller Forschung und Entwicklung auf. Die praktische Umsetzung erfolgt unter Verwendung moderner industrierelevanter Plattformen und Frameworks.
Es werden Grundkenntnisse in den Bereichen Programmierung, Betriebssysteme und Datenbanken vorausgesetzt. Die Veranstaltung beinhaltet 50 % betreute Präsenszeit (1 SWS) im LKIT Labor sowie 50% selbständige Arbeit. Der Leistungsnachweis erfolgt durch Präsentation und Verteidigung der Lösung.