[pt] Desenvolvedores realizam mudanças de código constantemente durante
a vida de um projeto de software. Essas mudanças podem induzir a degradação
progressiva do design. A degradação do design pode ser reduzida ou
acelerada por fatores que interagem em cada mudança. Esses fatores podem
variar desde uma mudança ou ação de reparo específica – e.g., refatorações
– até a maneira como os desenvolvedores contribuem e discutem mudanças.
Entretanto, estudos anteriores não exploram como esses fatores interagem e
influenciam na degradação do design. Eles apenas focam em alguns fatores e
tendem a os investigar em isolamento. Estudar os fatores em isolamento pode
não explicar adequadamente qual é o conjunto mais relevante de interações
entre fatores e qual sua influência na degradação do design. Isso pode indicar
que abordagens existentes para evitar ou mitigar a degradação do design são
incompletas, já que elas não consideram interações entre fatores que podem
ser relevantes. Portanto, essa dissertação relata uma investigação que almeja
aumentar a compreensão sobre como uma ampla gama de interações entre fatores
pode afetar a degradação do design, para que consequentemente possam
ser investigadas práticas efetivas para evitar ou mitigar esse fenômeno. Para
tal fim, nós realizamos uma análise aprofundada buscando preencher lacunas
no conhecimento existente sobre dois tipos de fatores: fatores relacionados ao
processo (i.e. relacionados às mudanças e seus resultados produzidos) e fatores
relacionados ao desenvolvedor (i.e. relacionados ao desenvolvedor trabalhando
nas mudanças). Nós focamos em analisar os efeitos de possíveis interações entre
os fatores previamente mencionados e uma série de sub-fatores, no que diz
respeito como essas interações afetam módulos que sofreram diferentes níveis
de degradação. Por exemplo, nós observamos que: (1) individualmente, tanto
o sub-fator relacionado ao desenvolvedor que representa um desenvolvedor novato
(que está contribuindo pela primeira vez), quanto o sub-fator relacionado
ao processo que representa tamanho de uma mudança, não se mostraram relacionados
a efeitos negativos na qualidade de código das classes alteradas.
Porém, analisando interações entre fatores, nós observamos que mudanças em
que esses dois fatores interagem tendem a ter um efeito negativo no código,
causando degradação. Interessantemente, esse comportamento não se alterou
mesmo quando mudança foi introduzida através de uma pull request (o que
frequentemente inicia um processo de revisão de código), (2) surpreendentemente,
refatorações de extração frequentemente não tem um efeito positivo
na qualidade do código, enquanto, em contrapartida, as refatorações de movimentação
foram predominantemente positivas. Nós também discutimos como
esses achados apresentados na dissertação podem ajudar desenvolvedores e pesquisadores na melhoria de suas diretrizes sobre como evitar e monitorar a degradação do design. / [en] Developers constantly perform code changes throughout the lifetime of
a project. These changes may induce the introduction of design decay over
time. Design decay may be reduced or accelerated by interacting factors that
underlie each change. These factors may come from specific actions of change
or repair – e.g., refactorings – to how developers contribute and discuss the
changes. However, existing studies do not explain how these factors interact
and influence design decay. They solely tend to focus on a few types of
factors, and often consider them in isolation. Interactions between factors
may cause different outcomes than those previously studied. Studying factors
in isolation may not properly explain what are the most relevant set of
interacting factors that influence design decay. This may indicate that existing
approaches to avoid or mitigate design decay are misleading since they do not
consider potentially relevant interactions between various factors. Thus, this
dissertation reports an investigation that aims to increase the understanding
of how a wide range of interacting factors can influence design decay in
order to facilitate the investigation of which practices can be used to avoid
or mitigate design decay. To this end, we performed an in-depth analysis to
fill knowledge gaps on two types of factors: process-related (i.e., related to
changes and their produced outcomes) and developer-related (i.e., related to
the developer working on the changes) factors. We focused on analyzing the
effects of potential interactions between the aforementioned factors and 12
sub-factors with regards to how they affected modules with different levels
of decay. We observed diverging decay patterns in these modules. Our results
indicate that both types of factors can be used to distinguish between different
decay levels in classes. We have also observed that: (1) individually, the
developer-related subfactor that represented first-time contributors, as well as the process-related one that represented size of the changes, did not exert negative effects on the changed classes. However, when analyzing specific factor interactions, we saw that changes where both of these factors interacted tended to have a negative effect and led to decay. Interestingly, this behaviour did not alter even when the change was introduced via pull request (which usually triggers a code review process); (2) surprisingly, extraction-type refactorings often do not have a positive effect on code quality, while, by contrast, move refactorings were mostly positive. We also discuss how these findings in this dissertation can aid developers and researchers in improving their guidelines for the avoidance and monitoring of design decay.
Identifer | oai:union.ndltd.org:puc-rio.br/oai:MAXWELL.puc-rio.br:56818 |
Date | 28 December 2021 |
Creators | DANIEL JOSE BARBOSA COUTINHO |
Contributors | ALESSANDRO FABRICIO GARCIA, ALESSANDRO FABRICIO GARCIA |
Publisher | MAXWELL |
Source Sets | PUC Rio |
Language | English |
Detected Language | English |
Type | TEXTO |
Page generated in 0.0031 seconds