Evaluating the impact of refactorings on the code comprehension of novices with eye tracking.

Detalhes bibliográficos
Ano de defesa: 2022
Autor(a) principal: COSTA, José Aldo Silva da.
Orientador(a): Não Informado pela instituição
Banca de defesa: Não Informado pela instituição
Tipo de documento: Tese
Tipo de acesso: Acesso aberto
Idioma: eng
Instituição de defesa: Universidade Federal de Campina Grande
Brasil
Centro de Engenharia Elétrica e Informática - CEEI
PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO
UFCG
Programa de Pós-Graduação: Não Informado pela instituição
Departamento: Não Informado pela instituição
País: Não Informado pela instituição
Palavras-chave em Português:
Link de acesso: http://dspace.sti.ufcg.edu.br:8080/jspui/handle/riufcg/29470
Resumo: A compreensao do código é fundamental para a manutenção e evolução do software, por em, pode ser prejudicada por problemas estruturais no código. Para resolver os problemas es- truturais no código e torna-lo mais fácil de ler e entender, os desenvolvedores costumam usar refatoramentos. Um refatoramento e uma técnica disciplinada de reestruturação do código que visa melhorar sua estrutura interna preservando seu comportamento. No entanto, o estado-da-arte sobre o entendimento do impacto de refatoramentos na compreensao do ̃ código necessita de resultados conclusivos e detalhes quantitativos/qualitativos sobre como ́ e o porque de possıveis correlações. Enquanto alguns estudos encontraram um impacto di- ̃ vergente de refatoramentos na compreensão do código, outro descobriu que certos refatora- ́ mentos levaram a introdução de mais problemas estruturais. Com o objetivo de investigar o impacto das refatoramentos na compreensão do código, realizamos três estudos controlados com rastreio ocular: o primeiro sobre o impacto de atomos de confusão clarificados com 32 novatos em Python, o segundo sobre o impacto do refatoramento Extrair Metodo com 32 no- vatos em Java, e o terceiro sobre o impacto das anotac ̧oes ̃ #ifdef com 64 majoritariamente novatos na linguagem C. Alem de usar varios criterios como tempo, numero de tentativas ́ e opiniões, medimos o esforço visual dos sujeitos com rastreamento ocular por meio da ̃ duração da fixação, contagem de fixações e contagem de regressões. Em nossos resultados, ̃ a versão de código clarificada de um dos átomos reduziu o tempo em 38,6% e o número ́ de tentativas de resposta em 28%. Alem disso, observamos 47,3% menos regressões hori- zontais na região do átomo facilitando sua leitura. O uso do refatoramento Extrair Método apresentou uma redução significativa no tempo de duas tarefas, que variou de 70% a 78,8%. Observamos um aumento na acuracia de três tarefas, que variou de 20% a 34,4%. Os su- jeitos resolveram essas tarefas com o Extrair Método voltando visualmente no código com ́ 74,4% a 84,6 % menos frequência comparado ao Inline Método. No contexto das anotações #ifdef, um dos refatoramentos adiciona uma variável extra e duas linhas extras de código, o que e apenas um pequeno impacto na métrica Linhas de Código (LOC), mas apresentou reduções na região modificada em 46,9% no tempo, 44,7% na duração da fixação, 48,4% na contagem de fixação e 60,5% na contagem de regressões. Esses resultados contribuem para conscientizar educadores sobre certos refatoramentos e seu potencial para facilitar ou difi- cultar a compreensão de código de novatos em Python, Java e C. Praticantes e designers de linguagem de programação devem ser mais cuidadosos ao usar ou propor refatoramentos que possam prejudicar a capacidade dos novatos de entender o código. Para os pesquisadores, esses resultados mostram o potencial das métricas visuais para revelar um impacto de refa- toramentos que não podem ser capturados por métricas estáticas de código. linguagem de programação devem ser mais cuidadosos ao usar ou propor refatoramentos que possam perjudicar a capacidade dos novatos de entender o código. Para los pesquisadores, esses resultados mostram o potencial das métricas visuais para revelar um impacto de refa- toramentos que não podem ser capturados por métricas estáticas de código.