SampleFix: Lernen, funktional vielfältige Fixes zu generieren

Automatische Programmreparatur birgt das Potenzial, die Produktivität von Programmierern während des Softwareentwicklungsprozesses erheblich zu steigern und die Richtigkeit von Software im Allgemeinen zu verbessern. Neuere Fortschritte im Maschinelles Lernen, Deep Learning und der Natural Language Processing (NLP) haben die Hoffnung neu entfacht, den Prozess der Reparatur von Programmen letztendlich vollständig zu automatisieren. Allerdings sind bisherige Ansätze, die darauf abzielen, eine einzelne Korrektur vorherzusagen, aufgrund der Unsicherheit über die tatsächliche Absicht des Programmierers anfällig für Misserfolge. Daher schlagen wir ein generatives Modell vor, das eine Verteilung über potenzielle Korrekturen lernt. Unser Modell ist als tiefes bedingtes Variationsautoencoder formuliert, der effizient Korrekturen für ein gegebenes fehlerhaftes Programm erzeugen kann. Um vielfältige Lösungen sicherzustellen, schlagen wir einen neuen Regularisierer vor, der Vielfalt in einem semantischen Einbettungsraum fördert. Unsere Auswertungen bei gängigen Programmfehlern zeigen erstmals die Erzeugung vielfältiger Korrekturen und starke Verbesserungen gegenüber den bislang besten Ansätzen durch die Reparatur von bis zu 45 % der fehlerhaften Programme. Zudem zeigen wir, dass für 65 % der reparierten Programme unser Ansatz in der Lage war, mehrere Programme mit unterschiedlichen Funktionalitäten zu generieren.