Abstract-Automatic program transformation verktyg kan vara värdefulla för programmerare för att hjälpa dem med refaktoring uppgifter, och för Computer Science studenter i form av handledningssystem som föreslår reparationer till programmeringsuppgifter. Att manuellt skapa kataloger över transformationer är dock komplext och tidskrävande. I den här artikeln presenterar vi REFAZER, en teknik för automatiskt lärande programomvandlingar. REFAZER bygger på observationen att kodredigeringar utförda av utvecklare kan användas som input-output exempel för lärande program transformationer. Exempelredigeringar kan dela samma struktur men involverar olika variabler och underuttryck, som måste generaliseras i en omvandling på rätt abstraktionsnivå. För att lära sig transformationer, REFAZER utnyttjar state-of-the-art programmering-by-example-metodik med hjälp av följande nyckelkomponenter: a) ett nytt domänspecifika språk (DSL) för att beskriva programtransformationer, b) domänspecifika deduktiva algoritmer för att effektivt syntetisera transformationer i DSL, och c) funktioner för rankning av syntetiserade transformationer. Vi omedelbart och utvärdera REFAZER inom två områden. För det första, givet exempel på kodredigeringar som används av studenter för att rätta felaktiga inlämningar av programmeringsuppgifter, lär vi oss programomvandlingar som kan rätta andra studenters inlämningar med liknande fel. I vår utvärdering utförd på 4 programmeringsuppgifter utförda av 720 studenter, vår teknik hjälpte till att fixa felaktiga inlämningar för 87% av studenterna. I den andra domänen använder vi repetitiva kodredigeringar som tillämpas av utvecklare till samma projekt för att syntetisera en programomvandling som tillämpar dessa redigeringar på andra platser i koden. I vår utvärdering utförd på 56 scenarier av repetitiva redigeringar tagna från tre stora C# open-source-projekt, REFAZER lär sig den avsedda programomvandlingen i 84% av fallen med bara 2,9 exempel i genomsnitt.
Refazer lär sig syntaktiska programomvandlingar från exempel REF.
Learning Syntactic Program Transformations from Examples
{'venue': '2017 IEEE/ACM 39th International Conference on Software Engineering (ICSE)', 'journal': '2017 IEEE/ACM 39th International Conference on Software Engineering (ICSE)', 'mag_field_of_study': ['Computer Science']}