Interessante Testarten: Mutationstest und Fuzzing

Bin heute über 2 Testverfahren gestolpert, die ich vorher noch nicht auf der Rechnung hatte. Fangen wir beim Mutationstest an.

Mutationstest

Dabei wird die zu testende Applikation vollautomatisch von einem Programm abgeändert. Das kann etwa so aussehen, dass in einer Schleife aus einem <= ein < gemacht wird. Hier orientiert sich die Art der eigebauten Fehler an den gern von Programmierern gemachten, also z.B. Schleifengrenzen und Verschachtelungen. Wichtig ist hierbei, dass pro Durchlauf immer nur eine Manipulation vorgenommen wird, sonst lässt sich die Auswirkung schließlich schlecht lokalisieren.

So, nachdem wir nun also den Code „mutiert“ haben, werden die Testfälle aufs Programm gehetzt. Jetzt wird geschaut, ob die Testfälle alle Mutationen identifizieren können. Ist das nicht der Fall, fehlt ein Test oder ist schlecht geschrieben. Demnach ist der Mutationstest also eher ein Test für die Testfälle. Wichtig zu erwähnen ist noch, dass sogenannte „äquivalente Mutanten“ den Spaß verderben können. Angenommen unser Originalcode ist:

$x = 4; $y = 2; if ($x == $y * 2) {     ... } 

Jetzt geht unser Mutationstest-Framework daher und „mutiert“ das * im if zu einem +. Das Ergebnis bleibt das Gleiche, der Modultest ist glücklich. Und unser Mutationstest ist traurig, dass der Test nicht angeschlagen hat. Gute Tools können damit aber umgehen. Schaut euch mal Monthra an.

Fuzzing

Problem: Programmierer entwickeln bei der Arbeit ein bestimmtes Verständnis ihrer Aufgabe, welches sich auch auf die Tests niederschlägt. Demnach sind Tests, die ein Entwickler für seinen eigenen Code produziert eventuell nicht ausreichend, um wirklich alle relevanten Aspekte durchzuchecken. Darauf basiert das Fuzzing. Und zwar werden hier automatisierte große Mengen von Input-Daten generiert und das Programm damit beschossen. Da wir nicht wissen, welcher zufällige Input zu welchem Output führen soll, geht es hierbei also „nur“ um das Testen der Stabilität.

Allerdings ist eine solche Umgebung nicht sonderlich kompliziert aufzusetzen und verrichtet beim nächtlichen Test treue Dienste. Hier wird oft beSTORM als gutes Tool genannt, habe damit allerdings selbst noch keine Erfahrungen sammeln können.


Deprecated: Directive 'allow_url_include' is deprecated in Unknown on line 0