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.
Aufbauend auf den Erfahrungen, die die Studierenden während ihrer Praxistätigkeit gesammelt haben, werden im Rahmen der Lehrveranstaltung "Softwareengineering" Techniken und Methoden zur strukturierten Softwareentwicklung im Großen erarbeitet. Neben der Wiederholung und Verfestigung bereits gelernter elementarer Begriffe wie: Objekt, Klasse, Assoziation, Methode, Vererbung oder Polymorphie, liegt der Schwerpunkt im Bereich des Softwareentwicklungsprozesses. Die Studierenden erkennen dabei, gestützt auf ihre Erfahrungen aus der Praxistätigkeit, welche Herausforderung eine moderne, agile Softwareentwicklung an einen strukturierten und organisierten Entwicklungsprozess stellt. Aufbauend auf etablierten Prozessmodellen, wie dem Unified Software Development Process (Jacobson, Booch, Rumbaugh), wird in Verbindung mit Scrum und UML als Beschreibungssprache den Studierenden ein Framework an die Hand gegeben, um diese Herausforderung zu meistern. Sie erlernen dabei selbstständig in einem agilen Umfeld zu agieren und Entwicklungsentscheidungen zu treffen und mithilfe der UML zu dokumentieren.
Im zugehörigen Labor, in dessen Verlauf die erste Iteration einer Softwareentwicklung an einem konkreten Beispielprojekt durchgeführt wird - beginnend mit dem Erfassen der Anforderung über die Erstellung eines Analyse- und Designmodells bis zur Implementierung in Java - erfahren die Studierenden nicht nur was sich hinter Begriffen wie use-case-driven, architekturorientiert, iterativ, inkrementell, komponentenbasiert verbirgt, vielmehr erleben sie es und werden damit befähigt in einem agilen Entwicklungsteam mitzuarbeiten.
Seminaristischer Unterricht; Übungsblätter
Im Rahmen des Labors wird ein kompletter iterativer Software-Entwicklungsschritt im Team durchgeführt. Beginnend mit dem Erfassen der Anforderung über die Erstellung eines Analyse- und Designmodells bis zur Implementierung in Java, erfahren die Studierenden nicht nur, was sich hinter Begriffen wie use-case-driven, architekturorientiert, iterativ, inkrementell, komponentenbasiert verbirgt, vielmehr erleben sie es an einem konkreten Beispielprojekt. Sie werden damit befähigt in einem agilen Entwicklungsteam mitzuarbeiten, selbstständig Entwurfsentscheidungen zu treffen und diese gemäß den vorhandenen Vorgaben umzusetzen.
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.