Identifying Code Smells with Machine Learning Techniques
Data
2018Autor
Luiz, Frederico Caram
xmlui.mirage2.itemSummaryView.MetaData
Mostrar registro completoResumo
Context: Code smells are an accepted approach to identify design flaws in the source
code. Many studies regarding their automatic identification were developed, ranging from
hard threshold metrics based and rule based to machine learning techniques. But there is
still a lack of empirical benchmarks to define when they should be used.
Objective: This study aims at the development of an mapping study of machine learning
techniques and code smells found in literature and of an experiment based on the stateof-
art machine learning techniques identified and applied in a standardized dataset that
reflects a real project scenario in order to create a benchmark for future work.
Method: A mapping study was used to identify the techniques used for each smell and
an empirical experiment based on the previously identified techniques.
Results: From the studied smells, the technique used for Long Method was the one
that performed closer to the original experiments, but yet 34% worst than it, while most
were outperformed by more than 50% and some performed even 86% below the original
experiments. The imbalanced dataset techniques that were used, also performed worst
than it, but still were able to bring improvement, ranging from 1% that was the case of
Long Methods and Feature Envy to more than 100% in the case of Shotgun Surgery and
Parallel Inheritance.
Conclusions: The replicated techniques results diverged from the original experiment.
But techniques for imbalanced data were able improve the existing techniques under these
circumstances. Ensemble models presented the best performance for relationships between
methods and classes, while the Boosting techniques for the ones related to the structure
of classes and methods. For future experiments, we suggest future works to further extend
the database by adding other smells kind and techniques to it to create a broader benchmarking. Contexto: Code smells são uma abordagem bem aceita para a identificação de problemas
de design do código. Muitos estudos envolvendo sua identificação automática já foram
desenvolvidos, abrangendo desde técnicas baseadas em limites rígidos até as baseadas em
machine learning. Mas ainda faltam evidências empricas para definir quais são melhores
para cada cenário.
Objetivo: Este estudo busca desenvolver um estudo de mapeamento de técnicas de machine
learning para a identificação de code smells na literatura e um experimento baseado
nas técnicas estado da arte identificadas a partir dele e aplicadas em um banco de dados
padronizado, refletindo um cenário próximo ao real com o objetivo de criar uma referência
para pesquisas futuras.
Método: Um estudo de mapeamento para identificação das técnicas utilizadas para code
smell e um experimento empirico baseado nas técnincas identificadas préviamente.
Resultados: Dos code smell estudados a técnica used para Long Methods foi a que
performou mais próxima ao experimento original, mas ainda assim 34% pior, enquanto a
maioria das outras performou 50
Conclusões: Os resultados apresentaram variação em relação aos experimentos originais.
Mas as técnicas para bases desbalanceadas conseguiram apresentar melhora em relação
à elas. Os modelos de Ensemble apresentaram a melhor performance em code smells que
envolvem o relacionamento entrem classes e métodos, enquanto as técnicas de Boosting
foram melhores os mais estruturais. Para futuros experimentos, sugerimos estender o
database para incluir mais tipos de code smells e testar novas técnicas para criar um
benchmarking mais amplo.