Assessing the evolution of complex methods: a multi-language study

Carregando...
Imagem de Miniatura

Título da Revista

ISSN da Revista

Título de Volume

Editor

Universidade Federal de Minas Gerais

Descrição

Tipo

Dissertação de mestrado

Título alternativo

Avaliando a evolução de métodos complexos: um estudo multilíngue

Primeiro orientador

Membros da banca

Marco Túlio de Oliveira Valente
Eduardo Magno Lages Figueiredo

Resumo

Over time, software systems tend to increase complexity and become harder to maintain. Despite the drawbacks of code complexity are well-known, complex code is present in most real software projects. Here, an important question arises: why, with all the advice out there against it, do we continue to end up with complex methods? Unfortunately, code complexity is typically assessed for single programming languages (often Java), reducing the generality of findings. Thus, assessing how and why complex code evolves in multiple programming languages is fundamental to better understand the similarities and differences among the languages. In this dissertation, we provide a multi-language empirical study to assess the evolution of complex methods and a survey study to better understand developers’ perceptions. We analyze 1,000 complex methods of 50 popular projects written in JavaScript, Python, Java, C++, and C# and we perform a survey with over 70 developers, including developers from large companies, like Google, Facebook, and Apple. We find that programming language plays an important role in the study of code complexity and that complex methods are not homogeneous in the operations they perform. The developers’ perception of complexity is subjective and varies per programming language. Moreover, developers may deliberately avoid refactoring complex code due to several reasons, including code stability, lack of priority, and refactoring risk. We conclude by discussing insights for researchers and practitioners.

Abstract

Ao longo do tempo, os sistemas de software tendem a aumentar a complexidade e se tornarem mais difíceis de manter. Apesar das desvantagens da complexidade em código serem bem conhecidas, código complexo está presente na maioria dos proje tos de software reais. Portanto, surge uma questão importante: por que, com todos os conselhos que existem contra essa prática, métodos complexos continuam a exis tir? Infelizmente, a complexidade de código é normalmente avaliada para uma única linguagem de programação (geralmente Java), reduzindo a generalidade das descober tas. Assim, avaliar como e por qual razão códigos complexos evoluem em múltiplas linguagens de programação é fundamental para entender as semelhanças e diferenças entre as linguagens. Nesta dissertação, fornecemos um estudo empírico multilinguagem para avaliar a evolução de métodos complexos e um estudo para entender melhor as percepções dos desenvolvedores. Analisamos 1.000 métodos complexos de 50 projetos populares escritos em JavaScript, Python, Java, C++ e C# e realizamos uma pesquisa com mais de 70 desenvolvedores, incluindo desenvolvedores de grandes empresas, como Google, Facebook e Apple. Descobrimos que a linguagem de programação desempenha um papel importante no estudo da complexidade de código e que os métodos complexos não são homogêneos nas operações que realizam. A percepção de complexidade dos desenvolvedores é subjetiva e varia de acordo com a linguagem de programação. Além disso, os desenvolvedores podem evitar deliberadamente a refatoração de código com plexo devido a vários motivos, incluindo estabilidade do código, falta de prioridade e risco de refatoração. Finalmente, com base em nossas descobertas, discutimos ideias e aplicações para pesquisadores e profissionais.

Assunto

Computação – Teses, Software – Codificação –Teses, Software – Manuteção – Teses, Software – Desenvolvimento – Teses

Palavras-chave

Code Complexity, Code Smells, Software Maintenance, Software Evolution, Empirical Study

Citação

Endereço externo

Avaliação

Revisão

Suplementado Por

Referenciado Por