Compreendendo código nocivo por meio de transfer learning
Aprendizado de Máquina, Code Smells, Transfer Learning
Code smells são indicadores de implementação e tomadas de decisão de design inadequadas que podem prejudicar potencialmente a qualidade do software. Portanto, detectar esses smells é crucial para evitar tais problemas. Alguns estudos têm como objetivo compreender o impacto dos code smells na qualidade do software, enquanto outros propõem regras ou abordagens baseadas em aprendizado de máquina para identificar code smells. Pesquisas anteriores têm se concentrado na rotulagem e análise de trechos de código que afetam significativamente a qualidade do software, utilizando técnicas de aprendizado de máquina. Esses trechos de código são classificados como Clean, Smelly, Buggy e nocivo. Código nocivo se refere a trechos de códigos com code smell que possuem um ou mais bugs relatados, estejam eles corrigidos ou não. Consequentemente, a presença de códigos nocivos aumenta o risco de introduzir novos defeitos e/ou problemas de design durante o processo de correção. Embora tenham sido gerados resultados úteis para a detecção de códigos nocivos, nenhum dos trabalhos anteriores considerou, por meio da transferência de aprendizado, treinar um modelo para identificar trechos nocivos em uma linguagem de programação e ser capaz de identificar a mesma nocividade em outra linguagem de programação. Realizamos nosso estudo nesse escopo com 5 tipos de code smells, 803.258 versões de 23 projetos de código aberto, 8.181 bugs e 11.506 code smells. Os resultados revelaram uma transferência promissora de conhecimento entre Java e C# na presença de vários tipos de code smells, enquanto C++ mostrou uma transferência mais desafiadora. Além disso, nosso estudo descobriu que um tamanho de amostra de 32 apresentou resultados favoráveis para a maioria dos códigos nocivos utilizados, destacando a eficiência da transferência de aprendizado mesmo com dados limitados.