Analytische Verfahren
Die einfachste Möglichkeit zur Überprüfung einer Software
ist das Testen. Man startet einfach das Programm und probiert aus, ob es das
tut, was man erwartet. Allerdings kann man sich leicht klarmachen, dass man
niemals ein Programm vollständig testen kann. Wenn ich beispielsweise eine
einfaches Taschenrechnerprogramm schreibe, wie es bei vielen Betriebssystemen
mitgeliefert wird, dann kann ich nicht alle möglichen Rechnungen
durchprobieren, um zu überprüfen, dass die Ergebnisse immer stimmen. Dazu gibt
es einfach zu viele Möglichkeiten. (Im streng mathematischen Sinne sind es
sogar unendlich viele. Warum das hier nicht ganz zutrifft, ist ein anderes
Thema) Ich könnte aber jede Funktion (Addition, Subtraktion, Multiplikation,
Division, Potenz, Wurzel, usw.) jeweils einmal ausprobieren und zumindest dafür
sicherstellen, dass alle Ergebnisse stimmen. Über die Entwicklung und Umsetzung
von solchen Teststrategien gibt es ganze Tagungsreihen.
Man kann an das Problem auch etwas mathematischer
herangehen. Zu jedem beliebigen Zeitpunkt seiner Ausführung hat ein Programm
einen „Zustand“. Der ist charakterisiert durch die aktuell gespeicherten Werte
(beim Taschenrechner z.B. die eingegebenen Zahlen und die ausgewählte
Operation) und den Punkt an dem das Programm gerade angekommen ist (z.B. kurz
bevor der Benutzer auf die „=“-Taste drückt. Jetzt kann man versuchen sich alle
diese Zustände zu überlegen und für jeden Zustand zu prüfen, was als nächstes
passieren kann. Wenn z.B. die gewählte Operation die Division ist und die zweite
Zahl eine Null, dann sollte das Programm danach den Teil ausführen wollen, der
dem Benutzer einen Fehler anzeigt. Wenn es das nicht tut, dann erreicht das
Programm einen unerwünschten Zustand und man hat ein Problem gefunden. Diese
theoretische Betrachtungsweise wird Verifikation genannt. Im Vergleich zum
Testen kann man mit ihr beweisen, dass ein Programm fehlerfrei ist (das es also
nicht in einen unerwünschten Zustand gerät). Aber dafür ist das Verfahren auch
so kompliziert, dass man es nicht für komplette, komplexe Programme durchführen
kann, sondern allenfalls für kleinere Teile.
Und weiter?
Das ist er also, mein erster Blogeintrag. Ich habe versucht
einen kleinen Einblick in die weite Welt der Softwaretechnik zu geben. Mir ist
bewusst, dass ich viele Themen nur sehr oberflächlich gestreift habe und vieles
ausgelassen oder sehr vereinfacht dargestellt habe. Ich habe keine Ahnung, ob das Thema von
Interesse ist, ob ich einen guten Abstraktionsgrad erwischt habe und ob
irgendjemand bis zu diesem Punkt lesen wird. Daher brauche ich euer Feedback: Was
hat euch gefallen und was nicht? Würdet ihr gerne mehr lesen? Zu welchen
Themen? Ich bin sehr gespannt auf eure Kommentare, Anregungen und Fragen.
Kommentare (58)