Sonntag, 1. Januar 2012

Vollständige Testbarkeit

Ich stellte mir einige Zeit die Frage nach vollständiger Testbarkeit von Softwarelösungen. In meiner Forschungszeit in der korrekten Softwareentwicklung habe ich gelernt, dass der Nachweis der Korrektheit eines Stückchen Software ein Vielfaches an Aufwand kostet, als die eigentliche Erstellung. In der Amerikanischen Raketenforschung hat man dazu in den achziger Jahren einige hundert Mathematiker beschäftigt, um die Korrektheit der Algorythmen formal nachzuweisen (Parnas, Box-Struktur-Methode). Die lässt sich in der freien Wirtschaft "normal" nicht abbilden aber der Wunsch beleibt jedoch und ist gerechtfertigt. Wie bei jedem anderen Handwerk.
Wolfgang Strunk schreibt in seinem Blogg (http://www.softwarearchitektur.de/?tag=testautomatisierung)
"In jedem Fall ist die Softwareentwicklung selbst ein kreativer Prozess, der individuelle Produkte hervorbringt, wie z.B. auch der Hausbau – selbst bei Fertighäusern – zu individuellen Resultaten führt. Daher ist eine gewisse Analogie zum Handwerk nicht von der Hand zu weisen."Warum

Vergleicht man das "Handwerk" der Softwareerstellung in heutigen Projekten mit der Vorgehensweise zum formalen Beweisen von Softwarebausteinen in den 80'er Jahren so wird mal leicht feststellen, dass die Idee der Mathematiker stets eine Zerlegung der Software in prüfbare oder besser beweisbare Module war. Diese Module entsprechen einer mathematischen Funktion. Kombiniert mal mehrere Module miteinander, so entstehen wieder Funktionen ... Vorausgesetzt man hat die Anforderungen formal beschrieben, kann man hier richtig Mathematik anwenden!

Warum in heutigen Vorgehensweisen nicht eben diese Idee nutzen? Dies bedingt jedoch von Anfang eine andere Vorgehensweise im Projekt. Angefangen der Anforderungebeschreibung müsste die Umsetzung, also  die Softwareentwicklung, nicht nur die normalerweise unspezifisch formulierten Anforderungen und Architekturvorgaben berücksichtigen, nein auch von Anfang an auf die Prüfbarkeit der einzelnen Module ausgerichtet sein. Wie soll man mit Klassen und Methoden eine verifizierbare Funktion abbilden?

 Mit Fitnesse (www.fitnesse.org) ist man dabei auf dem rechten Weg! Das Fixturekonzept ist nichts anderes als eine konkrete testbare Funktion eines oder mehrerer Programmmodule. Die erstellbaren Testfälle mit ihren Entscheidungstabellen bilden die Software also als ausführbare Funktionen ab. Die entsprechenden Testsuiten kombinieren diese Funktionen und prüfen Grenzwerte.
Das Framework hat meiner Meinung nach das Handwerk der Mathematiker als Programmverfikatoren abgebildet auf eine Vorgehensweise, die es Softwareentwicklern, Test-  und Fachexperten möglich macht eine hochtransparenten Aussage zur Qualität der Software zu treffen.
Doch wie viel Aufwand muss und sollte man in die Vollständigkeit des Testautomaten setzen? ... 

Keine Kommentare:

Kommentar veröffentlichen