Assessing the evolution of complex methods: a multi-language study
Autor(a) principal: | |
---|---|
Data de Publicação: | 2021 |
Tipo de documento: | Dissertação |
Idioma: | eng |
Título da fonte: | Repositório Institucional da UFMG |
Texto Completo: | http://hdl.handle.net/1843/39049 |
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. |
id |
UFMG_661826411be971dbca6aa548b12994e0 |
---|---|
oai_identifier_str |
oai:repositorio.ufmg.br:1843/39049 |
network_acronym_str |
UFMG |
network_name_str |
Repositório Institucional da UFMG |
repository_id_str |
|
spelling |
André Cavalcante Horahttp://lattes.cnpq.br/4957418183504876Marco Túlio de Oliveira ValenteEduardo Magno Lages Figueiredohttp://lattes.cnpq.br/9530600119193335Mateus Fellipe Alves Lopes2022-01-08T03:29:57Z2022-01-08T03:29:57Z2021-09-03http://hdl.handle.net/1843/39049Over 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.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.CAPES - Coordenação de Aperfeiçoamento de Pessoal de Nível SuperiorengUniversidade Federal de Minas GeraisPrograma de Pós-Graduação em Ciência da ComputaçãoUFMGBrasilICX - DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃOComputação – TesesSoftware – Codificação –TesesSoftware – Manuteção – TesesSoftware – Desenvolvimento – TesesCode ComplexityCode SmellsSoftware MaintenanceSoftware EvolutionEmpirical StudyAssessing the evolution of complex methods: a multi-language studyAvaliando a evolução de métodos complexos: um estudo multilíngueinfo:eu-repo/semantics/publishedVersioninfo:eu-repo/semantics/masterThesisinfo:eu-repo/semantics/openAccessreponame:Repositório Institucional da UFMGinstname:Universidade Federal de Minas Gerais (UFMG)instacron:UFMGORIGINALDissertação-Mateus Fellipe Alves Lopes.pdfDissertação-Mateus Fellipe Alves Lopes.pdfapplication/pdf1958476https://repositorio.ufmg.br/bitstream/1843/39049/1/Disserta%c3%a7%c3%a3o-Mateus%20Fellipe%20Alves%20Lopes.pdfb00e8015ff3410f394349d1bf3814ab7MD51LICENSElicense.txtlicense.txttext/plain; charset=utf-82118https://repositorio.ufmg.br/bitstream/1843/39049/2/license.txtcda590c95a0b51b4d15f60c9642ca272MD521843/390492022-01-08 00:29:57.964oai:repositorio.ufmg.br:1843/39049TElDRU7Dh0EgREUgRElTVFJJQlVJw4fDg08gTsODTy1FWENMVVNJVkEgRE8gUkVQT1NJVMOTUklPIElOU1RJVFVDSU9OQUwgREEgVUZNRwoKQ29tIGEgYXByZXNlbnRhw6fDo28gZGVzdGEgbGljZW7Dp2EsIHZvY8OqIChvIGF1dG9yIChlcykgb3UgbyB0aXR1bGFyIGRvcyBkaXJlaXRvcyBkZSBhdXRvcikgY29uY2VkZSBhbyBSZXBvc2l0w7NyaW8gSW5zdGl0dWNpb25hbCBkYSBVRk1HIChSSS1VRk1HKSBvIGRpcmVpdG8gbsOjbyBleGNsdXNpdm8gZSBpcnJldm9nw6F2ZWwgZGUgcmVwcm9kdXppciBlL291IGRpc3RyaWJ1aXIgYSBzdWEgcHVibGljYcOnw6NvIChpbmNsdWluZG8gbyByZXN1bW8pIHBvciB0b2RvIG8gbXVuZG8gbm8gZm9ybWF0byBpbXByZXNzbyBlIGVsZXRyw7RuaWNvIGUgZW0gcXVhbHF1ZXIgbWVpbywgaW5jbHVpbmRvIG9zIGZvcm1hdG9zIMOhdWRpbyBvdSB2w61kZW8uCgpWb2PDqiBkZWNsYXJhIHF1ZSBjb25oZWNlIGEgcG9sw610aWNhIGRlIGNvcHlyaWdodCBkYSBlZGl0b3JhIGRvIHNldSBkb2N1bWVudG8gZSBxdWUgY29uaGVjZSBlIGFjZWl0YSBhcyBEaXJldHJpemVzIGRvIFJJLVVGTUcuCgpWb2PDqiBjb25jb3JkYSBxdWUgbyBSZXBvc2l0w7NyaW8gSW5zdGl0dWNpb25hbCBkYSBVRk1HIHBvZGUsIHNlbSBhbHRlcmFyIG8gY29udGXDumRvLCB0cmFuc3BvciBhIHN1YSBwdWJsaWNhw6fDo28gcGFyYSBxdWFscXVlciBtZWlvIG91IGZvcm1hdG8gcGFyYSBmaW5zIGRlIHByZXNlcnZhw6fDo28uCgpWb2PDqiB0YW1iw6ltIGNvbmNvcmRhIHF1ZSBvIFJlcG9zaXTDs3JpbyBJbnN0aXR1Y2lvbmFsIGRhIFVGTUcgcG9kZSBtYW50ZXIgbWFpcyBkZSB1bWEgY8OzcGlhIGRlIHN1YSBwdWJsaWNhw6fDo28gcGFyYSBmaW5zIGRlIHNlZ3VyYW7Dp2EsIGJhY2stdXAgZSBwcmVzZXJ2YcOnw6NvLgoKVm9jw6ogZGVjbGFyYSBxdWUgYSBzdWEgcHVibGljYcOnw6NvIMOpIG9yaWdpbmFsIGUgcXVlIHZvY8OqIHRlbSBvIHBvZGVyIGRlIGNvbmNlZGVyIG9zIGRpcmVpdG9zIGNvbnRpZG9zIG5lc3RhIGxpY2Vuw6dhLiBWb2PDqiB0YW1iw6ltIGRlY2xhcmEgcXVlIG8gZGVww7NzaXRvIGRlIHN1YSBwdWJsaWNhw6fDo28gbsOjbywgcXVlIHNlamEgZGUgc2V1IGNvbmhlY2ltZW50bywgaW5mcmluZ2UgZGlyZWl0b3MgYXV0b3JhaXMgZGUgbmluZ3XDqW0uCgpDYXNvIGEgc3VhIHB1YmxpY2HDp8OjbyBjb250ZW5oYSBtYXRlcmlhbCBxdWUgdm9jw6ogbsOjbyBwb3NzdWkgYSB0aXR1bGFyaWRhZGUgZG9zIGRpcmVpdG9zIGF1dG9yYWlzLCB2b2PDqiBkZWNsYXJhIHF1ZSBvYnRldmUgYSBwZXJtaXNzw6NvIGlycmVzdHJpdGEgZG8gZGV0ZW50b3IgZG9zIGRpcmVpdG9zIGF1dG9yYWlzIHBhcmEgY29uY2VkZXIgYW8gUmVwb3NpdMOzcmlvIEluc3RpdHVjaW9uYWwgZGEgVUZNRyBvcyBkaXJlaXRvcyBhcHJlc2VudGFkb3MgbmVzdGEgbGljZW7Dp2EsIGUgcXVlIGVzc2UgbWF0ZXJpYWwgZGUgcHJvcHJpZWRhZGUgZGUgdGVyY2Vpcm9zIGVzdMOhIGNsYXJhbWVudGUgaWRlbnRpZmljYWRvIGUgcmVjb25oZWNpZG8gbm8gdGV4dG8gb3Ugbm8gY29udGXDumRvIGRhIHB1YmxpY2HDp8OjbyBvcmEgZGVwb3NpdGFkYS4KCkNBU08gQSBQVUJMSUNBw4fDg08gT1JBIERFUE9TSVRBREEgVEVOSEEgU0lETyBSRVNVTFRBRE8gREUgVU0gUEFUUk9Dw41OSU8gT1UgQVBPSU8gREUgVU1BIEFHw4pOQ0lBIERFIEZPTUVOVE8gT1UgT1VUUk8gT1JHQU5JU01PLCBWT0PDiiBERUNMQVJBIFFVRSBSRVNQRUlUT1UgVE9ET1MgRSBRVUFJU1FVRVIgRElSRUlUT1MgREUgUkVWSVPDg08gQ09NTyBUQU1Cw4lNIEFTIERFTUFJUyBPQlJJR0HDh8OVRVMgRVhJR0lEQVMgUE9SIENPTlRSQVRPIE9VIEFDT1JETy4KCk8gUmVwb3NpdMOzcmlvIEluc3RpdHVjaW9uYWwgZGEgVUZNRyBzZSBjb21wcm9tZXRlIGEgaWRlbnRpZmljYXIgY2xhcmFtZW50ZSBvIHNldSBub21lKHMpIG91IG8ocykgbm9tZXMocykgZG8ocykgZGV0ZW50b3IoZXMpIGRvcyBkaXJlaXRvcyBhdXRvcmFpcyBkYSBwdWJsaWNhw6fDo28sIGUgbsOjbyBmYXLDoSBxdWFscXVlciBhbHRlcmHDp8OjbywgYWzDqW0gZGFxdWVsYXMgY29uY2VkaWRhcyBwb3IgZXN0YSBsaWNlbsOnYS4KRepositório de PublicaçõesPUBhttps://repositorio.ufmg.br/oaiopendoar:2022-01-08T03:29:57Repositório Institucional da UFMG - Universidade Federal de Minas Gerais (UFMG)false |
dc.title.pt_BR.fl_str_mv |
Assessing the evolution of complex methods: a multi-language study |
dc.title.alternative.pt_BR.fl_str_mv |
Avaliando a evolução de métodos complexos: um estudo multilíngue |
title |
Assessing the evolution of complex methods: a multi-language study |
spellingShingle |
Assessing the evolution of complex methods: a multi-language study Mateus Fellipe Alves Lopes Code Complexity Code Smells Software Maintenance Software Evolution Empirical Study Computação – Teses Software – Codificação –Teses Software – Manuteção – Teses Software – Desenvolvimento – Teses |
title_short |
Assessing the evolution of complex methods: a multi-language study |
title_full |
Assessing the evolution of complex methods: a multi-language study |
title_fullStr |
Assessing the evolution of complex methods: a multi-language study |
title_full_unstemmed |
Assessing the evolution of complex methods: a multi-language study |
title_sort |
Assessing the evolution of complex methods: a multi-language study |
author |
Mateus Fellipe Alves Lopes |
author_facet |
Mateus Fellipe Alves Lopes |
author_role |
author |
dc.contributor.advisor1.fl_str_mv |
André Cavalcante Hora |
dc.contributor.advisor1Lattes.fl_str_mv |
http://lattes.cnpq.br/4957418183504876 |
dc.contributor.referee1.fl_str_mv |
Marco Túlio de Oliveira Valente |
dc.contributor.referee2.fl_str_mv |
Eduardo Magno Lages Figueiredo |
dc.contributor.authorLattes.fl_str_mv |
http://lattes.cnpq.br/9530600119193335 |
dc.contributor.author.fl_str_mv |
Mateus Fellipe Alves Lopes |
contributor_str_mv |
André Cavalcante Hora Marco Túlio de Oliveira Valente Eduardo Magno Lages Figueiredo |
dc.subject.por.fl_str_mv |
Code Complexity Code Smells Software Maintenance Software Evolution Empirical Study |
topic |
Code Complexity Code Smells Software Maintenance Software Evolution Empirical Study Computação – Teses Software – Codificação –Teses Software – Manuteção – Teses Software – Desenvolvimento – Teses |
dc.subject.other.pt_BR.fl_str_mv |
Computação – Teses Software – Codificação –Teses Software – Manuteção – Teses Software – Desenvolvimento – Teses |
description |
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. |
publishDate |
2021 |
dc.date.issued.fl_str_mv |
2021-09-03 |
dc.date.accessioned.fl_str_mv |
2022-01-08T03:29:57Z |
dc.date.available.fl_str_mv |
2022-01-08T03:29:57Z |
dc.type.status.fl_str_mv |
info:eu-repo/semantics/publishedVersion |
dc.type.driver.fl_str_mv |
info:eu-repo/semantics/masterThesis |
format |
masterThesis |
status_str |
publishedVersion |
dc.identifier.uri.fl_str_mv |
http://hdl.handle.net/1843/39049 |
url |
http://hdl.handle.net/1843/39049 |
dc.language.iso.fl_str_mv |
eng |
language |
eng |
dc.rights.driver.fl_str_mv |
info:eu-repo/semantics/openAccess |
eu_rights_str_mv |
openAccess |
dc.publisher.none.fl_str_mv |
Universidade Federal de Minas Gerais |
dc.publisher.program.fl_str_mv |
Programa de Pós-Graduação em Ciência da Computação |
dc.publisher.initials.fl_str_mv |
UFMG |
dc.publisher.country.fl_str_mv |
Brasil |
dc.publisher.department.fl_str_mv |
ICX - DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO |
publisher.none.fl_str_mv |
Universidade Federal de Minas Gerais |
dc.source.none.fl_str_mv |
reponame:Repositório Institucional da UFMG instname:Universidade Federal de Minas Gerais (UFMG) instacron:UFMG |
instname_str |
Universidade Federal de Minas Gerais (UFMG) |
instacron_str |
UFMG |
institution |
UFMG |
reponame_str |
Repositório Institucional da UFMG |
collection |
Repositório Institucional da UFMG |
bitstream.url.fl_str_mv |
https://repositorio.ufmg.br/bitstream/1843/39049/1/Disserta%c3%a7%c3%a3o-Mateus%20Fellipe%20Alves%20Lopes.pdf https://repositorio.ufmg.br/bitstream/1843/39049/2/license.txt |
bitstream.checksum.fl_str_mv |
b00e8015ff3410f394349d1bf3814ab7 cda590c95a0b51b4d15f60c9642ca272 |
bitstream.checksumAlgorithm.fl_str_mv |
MD5 MD5 |
repository.name.fl_str_mv |
Repositório Institucional da UFMG - Universidade Federal de Minas Gerais (UFMG) |
repository.mail.fl_str_mv |
|
_version_ |
1803589152725270528 |