Interaktivität
Allerdings braucht man schon noch ein bisschen mehr
Flexibilität als bei Kochrezepten, denn Software ist meist darauf ausgelegt,
dass sie interaktiv ist, dass sie also auf Eingaben des Benutzers reagieren
kann. Daher ist es notwendig Verzweigungen in das Programm einzubauen. „Wenn
der Benutzer hier klickt, dann mache dies. Wenn er dort klickt, dann mache
das.“ Und auch Wiederholungen, Schleifen genannt, sind notwendig. Schließlich
soll der Benutzer auch mehrmals klicken dürfen. Da man vorher nicht weiß, wie der
Benutzer genau mit dem Programm interagiert, muss man sich vorher genau
Gedanken machen, was das Programm alles ermöglichen, erlauben, und verbieten
soll. Das kann manchmal eine ganze Menge sein. Allein wenn man sich die
Iconleisten von gängigen Schreibprogrammen ansieht, dann kann der Benutzer zu
jedem beliebigen Zeitpunkt alles Mögliche anstellen. Und die Software muss in
jedem Fall damit umgehen können.
Komplexität
In eingebetteten Systemen wie Autos wird das Ganze noch
komplizierter: Die Klimaanlage muss geregelt werden, das Navigationssystem muss
ständig überprüfen, ob der Fahrer sich auf der geplanten Route befindet, das
Entertainmentsystem läuft nebenbei und dann kommt plötzlich eine Vollbremsung!
In so einem Moment möchte niemand, dass der Airbag zu spät aufgeht, weil das
Navigationssystem vorher noch eine neue Route berechnen musste. Diese ganzen
Vorgänge müssen also aufeinander abgestimmt sein. Und das ohne das man vorher
weiß, welche Situationen genau auftreten werden.
Größe
Ein kompliziertes Kochrezept erstreckt sich über ein bis zwei Seiten im
Kochbuch und besteht damit aus 50 bis 100 Zeilen Text. Komplexe Software kommt
allerdings schnell auf mehrere Millionen Zeilen Programmcode. Das entspricht
eher einer Zahl von 100000 Seiten Text. Bei diesen Zahlen wird schnell klar,
dass niemand sich ein Programm einfach komplett durchlesen kann um zu
überprüfen was es tut oder ob es fehlerfrei ist. (Abgesehen davon ist
Programmcode kein Prosatext, denn man einfach „runterlesen“ kann.) Dazu kommt
noch das Problem, dass so ein ausgedrucktes Programm linear ist. Es fängt auf
Seite 1 oben an und endet unten auf Seite 1000000. Das kann man (mit viel Zeit)
zwar durchlesen, wird damit dem Ablauf der Software aber nicht gerecht. Die
oben erwähnten Schleifen müsste man mehrmals lesen, bei Verzweigungen („Wenn
dies passiert, dann tue das, sonst mach etwas anderes.“) müsste man wild im
Dokument hin und her springen. Und dadurch würde man blitzschnell die Übersicht
verlieren, was man schon gelesen hat, und was nicht.
Was kann man dagegen tun?
Es ist also nicht so leicht eine funktionierende,
komplexe Software zu entwickeln. Deswegen versucht die Softwaretechnikforschung
Werkzeuge und Methoden zu finden, die die Entwicklung von Software erleichtern.
Die Ansätze dazu kann man grob in konstruktive und analytische Verfahren
unterteilen. Konstruktive Ansätze beschäftigen sich damit, wie man Software
leichter entwickeln kann, so dass sie von Anfang an möglichst korrekt
funktioniert. Dabei geht es darum Mittel und Wege zu finden, die die oben
angesprochenen Probleme wie Größe, Komplexität und Interaktivität abschwächen
und sie damit möglichst gar nicht erst zu Problemen werden lassen. Analytische
Verfahren hingegen konzentrieren sich darauf, Fehler und Probleme in bereits entwickelter
Software zu entdecken.
Konstruktive Verfahren
Wenn der Mensch vor einer schwierigen Aufgabe steht, dann
tendiert er, sich Werkzeuge zu schaffen, die die Aufgabe erleichtern. Das ist
in der Softwaretechnik nicht anders. Software wird nicht in einem einfachen
Texteditor oder in einem Textverarbeitungsprogramm geschrieben, sondern
mithilfe einer Entwicklungsumgebung. Die enthält zwar auch einen Editor, aber
zusätzlich jede Menge Hilfsmittel. Sie prüft den Programmcode auf
offensichtliche Fehler (z.B. falsch geschriebene Wörter), bietet eine Übersicht
über die Struktur des kompletten Programms und hat Funktionen zur
nachträglichen Anpassung und Veränderung der Software. Die Konzipierung,
Entwicklung und Erweiterung solcher Entwicklungsumgebungen ist ein Teil der
konstruktiven Softwaretechnik.
Es gibt auch Werkzeuge, mit denen man erst einmal die
grobe Struktur oder das Verhalten seiner Software in einem Diagramm modellieren
kann. Dadurch behält man einen besseren Überblick und muss nicht zunächst nicht
um die Details kümmern. Es gibt auch Standards, die vorschreiben, wie so ein
Diagramm auszusehen hat. Dadurch haben Softwaretechniker eine gemeinsame
„Sprache“ zur Verfügung mit der sie sich über Ideen und Konzepte für eine
Software austauschen können. Und im Idealfall kann man den Programmcode aus
diesen Diagrammen zumindest teilweise generieren lassen. Das erspart einerseits
viel Arbeit und vermeidet andererseits auch viele Fehler, die man sonst beim
Selberschreiben machen würde.
Kommentare (58)