Follow my new blog

Sonntag, 25. Februar 2007

Komplexität beherrschen

Software ist komplex und wird immer komplexer. Worin die Komplexität liegt? Nun, sie entspringt der "Systemhaftigkeit" von Software. Dazu mehr in meiner Serie "Software als System".

Wie können wir nun aber mit Komplexität umgehen? Wir müssen sie beherrschen, wenn wir immer leistungsfähigere Software entwickeln wollen.

Ein altbewährtes Mittel zur Bewältigung von Komplexität ist sicherlich die Bildung von Hierarchien. Etwas komplexes wird zerlegt in Teile, die weniger komplex sind. Falls die immer noch zu komplex sind, um sie handhaben zu können, werden sie wiederum zerlegt in kleinere, weniger komplexe Teile usw. Stepwise refinement und rekursive Dekomposition führen zu Softwaresubsystemen, von denen man das Gefühl hat, sie zu beherrschen - so dass man in Summe auch das zu komplexe Ganze beherrscht.

Ein weiteres Mittel gegen Komplexität ist Ordnung. In einem komplexen Gebilde systematisiert sie die Teile und ihre Verbindungen. Sie ist Voraussetzung für die Möglichkeit zur Information über ein System. Dem liegt der Gedanke zugrunde, dass der Informationsgehalt einer Aussage umso höher ist, je mehr sie dazu beiträgt, vom Kleinen/Einzelnen auf das Große/Ganze zu schließen. Beispiel: In einer unaufgeräumten Küche, d.h. einer Küche mit weniger Ordnung, hat die Aussage "In jener Schublade liegt die Gabel" wenig Informationsgehalt. Im Extremfall erfährt man durch sie nur etwas über eine einzige Gabel. Ist die Küche jedoch gut strukturiert, d.h. sie ist "in Ordnung"/ordentlich, dann kann man von der Aussage nicht nur auf den Ort weiterer Gabeln schließen, sondern weiß wahrscheinlich auch wo die Löffel liegen.

Wissen/Bildung ist wiederum ein Mittel, um Ordnung herzustellen bzw. zu erkennen. Wer weiß, wie ein Flugzeug funktioniert, sieht die Ordnung in den Bedienelementen im Cockpit; wer es nicht weiß, der fühlt sich überwältigt von der Komplexität. (Weiter)Bildung ist somit ein indirektes und allgemeines Mittel zur Beherrschung von Komplexität.

Soweit zwei sehr bekannte und mehr oder weniger bewusst in Gebrauch befindliche Mittel zur Reduktion von Komplexität. Zwei andere sind mit allerdings erst in der letzten Zeit aufgefallen, die ich für bisher unterbewertet halte: Wissenschaftlichkeit und Vertrauen.

Wissenschaft strebt nach einer objektiven, vom Individuum unabhängigen Sicht auf die Welt. Ihre methodischen Standards wollen Erkenntnisse nur dann gelten lassen, d.h. zum kollektiven Modell über die Welt hinzufügen, wenn sie intersubjektiv übertragbar sind. Die Gesamtkomplexität der "Weltwahrnehmungen" aller Individuen sowie ihre jeweils eigene Komplexität und die ihrer sozialen System wird dabei reduziert auf das, was nachvollziehbar und reproduzierbar ist. Nicht, was der eine oder andere in der Welt zu sehen vermeint, gilt, sondern nur der reproduzierbare Konsens. Auf die Softwareentwicklung übertragen bedeutet das: Nicht das, was Projektteammitglieder im Kopf haben ist "wahr", sondern das, was für alle nachvollziehbar ist. Nur "Experimente" (z.B. Tests), die von unterschiedlichen Individuen an womöglich unterschiedlichen Orten reproduziert werden können, sagen etwas über die Coderealität aus. Das wiederum bedeutet, dass "Experimente" möglichst automatisch und kontextfrei ablaufen sollten.

Und schließlich hilft Vertrauen, mit Komplexität umzugehen. Denn Menschen und Code-Subsystemen, denen man vertrauen kann, muss man nicht im Detail kennen. Man muss sich mit ihrer inneren Komplexität nicht auseinandersetzen; das tun andere. Wie kann Vertrauen als Mittel zur Reduktion von Komplexität Eingang in die Softwareentwicklung finden? Indem zunächst einmal Subsysteme und Organisationseinheiten geschaffen werden, zu denen man überhaupt Vertrauen aufbauen kann. Ohne klar erkennbaren Einheiten hätte Vertrauen kein Ziel. Subsysteme sind dabei als Black Boxes (Komponente) zu sehen, die eine klare Aufgabe (Kontrakt) haben, auf deren Erfüllung man vertrauen kann. Und Organisationseinheiten (Komponentenentwickler) müssen klare Verantwortlichkeiten haben, auf deren Erfüllung man vertrauen kann. Wo Komponentenorientierung und klare Verantwortlichkeiten fehlen, vergibt man sich die Chance auf Reduktion von Komplexität durch Vertrauen.

-Ralf

Keine Kommentare: