Einheit 01: Komplexität
Lernziele dieser Einheit
Den Unterschied zwischen kompliziert und komplex kennen lernen
Verstehen, was ein System ausmacht und welche unterschiedlichen Arten von Systemen es gibt
Sie verstehen welche Ursachen es für organisatorische als auch technische Komplexität geben kann
Sie lernen kennen welche Maßnahmen es gibt, um diesen Arten von Komplexität entgegen zu wirken
Was ist ein komplexes System?
Komplexe Systeme enthalten eine Vielzahl von Komponenten, die zusammenwirken und damit eine Funktionseinheit bilden. Dabei selbstorganisiert sich die »emergente« Funktion des Systems ohne jede übergeordnete Kontrollinstanz. - Forschungsperspektiven der Max-Planck-Gesellschaft, 2010, S. 56ff.
Ein komplexes System trägt die Anlage zur chaotischen Entartung in sich. - Unbekannt
Komplexe Systeme sind Systeme, welche sich der Vereinfachung verwehren und vielschichtig bleiben. -
Ein Beispiel
Wenn Sie heute eine Single Page Application bestellen, kann es schnell passieren, dass Sie so etwas erhalten:
Definitorisches
Software Engineering
Bekannt aus Grundlagen Software Engineering 1 + 2 Sommerville [1], Balzert [2,3]
komplexer
Unterschied zwischen komplex und kompliziert?
Systeme
Ein System ist eine Gesamtheit von Komponenten, die so aufeinander bezogen oder miteinander verbunden sind und in einer Weise interagieren, dass sie als eine aufgaben-, sinn-, oder zweckgebundene Einheit angesehen werden können.
Einfach vs. kompliziert vs. komplex
Definitorisches - Software Engineering
Software Engineering ist eine empirische Disziplin
Beruht auf Beobachtungen und Erfahrungen
Weiterentwicklung des Software Engineering
Ist durch die Praxis getrieben
Achtung!
Es gibt in den meisten Fällen kein »Richtig« oder »Falsch«.
Was in dem eine Projekt oder Team funktioniert, kann in einem anderen Projekt oder einem anderen Team Probleme verursachen
Wahl der Methode, Architektur, Projektmanagement
Immer abhängig vom Kontext
Wie entstehen komplexe Systeme?
Komplexe Systeme entstehen durch die Zusammenarbeit vieler Beteiligter, den Einsatz unterschiedlicher Technoligien über einen längeren Zeitraum.
Merkmale organisatorischer Komplexität
Anzahl Team Mitglieder
Beziehungen zwischen Teammitgliedern
Anzahl der Teams
Interne vs. externe Teammitglieder
Geographische Verteilung der Teammitglieder
Interkulturelle Unterschiede
Reputation des Projekts in der Organisation
Anzahl Zulieferer und externer Firmen
Kundenprojekt vs. Standard Software
Beziehung zum Kunden
Anzahl der Stakeholder
Beziehung zu anderen Projekten
Merkmale technischer Komplexität
Art, Anzahl und Eindeutigkeit der Anforderungen
Anzahl Komponenten und Schnittstellen
Benutzer Interface
Menge und Art der Daten
Code Basis (Lines of Code)
Brownfield vs. Greenfield Projekt
Legacy Code
Bekannte vs. neue Technologien
Anzahl Programmiersprachen
Verteilte Systeme
Parallelität im Code
Security
Anmerkung zu organisatorischen Systemen
In organisatorischen Systemen existieren offizielle Beziehungen
Projektmanager gibt Inhalte dem Team vor
Teamleiter ist disziplinarisch Vorgesetzter
Entwicklungsleiter ist fachlicher Entscheidungsträger
Projektleiter gibt Termine vor
Entwickler entscheiden über Code
Und es gibt inoffizielle Beziehungen
Teamleiter ist mit einem Teammitglied im gleichen Fußballverein
Entwicklungsleiter „kann nicht“ mit Entwickler A
Entwickler B ist bester Freund von Entwickler C
Externer Berater ist Bruder des Schwagers von Entwickler D
Wie also Komplexität in den Griff bekommen?
Organisatorische Komplexität reduzieren
Projektmanagement
Vorgehensmodelle
Schätzen und Schätztechniken
Anforderungsanalyse
Technische Komplexität reduzieren
Software Architekturen
Code Metriken
Testen
Test Driven Development
Clean Code
Aufgabe
Bilden Sie eine Gruppe, in der für das Semester zusammenarbeiten.
Wählen Sie ein Software-System aus, das Sie den Anfordeurngen an ein komplexes System entspricht, und dass Sie als Gruppe gerne besser kennen lernen möchten.
Über dieses System werden Sie das Referat halten. Dies kann ein Betriebssystem (z.B. Windows, Ubuntu etc.), eine Programmiersprache (Rust, Elixis, .ET etc.), eine Software (OneDrive, Mastodon etc.) oder ein System (Quantencomputer, 3D-Drucker etc.) sein.
Diskutieren Sie im Team und finden Sie einen Konsens.
Schreiben Sie einige Sätze zudem System und beschreiben sie kurz, weshalb es sich um ein komplexes System handelt.
Beispielvideos
Bei den Videos ist es erlaub "out-of-the-box" zu denken. Hier einige sehr gut gelungene Beispiele aus vorherigen Kursen:
Referenzen
[1] I. Sommerville, Software Engineering, Pearson, 2018
[2] I. Sommerville, Modernes Software-Engineering: Entwurf und Entwicklung von Softwareprodukten, Pearson, 2020
[3] H. Balzert, Lehrbuch der Softwaretechnik: Entwurf, Implementierung, Installation und Betrieb, Spektrum Akademischer Verlag, 2011
Last updated