Agradeço aos meus familiares, amigos e professores! A presença de vocês foi indispensável para a realização desse sonho. Agradeço em especial:A Deus, por permitir a conclusão desta etapa.Aos meus familiares, pelo incentivo durante este curso de mestrado. Especialmente, aos meus pais Bernadete e José, e à minha irmã Aline, por todo o carinho, apoio e conselhos recebidos.Aos meus amigos, pela amizade, suporte e por todos os momentos incríveis que passamos juntos. Em especial aos meus amigos do Aserg, pela parceria, amizade e aprendizado.Aos meus companheiros de trabalho da Studio Sol, pelo companheirismo e contribuição no meu crescimento profissional e pessoal.Ao meu orientador, Prof. Marco Tulio Valente, pela paciência, confiança e todos os ensinamentos passados durante esse período.
Aos meus professores, pelo incentivo e conhecimento compartilhado durante o mestrado, graduação e ensino básico.Aos membros da banca, Prof. Ingrid Nunes e Prof. André Hora, pela disponibilidade em participar deste trabalho.Ao DCC/UFMG, FAPEMIG e CNPq, pelo suporte financeiro e acadêmico.vi "Great things are done by a series of small things brought together."(Vincent Van Gogh) vii
ResumoRevisão do código é uma importante prática no desenvolvimento de software moderno. Além de detectar falhas, revisão de código contribui para a qualidade do código e transferência de conhecimento. No entanto, revisão do código leva tempo e exige uma análise detalhada e demorada de diffs textuais. Particularmente, detectar refatorações durante as revisões não é uma tarefa trivial, uma vez que as refatorações não são representadas em diffs. Nesta dissertação, nós inicialmente estendemos RefDiff -uma ferramenta de detecção de refatoração multilinguagem -para identificar refatorações na linguagem de programação Go. Nossa extensão-chamada RefDiff4Go-detecta 13 tipos de refatoração e obteve uma precisão de 92% e um recall de 80% em uma avaliação com seis projetos de código aberto populares. Em seguida, como nossa principal contribuição, nós apresentamos RAID: uma ferramenta de diff inteligente que identifica atividades de refatoração e instrumenta os diffs textuais-particularmente, os diffs fornecidos pelo GitHub-com informações de atividades de refatoração. Nosso objetivo é aliviar o esforço cognitivo associado a revisões de código, detectando automaticamente as operações de refatoração incluídas nas solicitações de pull requests. Além de propor uma arquitetura para o RAID, implementamos um plug-in para o navegador Chrome que suporta nossa solução. Também avaliamos RAID em um experimento de campo por três meses, quando oito desenvolvedores profissionais usaram nossa ferramenta em quatro projetos Go. Concluímos que RAID reduz o esforço cognitivo necessário para detectar e revisar atividades de refatoração em diffs textuais. Particularmente, RAID também reduz o número de linhas necessárias para revisar tais operações. Por exemplo, o número médio de linhas a serem revisadas diminuiu de 14,5 para 2 linhas no caso de refatorações envolvendo movimentação e de 113 p...