Einheit 01: Komplexität
Last updated
Last updated
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
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. -
Wenn Sie heute eine Single Page Application bestellen, kann es schnell passieren, dass Sie so etwas erhalten:
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.
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
Komplexe Systeme entstehen durch die Zusammenarbeit vieler Beteiligter, den Einsatz unterschiedlicher Technoligien über einen längeren Zeitraum.
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
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
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
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
Bei den Videos ist es erlaub "out-of-the-box" zu denken. Hier einige sehr gut gelungene Beispiele aus vorherigen Kursen:
[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