Please use this identifier to cite or link to this item: http://dspace.sti.ufcg.edu.br:8080/jspui/handle/riufcg/1712
Full metadata record
DC FieldValueLanguage
dc.creator.IDSOUSA, R. R.pt_BR
dc.creator.Latteshttp://lattes.cnpq.br/7392223184852549pt_BR
dc.contributor.advisor1SOARES, Gustavo Araújo.-
dc.contributor.advisor1IDSOARES, G.pt_BR
dc.contributor.advisor1Latteshttp://lattes.cnpq.br/6215732726947926pt_BR
dc.contributor.advisor2GHEYI, Rohit.-
dc.contributor.advisor2IDGHEYI, R.pt_BR
dc.contributor.advisor2Latteshttp://lattes.cnpq.br/2931270888717344pt_BR
dc.description.resumoFerramentas como ErrorProne, ReSharper e PMD ajudam os programadores a detectar e/ou remover automaticamente vários padrões de códigos suspeitos, possíveis bugs ou estilo de código incorreto. Essas regras podem ser expressas como quick fixes que detectam e reescrevem padrões de código indesejados. No entanto, estender seus catálogos de regras é complexo e demorado. Nesse contexto, os programadores podem querer executar uma edição repetitiva automaticamente para melhorar sua produtividade, mas as ferramentas disponíveis não a suportam. Além disso, os projetistas de ferramentas podem querer identificar regras úteis para automatizarem. Fenômeno semelhante ocorre em sistemas de tutoria inteligente, onde os instrutores escrevem transformações complicadas que descrevem "falhas comuns" para consertar submissões semelhantes de estudantes a tarefas de programação. Nesta tese, apresentamos duas técnicas. REFAZER, uma técnica para gerar automaticamente transformações de programa. Também propomos REVISAR, nossa técnica para aprender quick fixes em repositórios. Nós instanciamos e avaliamos REFAZER em dois domínios. Primeiro, dados exemplos de edições de código dos alunos para corrigir submissões de tarefas incorretas, aprendemos transformações para corrigir envios de outros alunos com falhas semelhantes. Em nossa avaliação em quatro tarefas de programação de setecentos e vinte alunos, nossa técnica ajudou a corrigir submissões incorretas para 87% dos alunos. No segundo domínio, usamos edições de código repetitivas aplicadas por desenvolvedores ao mesmo projeto para sintetizar a transformação de programa que aplica essas edições a outros locais no código. Em nossa avaliação em 56 cenários de edições repetitivas de três grandes projetos de código aberto em C#, REFAZER aprendeu a transformação pretendida em 84% dos casos e usou apenas 2.9 exemplos em média. Para avaliar REVISAR, selecionamos 9 projetos e REVISAR aprendeu 920 transformações entre projetos. Atuamos como projetistas de ferramentas, inspecionamos as 381 transformações mais comuns e classificamos 32 como quick fixes. Para avaliar a qualidade das quick fixes, realizamos uma survey com 164 programadores de 124 projetos, com os 10 quick fixes que apareceram em mais projetos. Os programadores suportaram 9 (90%) quick fixes. Enviamos 20 pull requests aplicando quick fixes em 9 projetos e, no momento da escrita, os programadores apoiaram 17 (85%) e aceitaram 10 delas.pt_BR
dc.publisher.countryBrasilpt_BR
dc.publisher.departmentCentro de Engenharia Elétrica e Informática - CEEIpt_BR
dc.publisher.programPÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃOpt_BR
dc.publisher.initialsUFCGpt_BR
dc.subject.cnpqCiência da Computaçãopt_BR
dc.titleLearning syntactic program transformations from examples.pt_BR
dc.date.issued2018-08-02-
dc.description.abstractTools such as ErrorProne, ReSharper, and PMD help programmers by automatically detecting and/or removing several suspicious code patterns, potential bugs, or instances of bad code style. These rules could be expressed as quick fixes that detect and rewrite unwanted code patterns. However, extending their catalogs of rules is complex and time-consuming. In this context, programmers may want to perform a repetitive edit into their code automatically to improve their productivity, but available tools do not support it. In addition, tool designers may want to identify rules helpful to be automated. A similar phenomenon appears in intelligent tutoring systems where instructors have to write cumbersome code transformations that describe “common faults” to fix similar student submissions to programming assignments. In this thesis, we present two techniques. REFAZER, a technique for automatically generating program transformations. We also propose REVISAR, our technique for learning quick fixes from code repositories. We instantiate and evaluate REFAZER in two domains. First, given examples of code edits used by students to fix incorrect programming assignment submissions, we learn program transformations that can fix other students’ submissions with similar faults. In our evaluation conducted on four programming tasks performed by seven hundred and twenty students, our technique helped to fix incorrect submissions for 87% of the students. In the second domain, we use repetitive code edits applied by developers to the same project to synthesize a program transformation that applies these edits to other locations in the code. In our evaluation conducted on 56 scenarios of repetitive edits taken from three large C# open-source projects, REFAZER learns the intended program transformation in 84% of the cases and using only 2.9 examples on average. To evaluate REVISAR, we select 9 projects, and REVISAR learns 920 transformations across projects. We acted as tool designers, inspected the most common 381 transformations and classified 32 as quick fixes. To assess the quality of the quick fixes, we performed a survey with 164 programmers from 124 projects, showing the 10 quick fixes that appeared in most projects. Programmers supported 9 (90%) quick fixes. We submitted 20 pull requests applying our quick fixes to 9 projects and, at the time of the writing, programmers supported 17 (85%) and accepted 10 of them.pt_BR
dc.identifier.urihttp://dspace.sti.ufcg.edu.br:8080/jspui/handle/riufcg/1712-
dc.date.accessioned2018-09-13T20:44:41Z-
dc.date.available2018-09-13-
dc.date.available2018-09-13T20:44:41Z-
dc.typeTesept_BR
dc.subjectProgram Transformationpt_BR
dc.subjectQuick Fixpt_BR
dc.subjectProgram Synthesispt_BR
dc.subjectTotoring Systemspt_BR
dc.subjectRefactoringpt_BR
dc.rightsAcesso Abertopt_BR
dc.creatorSOUSA, Reudismam Rolim de.-
dc.publisherUniversidade Federal de Campina Grandept_BR
dc.languageengpt_BR
dc.description.sponsorshipCapespt_BR
dc.identifier.citationSOUSA, R. R. de. Learning syntactic program transformations from examples. 2018. 159 f. Tese (Doutorado em Ciência da Computação) – Programa de Pós-Graduação em Ciência da Computação, Centro de Engenharia Elétrica e Informática, Universidade Federal de Campina Grande, Paraíba, Brasil, 2018. Disponível em: http://dspace.sti.ufcg.edu.br:8080/jspui/handle/riufcg/1712pt_BR
Appears in Collections:Doutorado em Ciência da Computação.

Files in This Item:
File Description SizeFormat 
REUDISMAM ROLIM DE SOUSA – TESE (PPGCC) 2018.pdfReudismam Rolim de Sousa - Tese (PPGCC) 2018.2.12 MBAdobe PDFView/Open


Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.