Skip to main content

Komplexität managen: Denken in Mustern

Dringender Wunsch und einhelliges Ziel aller Stakeholder im Entwicklungsprojekt sind beherrschbare, befähigte Systeme. Während ihres gesamten Lebenszyklus sollen diese Systeme flexibel anpassbar an sich verändernde Anforderungen sein und dabei transparent und nachvollziehbar für alle Stakeholder bleiben. Entwicklungszeiten sollten kalkulierbar sein, Ressourcen effizient eingesetzt werden. Im Ergebnis sollen sie sich fehlerfrei, leistungsstark und wartungsfreundlich zeigen.

Aufgrund der steigenden Komplexität der Systeme kommt die Vorstellungskraft menschlicher Gehirne an ihre Grenzen. Modelle auf der Basis von Abstraktion, Muster und Vertrag machen die Komplexität des Systems beherrschbar.

Die herkömmliche Entwicklung von Software auf Basis von Hochsprachen erreicht die Grenze ihrer Leistungsfähigkeit. Deshalb werden in diesen Entwicklungsumgebungen Redundanzen zugunsten der Verstehbarkeit in Kauf genommen. Es werden häufig grafische Repräsentanzen parallel zum Programmcode erstellt. Diese erhöhen zwar die Verstehbarkeit, müssen nun aber parallel zum Code gepflegt werden. Da der Aufwand für die Pflege dieser redundanten, nicht integrierten Repräsentanzen im Alltagsstress nicht zu leisten ist, besteht die Gefahr, dass die Aussagen der grafischen Repräsentanzen inkongruent zum Programmcode werden. Ergebnis: Die Aussagen in den redundanten Repräsentanzen veralten – und im schlimmsten Fall werden sie falsch sein. Würde auf sie als Anweisung zurückgegriffen, führte das zur Dysfunktion des Systems.

Wenn Komplexität mit einem Vorgehen nicht mehr beherrschbar ist, drückt sich das in latent steigender Dysfunktion aus, zum Beispiel wenn in Systemen Module geändert werden und deren Verhalten wirksam, aber unerkannt, im Zusammenhang zu anderen Modulen steht. Im undurchsichtigen Netz der Beziehungen entstehen „Hidden Links“, versteckte Verbindungen, deren Zusammenspiel Emergenzen, also neue, ungeplante Eigenschaften oder Strukturen, unkontrolliert erzeugt. Diese zeigen sich als – oft gefährliche, überraschend auftretende – Dysfunktion des Systems.

Jenseits der limitierenden Faktoren der Eindimensionalität von Softwareentwicklung auf Basis von Hochsprachen stehen Entwicklerteams jedoch drei grundlegende Mechanismen zur Abwehr dieser Gefahr und zur Vermeidung von Hidden Links, Emergenz und Dysfunktion zur Verfügung:

  1. die Musterbildung
  2. „vertragsbasierte Programmierung“ (Design by Contract oder Contract based Design)
  3. die Abstraktion.

∨ mehr Text anzeigen

Sie hängen eng zusammen und bedingen sich gegenseitig.

  1. Die Musterbildung bringt Routinen in die Systementwicklung. Sind die Muster einmal gelernt, funktionieren sie wie Blaupausen.
  2. Das Contract based Design sichert das reibungslose Zusammenspiel einzelner Programmmodule durch die Definition formaler „Verträge“ zur Verwendung von Schnittstellen. Ihr großer Vorteil: Auf Basis von Modellen, also Metastrukturen, können diese Verträge durch Werkzeuge automatisiert verifiziert werden. Änderungen, die einen Vertrag verletzen, werden bereits in frühen Phasen entdeckt.
  3. Durch Abstraktionsmechanismen beschreiben wir anhand von Modellen komplexe Zusammenhänge auf eine einfachere Art und Weise. Das Abstraktionsniveau eines Modells erleichtert uns das Verstehen. Abstraktion ist der mächtigste Mechanismus, um Komplexität zu begegnen. Abstraktion greift im Wesentlichen auf Muster und grafische Darstellungen zurück. Auf Basis von Mustern kann unser Gehirn einmal gelernte komplizierte Konstrukte schnell assoziieren. Die grafische Darstellung abstrahiert deren Zusammenwirken auf Basis von verschiedenen Diagrammen hinsichtlich Zeit, Datenfluss, logischem Verhalten und statischem Design.

Das Modell auf der Basis von Abstraktion, Muster und Vertrag bildet das gesamte System mit seiner Komplexität ab. Vergleichbar mit einer Lupe ermöglicht es nun, den Blick auf einen bestimmten Aspekt zu richten, ohne den Bezug zum gesamten System zu verlieren. Andere Aspekte des Systems werden lediglich in der spezifischen Darstellung ausgeblendet, diese werden dann wiederum in anderen Sichten dargestellt. Der Blick auf das jeweils Wesentliche erhöht dessen Verstehbarkeit trotz der Komplexität und beugt Hidden Links vor.

Auf diese Weise repräsentieren (abstrahieren) Modelle mit ihren multidimensionalen Darstellungen die multidimensionalen Systeme sehr viel verstehbarer als eindimensionale Code-Repräsentationen. Modelle enthalten alle Stakeholdersichten bezüglich der Anforderungen, der Architektur und des Designs bis hin zum Test. Änderungen und Weiterentwicklungen, anhand welcher Artefakte auch immer durchgeführt, werden automatisch auf das Gesamtsystem ausgeprägt und auf Emergenz geprüft.

Im Embedded Systems Software Engineering ist ein Paradigmenwechsel von der Programmierung zur Modellierung, zum Model Driven Software Engineering, notwendig und – wie bereits viele Willert Kunden belegen - machbar. Um den Umstieg auf diese Methode erfolgreich zu vollziehen oder zu vertiefen, steht den Softwareentwicklungsabteilungen mittlerweile ein umfangreiches Portfolio an Ressourcen sowie Tools, beschriebenen Prozessen, Leitfäden und Referenzen zur Verfügung. Willert und andere innovative Softwarehäuser, wie zum Beispiel die Unterzeichner der MSDE Manifests, haben umfassende Erfahrung und liefern die notwendigen Tools im Paket mit fundierten Beratungsdienstleistungen.

Hinweis: Unsere Webseite nutzt Cookies. Wenn Sie fortfahren, nehmen wir an, dass wir Ihre Erlaubnis haben Cookies zu setzen. Informationen zum Einsatz von Cookies sowie unsere Datenschutzbestimmungen finden Sie in unserer Datenschutzerklärung und über unser Impressum.