Verbesserung von Mutationstests mit Hilfe der symbolischen Ausführung

Student:Michael Baer
Title:Verbesserung von Mutationstests mit Hilfe der symbolischen Ausführung
Type:
Advisors:Dotzler, G.; Kamp, M.; Oster, N.; Philippsen, M.
State:submitted on December 16, 2015
Prerequisits:
Topic:

Hintergrund
Die symbolische Ausführung eines Programms erlaubt es, das semantische Verhalten zu bestimmen und es mit dem semantischen Verhalten anderer Programme zu vergleichen. Dafür wird durch die symbolische Ausführung ermittelt, welche Eingangsdaten zu welchem Programmablauf und welchem Systemzustand führen.

Beispiel:

public int min(int a, int b) {
..return a < b ? a : b;
}

Symbolisches Ausführungsergebnis (Symbole sind mit @ gekennzeichnet):
(@A < @B, RET = @A) && (@A >= @B, RET = @B)

Thema
Am Lehrstuhl wurde ein neues Verfahren zur symbolischen Ausführung von Code-Fragmenten entwickelt. Dieses Verfahren soll zur Unterstützung von Mutationstests eingesetzt werden. Bei Mutationstests werden jeweils einzelne repräsentative Fehler in das zu testende Programm ("Original”) injiziert und das Verhalten der modifizierten Variante ("Mutant”) bei der Ausführung der Testfälle mit dem der unveränderten Fassung verglichen. Weicht das Verhalten bei den Testfällen ab, gilt der Mutant als "getötet” - je mehr Mutanten auf diese Weise getötet werden, desto besser ist die Testfallmenge. Im ersten Arbeitsschritt ist die symbolische Ausführung dahingehend anzupassen, dass sie diejenigen Mutanten identifiziert, die semantisch zum Original äquivalent sind, d.h. gleiches Verhalten bei der symbolischen Ausführung zeigen (da diese Mutanten prinzipiell nicht getötet werden können). Diese äquivalenten Mutanten verschlechtern unnötigerweise das Testergebnis. Insbesondere dieser Schritt soll parallelisiert werden. Bei Mutanten, die nicht mit dem Original äquivalent sind, enthalten die semantischen Analyseergebnisse, die bis zur Stelle der Mutation akkumuliert wurden, geringe geringe Abweichungen. In einem zweiten Arbeitsschritt soll daher ein Verfahren entwickelt werden, das auf Basis dieser Abweichungen automatisch einen Testfall generiert, der den Mutanten töten kann. Dies erlaubt es, automatisch eine vollständige Menge an Testfällen zu erhalten.

Meilensteine

  • Einarbeitung in das Verfahren zur symbolischen Ausführung
  • Entfernung von gleichartigen Mutanten
  • Generierung zusätzlicher Mutationstestfälle
  • Parallelisierung des Verfahrens
  • Evaluation
  • Ausarbeitung

Literatur

  • Kamp, Marius: Entwicklung eines Werkzeugs zum Vergleich von Code-Fragmenten durch symbolische Ausführung. Masterarbeit, Lehrstuhl für Informatik 2, Friedrich-Alexander-Universität Erlangen-Nürnberg, Oktober 2014.
  • http://cs.gmu.edu/~offutt/mujava/
  • Oster, Norbert: Automatische datenflussorientierte Testfallerzeugung für objekt-orientierte Softwaresysteme mittels Evolutionärer Verfahren. Dissertation, Lehrstuhl für Informatik 11, Friedrich-Alexander-Universität Erlangen-Nürnberg, Januar 2007.
watermark seal