Refactoring and what else? an exploratory study on floss refactoring. - MOREIRA, Jaziel Silva. (2019)
Refatoramento é uma atividade que visa melhorar a qualidade do design e a legibilidade do código de um sistema sem alterar seu comportamento externo. Refatoramentos são responsáveis por quase 30% de todas as edições de um software. Embora os refatoramentos sejam edições que preservam o comportamento, estudos mostram que desenvolvedores tendem a aplicar mudanças comportamentais intencionais ao lado der refatoramentos (flossrefactoring). Floss-refactorings são conhecidos por serem propensos a erros e requererem revisão de código. No entanto, pouco foi feito para entender como os desenvolvedores relacionam refatoramentos às edições extras. Deste modo, neste trabalho propomos uma estratégia para a extração de dados de floss-refactorings, que pode ser usada para extrair informações detalhadas sobre os refatoramentos e edições extras aplicadas ao longo do histórico de versões do repositório de um projeto Java. Além disso, para entender melhor como os desenvolvedores realizam floss-refactorings no mundo real, conduzimos uma investigação empírica para descobrir como as edições extras são aplicadas com base nos refatoramentos encontrados em um commit. Nós analisamos os commits de 45 repositórios em que as edições de refatoramentos foram aplicadas juntamente com edições extras.Nossos resultados mostraram que, dependendo do refatoramento realizado, há mudanças na probabilidade de algumas edições extras serem aplicadas. Por rexemplo, a introdução de novos métodos é mais comum quando um Extract Method ou um Rename Method é executado.Outras edi ções, como a remoção de um método, a introdução de um novo atributo em uma classe ou mesmo edições específicas dentro de métodos, também apresentaram mudanças significativas em sua probabilidade. Além disso,14,4% das edições extras foram realizadas dentro de entidades refatoradas, das quais as entidades alteradas mais comuns foram Invocação de Método, If Statement, Declaração da Variável, Atribuição e Statement de Retorno. No entanto, a probabilidade de cada tipo de entidade específica a ser alterada varia dependendo do refatoramento executado. Em geral, os padrões de relacionamento entre refatoramentos e edições extras encontrados neste trabalho podem ser usados para guiar a revisão de código, ajudar os desenvolvedores a evitar a iintrodução de faltas relacionadas a floss-refactorings, e orientar outras pesquisas relacionadas a refatoramentos.