Benutzer:H3xc0d3r/Mutationstest

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

In der Informatik ist der Mutationstest oder die Mutationsanalyse eine automatisierbare White-Box-Teststrategie für testbare bzw. verifizierbare Software, bei der die Qualität von vorhandenen Testfällen beurteilt werden kann. Durch das Verfahren kann die Testabdeckung deutlich erhöht werden.

Durch ein Tool werden systematisch jeweils kleine semantische, jedoch syntaktisch korrekte Änderungen (Mutationen) in den Original-Quelltext eingebaut und daraus eine Variante der Software (Mutant genannt) generiert. Für jede dieser Mutanten werden dann die Testfälle angewandt. Damit soll geprüft werden, ob die Testfälle in der Lage sind, die mutierte Variante als fehlerhaft zu erkennen, da ja eine semantische Änderung eingebaut wurde. Bei perfekter Testabdeckung durch die Testfälle führen alle Mutanten zu fehlerhaften Testergebnissen während das Original alle Tests besteht. Bestehen jedoch Mutanten die Tests, so gilt es herauszufinden, warum die Änderung in den Tests nicht erkannt wurde. Dies führt dann meistens zur Erweiterung der Testfälle und erhöht somit die Testabdeckung. Das Verfahren ist nicht nur auf Programme anwendbar, sondern kann z.B. auch auf XML-Dokumente angewandt werden, die gegen Schemadateien geprüft werden.

Als Nachteile sind die Aufwände für die Generierung und die Testdurchführung der Mutanten zu nennen. Die Anzahl der Mutanten hängt stark von der Größe und Komplexität der Software ab. Je umfangreicher die Testfallsammlung bzw. die Testabdeckung ist, umso seltener bestehen die Mutanten die Tests, d.h. die Suche nach noch nicht abgedeckten Codeanteilen oder Datenkonstellationen wird mit der Zeit immer aufwändiger.

Zur Bestimmung der Güte der Testfälle wird der Mutationsgewinn berechnet.

Im Idealfall führen alle nichtmutierten Testfälle zu positiven und alle mutierten Testfälle zu negativen Testergebnissen. Dann ist der Mutationsgewinn 1. Dies ist zu Beginn aber selten der Fall.

Das Erzeugen von Mutationen wird systematisch durch Tools durchgeführt. Die Tools parsieren in der Regel den Quelltext und verändern ihn regelbasiert. Dabei muss die Code- oder Daten-Ersetzung zu einem syntaktisch korrektem, definiertem Ganzen führen. Beispiele zu Programmen:

Als effektive Mutation hat sich das Entfernen von einzelnen Aufrufen, Zuweisungen, oder Ausdrücken erwiesen.

Geläufig ist der Austausch von Operatoren gleicher Stelligkeit.

Negation von (Teil-)Bedingungen

[Bearbeiten | Quelltext bearbeiten]

Problematisch ist das algorithmische Vermeiden äquivalenter Mutationen, die nur zu ungewollten Redundanzen in den Tests führen. Einfache Maßnahmen realisieren nur eine Änderung pro Durchlauf, komplexere können mehrere Maßnahmen geeignet kombinieren.

Tools zum systematischen Mutationstest wurden für die Programmiersprachen Java, C/C++, Ruby, C#/.Net/Mono, PHP, und Python entwickelt. Beispiele:

Die englische Wikipedia-Seite enthält eine Liste von Tools, aufgeschlüsselt nach Programmiersprache.

Die Webseite von A. Jefferson Offutt enthält eine Reihe von Links zu englischen Fachartikeln.

Ursprünglich wurde diese Teststrategie von Richard Lipton vorgeschlagen[1]. Timothy Budd entwickelte dazu 1980 das erste Tool im Rahmen seiner Doktorarbeit[2]. Mit der Verfügbarkeit von stärkeren Rechnern wurde die Toolentwicklung für die Anwendung an verbreiteten Programmiersprachen und später zum Testen von Hardwaredesigns vorangetrieben.

  1. Mutation 2000: Uniting the Orthogonal von A. Jefferson Offutt and Roland H. Untch.
  2. Tim A. Budd, Mutation Analysis of Program Test Data. Doktorarbeit, Yale University New Haven CT, 1980.

Kategorie:Qualitätsmanagement (Softwaretechnik)