Eine Software wird als fehlerfrei angesehen, wenn sie sowohl die Anforderungen erfüllt als auch frei von technischen Fehlern ist.
Erfüllung der Anforderungen
Anforderungen an Software werden von einem oder mehreren Auftraggebern gestellt und können als Textdokument, in tabellarischer Form oder als fachliches Modell (UML oder DSL bzw. Domain Specific Language festgelegt werden. Um die Erfüllung dieser Anforderungen zu beweisen, muss die in den Anforderungen enthaltene Logik mit der in der Software realisierten Logik verglichen werden. Das ist nicht immer möglich, weil es beim Vergleich von logischen Formulierungen unentscheidbare Fälle geben kann. Dieses kann seine Ursache in der Mehrdeutigkeit der benutzen Sprachen oder in der Existenz von ungenannten Forderungen haben. Auch ist ist die Metasprache der Anforderungen eine andere als die Metasprache der Programme, was den Vergleich erschwert.
Vermeidung von technischen Fehlern
Dazu gibt es prinzipiell 2 Wege:
statische Analysen
Programme in prozeduralen Sprachen (siehe prozedurale Programmierung ) können technische Fehler enthalten, die nur bei bestimmten Eingaben oder zu bestimmten Zeiten auftreten. Diese sind zum Beispiel Indexüberläufe, Divisionen durch Null, fehlende Initialisierungen und viele weitere Unstimmigkeiten der prozeduralen Programmierung. Wenn es gelänge, alle technisch möglichen Fehler zu bestimmen und man ein vollständiges Verfahren zur statischen Analyse hätte, könnte man eine Software zumindest technisch verifizieren , d.h. beweisen, dass keine technischen Fehler in ihr enthalten sind. Prozedurale Programmierung ist nicht völlig vermeidbar, weil Maschinensprachen heute zustandsorientiert sind und die Grundlage aller Softwarearchitekturen bilden. Auch objektorientierte Programmierung ist auf der Methodenebene prozedural. methodische AnsätzeDurch neuere Methoden wie logische oder funktionale Programmierung oder modellgesteuerte Entwicklung (Model Driven Development) lässt sich vielleicht die Entstehung von Fehlern von vornherein vermeiden. Diese Methoden sind aber in der Praxis noch nicht ausreichend bewährt und werden auf der Ebene darunter durch prozedurale Logik implementiert, was einer Verlagerung und Reduzierung des Problems gleichkommt. VorhersageVermutlich werden sich der empirische Ansatz, der gemachte Fehler zu finden versucht, und der methodische Ansatz, der Fehler von vornherein ausschließen soll, bis 2015 in der Mitte treffen. Vielleicht wird auch eines Tages das babylonische Sprachgewirr durch ein formales Esperanto verdrängt werden. |