1 |
[pt] RELEVANDO FATORES INTERATIVOS NA DEGRADAÇÃO DO DESIGN DE SOFTWARE / [en] REVEALING INTERACTING FACTORS IN DECAY OF SOFTWARE DESIGNDANIEL JOSE BARBOSA COUTINHO 28 December 2021 (has links)
[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.
|
2 |
[pt] REVELANDO AS FACETAS SOCIAIS E TÉCNICAS DA DEGRADAÇÃO DO DESIGN NA REVISÃO DE CÓDIGO MODERNA / [en] UNVEILING SOCIAL AND TECHNICAL FACETS OF DESIGN DEGRADATION IN MODERN CODE REVIEWANDERSON GONCALVES UCHOA 08 October 2021 (has links)
[pt] O design de software é uma preocupação fundamental na revisão de código, por meio da qual os desenvolvedores discutem ativamente e melhoram cada mudança de software. No entanto, a revisão de código é uma tarefa colaborativa influenciada por aspectos técnicos e sociais. Consequentemente,
esses aspectos podem desempenhar um papel fundamental em como o design de software se degrada. Eles podem contribuir para acelerar ou reverter a degradação do design durante o processo de revisão de cada mudança. No entanto, há pouco entendimento sobre: (i) o impacto da revisão do código
e suas práticas na degradação do design ao longo do tempo; e (ii) em que medida os aspectos sociais e técnicos estão relacionados com a redução ou aumento da degradação do design. Abordamos essas limitações motivadas por dois objetivos. Nosso primeiro objetivo é fornecer uma caracterização
de como as revisões de código modernas afetam a degradação do design durante a manutenção do software. Consideramos vários aspectos técnicos e sociais para estudar o impacto das revisões de código, utilizando técnicas de aprendizado de máquina. Nosso segundo objetivo é explorar o papel dos
aspectos técnicos e sociais em distinguir e predizer mudanças de design (não) impactantes durante as revisões de código. Uma mudança de design é considerada impactante quando varia a densidade e a diversidade dos sintomas de degradação (ou seja, cheiros de código). Esses objetivos foram
abordados em dois estudos empíricos. Nosso primeiro estudo relata uma caracterização do impacto das revisões de código na evolução dos sintomas de degradação ao longo de cada revisão de código. Também levamos em consideração quando havia um objetivo explícito ou discussões sobre design
de software. Nosso segundo estudo relata uma análise dos aspectos técnicos e sociais que influenciam as mudanças ao longo de todas as revisões em uma única revisão de código. Então, pudemos observar o papel dos aspectos sociais em distinguir e predizer mudanças impactantes no design. Nossos resultados
mostram que a maioria das revisões de código tem pouco ou nenhum impacto na degradação, mesmo com discussões explícitas de design. Longas discussões e uma alta taxa de discordância dos revisores aumentam o risco de degradação. Os aspectos sociais e técnicos são capazes de distinguir mudanças de design (não) impactantes. Em resumo, nossos resultados nos forneceram uma melhor compreensão dos aspectos influentes que nos ajudam a derivar diretrizes para mitigar a degradação durante as revisões de código. Nossos resultados também fornecem insights para projetar novas ferramentas de revisão de
código, também capazes de alertar os desenvolvedores com antecedência sobre o impacto prejudicial do design ao longo das revisões de código. / [en] Software design is a key concern in code review through which developers actively discuss and improve each software change. Nevertheless, code review is a collaborative task influenced by technical and social aspects. Consequently, these aspects can play a key role in how software design degrades. They can
contribute to accelerating or reversing design degradation during the process of each single change s review. However, there is little understanding about: (i) the impact of code review and their practices on design degradation over time; and (ii) to what extent social and technical aspects are related to the reduction or increase of design degradation.We addressed these limitations driven by two goals. Our first goal is to provide a characterization of how modern code reviews impact design degradation during software maintenance. We consider various technical and socials aspects to study the code reviews impact. Our second goal is to explore the role of technical and social aspects in distinguishing and predicting (un)impactful design changes during code reviews, using machine learning techniques. A design change is considered impactful when it varies the density and diversity of degradation symptoms (i.e., code smells). These goals were addressed with two empirical studies. Our first study reports a characterization of the impact of code reviews on the evolution of degradation symptoms along each code review. We also took into consideration when there was an explicit goal or discussions around software design. Our second study
reports an analysis of technical and social aspects influencing changes along all the revisions within a single code review. Then, we could observe the role of social aspects in distinguishing and predicting design impactful changes. Our results show that the majority of code reviews have little or no impact on
degradation, even with explicit design discussions. Long discussions and a high rate of reviewers disagreement increase the risk of degradation. Both social and technical aspects are able to distinguish design (un)impactful changes. In summary, our results provided us with a better understanding of influential aspects that help us in deriving guidelines to mitigate degradation during code
reviews. Our results also provide insights to design a new code review tool salso able to warn developers early about the harmful design impact along code reviews.
|
Page generated in 0.0321 seconds