Discovering code smells in Javascript software using clustering techniques

  • Luan Sales Universidade de São Paulo
  • Charles de Macedo Universidade de São Paulo
  • Karina Delgado Universidade de São Paulo

Resumo


A presença de code smells em projetos de software têm consequências negativas no que diz respeito a coesão e manutenibilidade do código. Assim sendo, a análise de técnicas usadas para descoberta e detecção de code smells de maneira automática é um tópico cada vez mais explorado. Uma ferramenta semi-automática que permite descobrir padrões de defeitos e eventuais code smells em código JavaScript é a BugAID. O objetivo deste trabalho foi contribuir com a ferramenta BugAID na tarefa de descoberta de code smells comuns no desenvolvimento de software JavaScript através da melhoria na identificação de palavras associadas a código refatorado nas mensagens dos commits e com a implementação do módulo BE++. O módulo BE++ mostrou-se eficaz na identificação de code smells que envolvem pequenas alterações no código, descobrindo 5 code smells comuns dentro do grupo de refatorações. Esses code smells são candidatos à inclusão em ferramentas de detecção de code smells para prevenção de problemas no desenvolvimento de software JavaScript.

Palavras-chave: Aprendizado de Máquina, Engenharia de Software, JavaScript, Mineração de Dados, Mineração de Texto e Web

Referências

Aggarwal, C. C. and Reddy, C. K. (2013). Data Clustering: Algorithms and Applications. Chapman & Hall/CRC, 1st edition.

Carroll JB, D. P. . R. B. e. (1971). The american heritage word frequency book. New York: American, Heritage Publishing Co.

Christen, P. (2006). A comparison of personal name matching: Techniques and practical issues. In Sixth IEEE International Conference on Data Mining - Workshops (ICDMW’06), pages 290–294.

de MACEDO, C. M. (2019). Aplicação de algoritmos de agrupamento para descoberta de padrões de defeito em software javascript. Master’s thesis, Dissertação (Mestrado em Sistemas de Informação) - Escola de Artes, Ciências e Humanidades, University of São Paulo, São Paulo, 2018.

FARD, A. M. and MESBAH, A. (2013). Jsnose: Detecting javascript code smells. In 2013 IEEE 13th International Working Conference on Source Code Analysis and Manipulation (SCAM), pages 116–125.

Fowler, M. (1999). Refactoring: Improving the Design of Existing Code. Addison- Wesley, Boston, MA, USA.

Frey, B. J. and Dueck, D. (2007). Clustering by passing messages between data points. Science, 315(5814):972–976.

Hanam, Q., Brito, F. S. d. M., and Mesbah, A. (2016). Discovering bug patterns in javascript. In Proceedings of the 2016 24th ACM SIGSOFT International Symposium on Foundations of Software Engineering, FSE 2016, pages 144–156, New York, NY, USA. ACM.

MacCormack, A. and Sturtevant, D. (2016). Technical debt and system architecture: The impact of coupling on defect-related activity. Journal of Systems and Software, 120.

Mikolov, T., Chen, K., Corrado, G. S., and Dean, J. (2013). Efficient estimation of word representations in vector space. CoRR, abs/1301.3781.

Pfeifer, U., Poersch, T., and Fuhr, N. (1996). Retrieval effectiveness of proper name search methods. Inf. Process. Manage., 32(6):667–679.

Rosenberg, A. and Hirschberg, J. (2007). V-measure: A conditional entropy-based external cluster evaluation measure. pages 410–420.

Saboury, A., Musavi, P., Khomh, F., and Antoniol, G. (2017). An empirical study of code smells in javascript projects. In 2017 IEEE 24th International Conference on Software Analysis, Evolution and Reengineering (SANER), pages 294–305.
Publicado
15/10/2019
SALES, Luan; MACEDO, Charles de; DELGADO, Karina. Discovering code smells in Javascript software using clustering techniques. In: ENCONTRO NACIONAL DE INTELIGÊNCIA ARTIFICIAL E COMPUTACIONAL (ENIAC), 16. , 2019, Salvador. Anais [...]. Porto Alegre: Sociedade Brasileira de Computação, 2019 . p. 1-12. ISSN 2763-9061. DOI: https://doi.org/10.5753/eniac.2019.9267.