Use este identificador para citar o ir al link de este elemento: http://hdl.handle.net/1843/52752
Tipo: Tese
Título: Mining refactorings from version histories: studies, tools, and applications
Autor(es): Danilo Ferreira e Silva
primer Tutor: Marco Túlio de Oliveira Valente
primer miembro del tribunal : Rohit Gheyi
Segundo miembro del tribunal: André Cavalcante Hora
Tercer miembro del tribunal: Eduardo Magno Lages Figueiredo
Cuarto miembro del tribunal: Paulo Henrique Monteiro Borba
Resumen: Refactoring is an important aspect of software development and a key factor to understand software evolution. As such, researchers often report and discuss refactoring practice on real software projects. Unfortunately, empirical studies on refactoring are often hindered by the difficulty of obtaining reliable information of refactoring activity, and many questions remain open. In this thesis, we first investigate an overarching question: why do developers refactor? To this end, we developed two large-scale empirical studies that rely on mining refactorings from version histories. Initially, we investigated the relationship between Extract Method refactoring and code reuse. After analyzing over 10,000 revisions of 10 open source systems, we found evidence that, in 56.9% of the cases, Extract Method is motivated by code reuse. Next, we investigated the motivations for refactorings applied to open source systems based on feedback from the developers who performed the refactorings. By applying thematic analysis on the collected responses, we compiled a catalogue of 44 distinct motivations for 12 well-known refactoring types. We found that refactoring activity is mainly driven by changes in the requirements and much less by code smells. Notably, Extract Method is the most versatile refactoring operation, serving 11 different purposes. Additionally, we found evidence that the IDE used by the developers affects the adoption of automated refactoring tools. As a second line of research, we propose RefDiff, a novel approach to mine refactorings from version histories that supports multiple programming languages and offers high precision and recall. Our tool leverages existing techniques and introduces a novel refactoring detection algorithm that relies on the Code Structure Tree (CST)—a simple yet powerful representation of the source code that abstracts away the specificities of particular programming languages—and on a code similarity metric based on TF-IDF technique. Despite its language-agnostic design, our evaluation shows that RefDiff’s precision (96%) and recall (80%) are on par with state-of-the-art refactoring detection approaches specialized in the Java language.
Abstract: Refatoração de código é uma prática importante no desenvolvimento de sistemas e um fator essencial para entender a evolução de um software. Sendo assim, pesquisadores frequentemente reportam e discutem a prática de refatoração em sistemas reais. Infelizmente, estudos empíricos sobre refatoração são frequentemente limitados pela dificuldade de se obter informações confiáveis sobre a atividade de refatoração e muitas questões permanecem em aberto. Nesta tese, primeiro investigamos uma importante questão: por que desenvolvedores refatoram? Para esse fim, desenvolvemos dois estudos empíricos em larga escala, baseados na mineração de refatorações em históricos de versões. Inicialmente, investigamos a relação entre a refatoração Extrair Método e reúso de código. Após analizar mais de 10 mil revisões de 10 sistemas, encontramos evidências de que em 56,9% dos casos tal refatoração é motivada pelo reúso de código. Em seguida, investigamos as motivações para refatorações encontradas em sistemas de código aberto com base em respostas dos próprios desenvolvedores que as aplicaram. Como resultado, compilamos um catálogo com 44 motivações distintas para 12 tipos de refatorações. Tal catálogo revela que o esforço de refatoração é mais direcionado pela necessidade de evolução do sistema do que pela resolução de problemas de projeto conhecidos como code smells. Notadamente, Extrair Método é a refatoração mais versátil, servindo a 11 propósitos diferentes. Em uma segunda linha de pesquisa, nós propomos RefDiff, uma nova ferramenta para mineração de refatorações em histórico de versões, com suporte a múltiplas linguagens de programação e alta precisão. Nossa ferramenta introduz um algoritmo de detecção de refatorações baseado na Code Structure Tree (CST)—uma representação do código fonte que abstrai as particularidades das linguagens de programação—e em uma métrica de similaridade de código baseada na técnica TF-IDF. Apesar do seu projeto multilinguagem, nossa avaliação revelou que nossa ferramenta tem precisão (96%) e revocação (80%) equivalentes ao estado da arte em ferramentas especializadas na linguagem Java.
Asunto: Computação – Teses
Refatoração de software
Engenharia de Software
Evolução de software
Mineração de repositórios de software.
Idioma: eng
País: Brasil
Editor: Universidade Federal de Minas Gerais
Sigla da Institución: UFMG
Departamento: ICX - DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO
Curso: Programa de Pós-Graduação em Ciência da Computação
Tipo de acceso: Acesso Aberto
URI: http://hdl.handle.net/1843/52752
Fecha del documento: 6-feb-2020
Aparece en las colecciones:Teses de Doutorado

archivos asociados a este elemento:
archivo Descripción TamañoFormato 
phd_thesis_danilo.pdf3.24 MBAdobe PDFVisualizar/Abrir


Los elementos en el repositorio están protegidos por copyright, con todos los derechos reservados, salvo cuando es indicado lo contrario.