Mit dem sogenannten Fuzzy Testing (kurz: Fuzzing) stellen wir in diesem Blogbeitrag ein Prüfverfahren vor, das kontinuierliche, automatisierte Tests von Software mit moderatem Zeit- und Kostenaufwand erlaubt, sich für dynamische Entwicklungs- und Einsatzumgebungen eignet und eine im Vergleich zu manuellen Verfahren deutlich größere Testraumabdeckung erreichen kann. Dieser moderne Ansatz, der ursprünglich für klassische Software entwickelt wurde, wird zunehmend im Hinblick auf die Prüfung von KI-Systemen (speziell von Neuronalen Netzen) erweitert und angewendet. Es kombiniert konzeptionelle Einfachheit mit einer ganzen Reihe günstiger Eigenschaften, die es auch zur Lösung von spezifischen Problemen aus dem KI-Umfeld attraktiv erscheinen lassen, die wir in einem früheren Blogbeitrag vorgestellt haben.
Fuzzing: Testen mit Hilfe des Zufalls
Fuzzy Testing basiert auf einer evolutionären Optimierungsstrategie und ist ein vielversprechender Kandidat, um Herausforderungen anzugehen, die vor allem im Kontext von KI-Systemen bedeutsam sind. Ausgehend von einer Reihe vorausgewählter Testeingaben werden mittels anwendungsspezifischer Transformationen zufällig neue Eingaben erzeugt und dem KI-Modell vorgelegt. Eine solche Zufallsmutation ist genau dann im Sinne des Algorithmus „interessant“, wenn mindestens eines der folgenden Kriterien erfüllt ist:
- Schlechte(re) Vorhersagen: Die Vorhersage des Modells ist entweder fehlerhaft oder ihre Qualität ungenügend.
- Erhöhte Suchraumabdeckung: Ein geeignetes Maß für die Abdeckung des Zustandsraums des Modells wird durch die Zufallsmutation signifikant erhöht. Für ein Neuronales Netz und neuron coverage als Abdeckungsmaß wäre dies etwa dann gegeben, wenn durch das neue Beispiel Neuronen stark aktiviert werden, die durch alle anderen Tests nicht oder nur schwach aktiviert wurden.
Da mit dem zweiten Kriterium ein Maß für die Abdeckung (englisch coverage) des Zustandsraums des Modells in die Bewertung einer Testeingabe einfließt, spricht man hierbei auch von coverage-based Fuzzing. Alle Zufallseingaben werden gesammelt und hinsichtlich ihrer Interessantheit bewertet. In regelmäßigen Abständen wird ein bestimmter Anteil der uninteressanteren Testfälle ausgefiltert.
Eine entscheidende Rolle für die erreichbare
- Prüfbreite (wie stark sich Testeingaben unterscheiden können),
- Prüftiefe (wie dicht der Suchraum in Umgebungen einzelner Eingaben abgedeckt wird) und
- Prüfeffizienz
spielen dabei die Transformationen, die als elementare Bausteine für die Zufallsmutationen zur Auswahl stehen. Sie beeinflussen, welche möglichen neuen Eingaben sich aus den schon vorhandenen generieren lassen und wie lange es dauert, bis neue Bereiche des Suchraums erschlossen werden können.
So könnten im Fall eines bildverarbeitenden Modells Standardfilter aus dem Bereich der Bildverarbeitung (Weichzeichner, Rauschen, Verzerrungen, usw.) zufällig kombiniert werden. Durch die erhöhte Prüftiefe wäre es möglich, adversarielle Beispiele oder ganz generell Instabilitäten des Modells zu finden, die per Definition sehr nah an Beispielen aus dem Trainingsdatensatz liegen – bei adversariellen Beispielen sogar so nah, dass Unterschiede zum Original mit bloßem Auge nicht oder kaum zu erkennen sind.
Hingegen würde es eine praktisch unendliche Anzahl an Mutationen erfordern, um nur mit solchen Filtern und per Zufall aus dem Bild eines Hundes das einer Orange zu erhalten. Prüfungen mit hoher Prüfbreite, für die Eingaben mit solcherart neuem Inhalt generierbar sein müssen, erfordern komplexere Transformationen auf Basis von (Bild-)generatoren; Mutationen entstünden im oben genannten Beispiel durch zufälliges Hinzufügen oder Entfernen ganzer Bildmotivteile.
Während sich Standardfilter aus der Bildbearbeitung relativ einfach zum Prüfen beliebiger bildverarbeitender Modelle verwenden lassen, müssen generative Transformationen speziell für einen Anwendungsfall zusammengestellt oder ggf. sogar neu entwickelt werden.
Vorzüge von Fuzzy Testing
Von seinen Anlagen her bringt Fuzzing eine ganze Reihe von Eigenschaften mit, die es zu einem vielversprechenden Kandidaten für praktisch umsetzbare, automatisierte KI-Tests machen. Durch die fortlaufend optimierten, zufallsgenerierten Eingaben ist eine Prüfung per Fuzzing:
- Dynamisch: Die Menge der Testeingaben passt sich zielgerichtet und ohne menschliches Zutun auch an veränderliche Modelle und Einsatzumgebungen an.
- Automatisierbar: Fuzzing ist ein automatisiertes Prüfverfahren, das ohne engmaschige menschliche Einflussnahme oder Überwachung angewendet werden kann.
- Praktikabel: Ebenso wie die Entwicklung eines Modells in der Praxis oft nicht endgültig abgeschlossen ist, kann auch eine Prüfung per Fuzzing ebenfalls „endlos“ weiterlaufen. Es können aber auch Rechenzeit- und andere Ressourcenbegrenzungen für Fuzzing-Kampagnen definiert werden.
- Umfassend: Bei geeignet gewählter Metrik für die Suchraumabdeckung, verspricht Fuzzing zum einen einen quantitativen Indikator dafür zu liefern, wann eine Prüfung hinreichend „vollständig“ ist, zum anderen kann aber auch flexibel zwischen Prüfgüte und -aufwand abgewogen werden.
- Integrierbar: Fuzzy Tests lassen sich technisch gut in moderne Entwicklungs- und Auslieferungswerkzeuge und die entsprechenden automatisierten Abläufe vom Test der jeweils aktuellen Modellversionen bis hin zum Produktionsbetrieb integrieren.
- Vielseitig: Auch wenn aktuell entwickelte Fuzzingansätze vielfach auf Neuronale Netze zugeschnitten sind, eignet sich das Verfahren prinzipiell zur Prüfung anderer Lernverfahren und für alle Arten von Eingangsdaten.
Fuzzing verspricht also viele Vorteile für einen breiten Praxiseinsatz. Allerdings sind aktuell noch einige Forschungsfragen zu klären, um der Technik zu einer breiteren Anwendung zu verhelfen.
Aktuelle Forschungsfelder im Bereich Fuzzy Testing für Maschinelles Lernen
So muss eine gute Fehlerheuristik, ein sogenanntes Oracle, meist genau für einen spezifischen Anwendungsfall gewählt beziehungsweise darauf zugeschnitten werden. Generische und damit (nahezu) universell einsetzbare Oracles eignen sich dagegen vorwiegend zum Finden kritischer Fehler, wie zum Beispiel von Programmabstürzen und Rechenfehlern (sogenanntes Smoke Testing). Ob ein passendes Oracle gefunden werden kann, muss daher meist von Fall zu Fall entschieden werden und erfordert oft domänenspezifisches Expertenwissen.
Auch die Wahl einer geeigneten Abdeckungsmetrik ist gegenwärtig ein aktives Forschungsfeld. Sie dient zum einen dazu, die automatische Suche nach interessanten Testbeispielen in die Tiefe des Suchraums zu führen, zum anderen soll die insgesamt erreichte Abdeckung auch einen Hinweis auf die Vollständigkeit der Prüfkampagne liefern können. So ist etwa die Eignung der sogenannten neuron coverage für Neuronale Netze unter Forschern nicht unumstritten und nur eine von vielen Kandidaten für ein Abdeckungsmaß. Andererseits gibt es etablierte Lernverfahren abseits Neuronaler Netze, für die bislang noch kein einziger Kandidat entwickelt worden ist.
Außerdem kann sich die Wahl geeigneter Elementartransformationen je nach Anwendungsfall schwierig gestalten. Schließlich gilt es zu vermeiden, dass das Fuzzing (zu) viele Testfälle generiert, die außerhalb der – oftmals nicht klar umrissenen – Anwendungsdomäne eines Modells liegen. Dies ist wichtig, um einerseits Ressourcen und Kosten zu sparen und andererseits nur solche Fehler zu finden, die für die Qualitätsbewertung jenseits von reinen Smoke Tests auch tatsächlich relevant sind. Ist die Menge der Transformationen hingegen zu eingeschränkt gewählt, um den Suchraum aller Eingaben schnell „durchqueren“ zu können, besteht das Risiko, dass keine Suchkampagne eine zufriedenstellende Abdeckung erreicht – unabhängig vom getriebenen Aufwand.
Fazit
Mit dem Fuzzy Testing schickt sich ein modernes, etabliertes Verfahren aus dem Bereich der automatisierten Softwaretests an, den Sprung von klassischer Software in die Sphäre des Maschinellen Lernens zu machen. Es kombiniert konzeptionelle Einfachheit mit einer ganzen Reihe günstiger Eigenschaften, die es sogar zur Lösung von Problemen attraktiv erscheinen lassen, welche für das KI-Umfeld spezifisch sind. Es wird sich zeigen müssen, ob und für welche Anwendung sich diese Versprechen erfüllen lassen – gerade im Bereich Neuronaler Netze ist Fuzzy Testing aber ein aktives Forschungsfeld mit einer Reihe Kandidaten, die schon jetzt einen Blick wert sein könnten.
Mehr Informationen in dem zugehörigem Video: