Abstract | ||
---|---|---|
Die automatische Erzeugung von Tests fur objektorientierte Software besteht typischerweise aus der Erstellung von Sequenzen von Methodenaufrufen um hohe Codeabdeckung zu erzielen. In der Praxis konnte der Erfolg dieses Prozesses eingeschrankt sein, wenn Klassen mit ihrer Umgebung, wie zum Beispiel dem Dateisystem, dem Netzwerk oder Nutzern interagieren. Das furt zu zwei grosen Problemen. Erstens kann Code, der von der Umgebung abhangt, manchmal nicht voll abgedeckt werden indem einfach nur Sequenzen von Methodenaufrufen generiert werden. Das ist zum Beispiel der Fall, wenn die Ausfuhrung eines Zweigs von dem Inhalt einer Datei abhangt. Zweitens konnen, auch wenn Code, der von der Umgebung abhangt, abgedeckt wird, die generierten Tests unstabil sein, d.h. sie wuden durchlaufen wenn sie generiert werden aber missglucken wenn sie zu einer anderen Zeit ausgefuhrt werden. In dieser Arbeit nutzen wir Bytecodeinstrumentierung um Code automatisch von seinen Umgebungsabhanigkeiten zu trennen, und erweitern das EVOSUITE Javatesterzeugungswerkzeug so, das es als Teil der generierten Aufrufsequenzen explizit den Zustand der Umgebung modifizieren kann. Indem wir eine Prototypimplementierung nutzen, die eine grose Anzahl an Umgebungsinteraktionen handhaben, wie mit dem Dateisystem, Konsoleneingaben und vielen nicht-deterministischen Funktionen der Java Virtual Machine (JVM), haben wir Experimente mit 100 zufallig ausgewahlten Java Projekten von SourceForge durchgefuhrt (dem SF100 corpus). Die Ergebnisse zeigen signifikant bessere Codeabdeckung — in manchen Fallen sogar bis zu +80% / +90%. Daruber hinaus hat unsere Methode die Anzahl unstabiler Tests um mehr als 50% reduziert. |
Year | Venue | Field |
---|---|---|
2015 | Software Engineering & Management | Humanities,Art,Java virtual machine |
DocType | Citations | PageRank |
Conference | 0 | 0.34 |
References | Authors | |
0 | 3 |
Name | Order | Citations | PageRank |
---|---|---|---|
Andrea Arcuri | 1 | 2630 | 92.48 |
Gordon Fraser | 2 | 2625 | 116.22 |
Juan Pablo Galeotti | 3 | 147 | 9.54 |