Fault Seeding – Warum man absichtlich Bugs in die Software einfügen sollte

Kann die Methode Fault Seeding den Fehlerfindungsgrad steigern und zu einem geringeren Restrisiko beitragen? Diese Frage widmete ich mich in meiner Masterarbeit „Weiterentwicklung der Fault Seeding Methode zur Steigerung der Testeffizienz“, die ich unter der Leitung von Dr. Mohsen Ekssir an der Fachhochschule Wiener Neustadt in Österreich verfasste. Im Rahmen eines Entwicklung- und Testprojekts bei dem Unternehmen TechTalk wurden die theoretischen Annahmen in der Praxis überprüft.

Dieser Logbucheintrag soll die grundsätzliche Vorgehensweise und Sinnhaftigkeit von der Methode Fault Seeding beschreiben. Eine ausführliche Auseinandersetzung mit dem Thema ist im SQ-Magazin Ausgabe 41 (Seite 34) im Artikel „Weiterentwicklung der Fault Seeding Methode zur Steigerung der Testeffizienz“ zu finden, welcher hier downloadbar ist.

Definition

Fault Seeding, auch bekannt als Error Seeding, Defect Seeding oder Bebugging, ist eine Methode im Softwaretestprozess zur Ermittlung von folgenden zwei Softwaremetriken:

  • Fehlerentdeckungsgrad (Liefert Informationen zur Testqualität) Der Fehlerentdeckungsgrad gibt an, zu welchem Grad der Softwaretest die Fehler findet. Dieser numerische Wert gibt Auskunft über die Effektivität der Testaktivitäten und ist somit ein wichtiges Mittel zur Bewertung von Softwaretests.
  • Restfehleranzahl (Liefert Informationen zur Softwarequalität) Diese Softwaremetrik gibt Auskunft über die Anzahl der in der Software verbleibenden Fehler.

Diese beiden Softwaremetriken geben Antworten auf die Fragen „Wie viele Fehler in % werden von meinen Softwaretests gefunden?“ und „Wie viele Fehler verbleiben nach meinen Testaktivitäten in der Software?“

Vorgehensweise

Die simple Idee hinter Fault Seeding ist das absichtliche Einfügen von künstlichen Fehlern in die Software und das Zählen von künstlichen und realen Fehlern, die von den Softwaretests entdeckt wurden.

Die komplette Fault Seeding Vorgehensweise untergliedert sich in 5 Schritte:

  • Fehlermodellierung
  • Fehlereinpflanzung
  • Testausführung
  • Berechnung
  • Interpretation

Fehlermodellierung

Im ersten Schritt müssen mehrere Fehler modelliert werden. Man kann zum Beispiel arithmetische, relationale oder logische Operatoren ersetzen, Methodenaufrufe entfernen oder Datentypen von Variablen ändern. Es gibt eine Vielzahl von Softwarefehler, bringen Sie hier Ihre Kreativität und Ihre Erfahrung ein.

Beispiel: Das erste Codesnippet zeigt den Originalquellcode. Wenn Variabel a größer als 5 ist, dann wird die Funktion func() ausgeführt.

Jetzt modellieren wir einen künstlichen Fehler, indem der Originalquellcode manipuliert wird. Der manipulierte Quellcode ist im zweiten Codesnippet ersichtlich. Wenn Variable a größer gleich 5 ist, dann wird die Funktion func() ausgeführt.

Fehlereinpflanzung

Diese modellierten künstlichen Fehler werden in diesem Schritt in die Software eingefügt. Die Anzahl der künstlichen Fehler muss selbst bestimmt werden und ist von der Größe der Software abhängig. Tipp: Die Einpflanzung der künstlichen Fehler am Master Branch sollte vermieden werden. Es wird empfohlen für die Fault Seeding Aktivitäten einen separaten Branch anzulegen.

Testausführung

In diesem Schritt werden die manuellen oder automatisierten Tests ausgeführt. Das Ziel der Tests ist es so viele Fehler wie möglich zu entdecken.

Berechnung

Nachdem die Tests ausgeführt worden sind, ist die Anzahl der entdeckten eingepflanzten Fehler, die Gesamtanzahl der eingepflanzten Fehler und die Anzahl der entdeckten realen Fehler bekannt. Die folgende mathematische Gleichung zeigt die grundsätzliche Beziehung zwischen künstlichen und realen Fehlern:

Berechnung des Fehlerentdeckungsgrades Berechnung der Restfehleranzahl

Interpretation

Fault Seeding ist eine Möglichkeit um mit Hilfe der beiden Softwaremetriken Fehlerentdeckungsgrad und Restfehleranzahl den aktuellen Zustand bezüglich Software- und Testqualität besser einschätzen zu können. Auf Basis dieser Informationen können Mängel in den Softwaretests identifiziert und Verbesserungs- und Optimierungsmaßnahmen abgeleitet und umgesetzt werden.

Zusammenfassung

Um auf den Titel des Logbucheintrages Bezug zu nehmen – ja, das absichtliche Einfügen von Bugs in die Software ist im Rahmen der Fault Seeding Aktivitäten sinnvoll. Mit Hilfe von künstlichen Fehlern lassen sich die beiden Softwaremetriken Fehlerentdeckungsgrad und Restfehleranzahl ermitteln, welche zur besseren Einschätzung der Software- und Testqualität dienen.