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.

  1. Diskutieren Sie im Team und finden Sie einen Konsens.

  2. 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