Learning from failure : a history based lightweight test prioritization technique connecting software changes to test failures Regressionstests sind in der heutigen Softwareindustrie weit verbreitete Praxis um die Qualität eines Softwareprodukts abzusichern. Dabei leiten Entwickler von den gestellten Anforderungen Testfälle ab und führen diese wiederholt aus um sicherzustellen dass ihre Änderungen die bereits existierende Funktionalität nicht negativ beeinträchtigen. Steigt die Größe und Komplexität der Software und ihrer Testsuite so wird die Feedbackschleife der Testausführungen länger und mindert die Produktivität der Entwickler: Sie warten länger auf das Testergebnis und die Fehlerbehebung gestaltet sich umso schwieriger je länger die Ursache zurückliegt. Um die Feedbackschleife zu verkürzen ändern Testpriorisierungs Algorithmen die Reihenfolge der Testfälle sodass Testfälle die mit hoher Wahrscheinlichkeit fehlschlagen zuerst ausgeführt werden. Der vorliegende Bericht beschäftigt sich mit der Frage nach der Effizienz von Testplänen welche aus öffentlich einsehbaren Daten rekonstruierbar sind und welche anwendbaren Priorisierungs Techniken die effizienteste Testreihenfolge in Bezug auf APFD hervorbringen. Zu diesem Zweck werden 6200 Testsitzungen aus den Logdateien von Travis CI einem oft verwendeten Dienst für Continuous Integration und über 62000 Änderungslisten rekonstruiert. Auf dieser Grundlage wird die Effizienz der derzeitigen Testpläne bewertet als auch solcher die aus der Neupriorisierung durch leichtgewichtige verlaufsbasierte Algorithmen hervorgehen. Zudem schlägt der vorliegende Bericht eine neue Gruppe von Ansätzen vor die Testfehlschläge und Softwareänderungen mit Hilfe einer Matrix in Bezug setzt. Da die beobachteten Testreihenfolgen nur 30% APFD erzielen liegt wesentliches Potential für Optimierung vor. Dabei besticht die Vorhersagekraft der unmittelbar vorangegangen Testfehlschläge: einfache Heuristiken wie das Wiederholen von Tests welche kürzlich fehlgeschlagen sind führen zu Testplänen mit einer Effizienz von 95% APFD. Matrix basierte Ansätze erreichen eine Fehlererkennungsrate von bis zu 92.5% APFD. Im Gegensatz zu den bisher bekannten Ansätzen sind die matrix basierten Techniken auch über den Zweck der Testpriorisierung hinaus nützlich und sind in der Softwarewartung anwendbar. Zusätzlich werden die Ergebnisse der vorliegenden Studie für Continuous Integration Systeme im Kontext integrierter Entwicklungsumgebungen validiert indem ein Tool für Continuous Testing um Testpriorisierung erweitert wird. Dies führt zu neuen Forschungsfragen. Die Untersuchungsergebnisse sind geeignet die Einführung von Continuous Testing zu befördern und untermauern dass Werkzeuge der Testpriorisierung für produktive Softwareentwicklung essenziell sind. Regression testing is a widespread practice in todays software industry to ensure software product quality. Developers derive a set of test cases and execute them frequently to ensure that their change did not adversely affect existing functionality. As the software product and its test suite grow the time to feedback during regression test sessions increases and impedes programmer productivity: developers wait longer for tests to complete and delays in fault detection render fault removal increasingly difficult. Test case prioritization addresses the problem of long feedback loops by reordering test cases such that test cases of high failure probability run first and test case failures become actionable early in the testing process. We ask given test execution schedules reconstructed from publicly available data to which extent can their fault detection efficiency improved and which technique yields the most efficient test schedules with respect to APFD To this end we recover regression 6200 test sessions from the build log files of Travis CI a popular continuous integration service and gather 62000 accompanying changelists. We evaluate the efficiency of current test schedules and examine the prioritization results of state of the art lightweight history based heuristics. We propose and evaluate a novel set of prioritization algorithms which connect software changes and test failures in a matrix like data structure. Our studies indicate that the optimization potential is substantial because the existing test plans score only 30% APFD. The predictive power of past test failures proves to be outstanding: simple heuristics such as repeating tests with failures in recent sessions result in efficiency scores of 95% APFD. The best performing matrix based heuristic achieves a similar score of 92.5% APFD. In contrast to prior approaches we argue that matrix based techniques are useful beyond the scope of effective prioritization and enable a number of use cases involving software maintenance. We validate our findings from continuous integration processes by extending a continuous testing tool within development environments with means of test prioritization and pose further research questions. We think that our findings are suited to propel adoption of (continuous) testing practices and that programmers toolboxes should contain test prioritization as an existential productivity tool.