• Nenhum resultado encontrado

Selecionamos alguns projetos do GitHub e GitLab do IFSC para executar a ferramenta e confrontar com a análise manual dos smells para verificação em termos de precisão e revocação. Os projetos foram selecionados em procedimento detalhado na Seção 6.2.1.

7.3.1 Aplicações Selecionadas

Selecionamos quatro aplicações de tamanhos distintos. Dois projetos maiores (SIGAA e BroadleafCommerce) e dois menores (PAEVS e Shopping). Abaixo descrevemos uma visão rápida sobre cada projeto utilizado:

junto a Universidade Federal do Rio Grande do Norte (UFRN) e modificado para se adequar as regras do IFSC. Atualmente é mantido por uma equipe de 12 desenvolvedores. O sistema possui atualmente 1.397.997 Lines of code (LOC) e utiliza o Hibernate como framework ORM.

 BroadleafCommerce: Fornece um framework de comércio eletrônico em Java e Spring para utilização por empresas do ramo. A aplicação utiliza JPA e Hibernate como framework ORM. O projeto possui mais de 1400 estrelas e 1100 forks no GitHub, possuindo um total de 337.161 LOC.

 PAEVS: Sistema utilizado para gerenciamento de bolsas referentes a assistência estudantil. Possui 24.640 LOC e também é mantido pela mesma equipe do SIGAA.  Shopping: Sistema de shopping online, utilizando Java e Spring MVC. O projeto

utiliza Hibernate como framework ORM possui um total de 2.305 LOC, 141 estrelas e 78 forks no GitHub.

7.3.2 Resultado

Realizamos a avaliação manual dos code smells detectados seguindo os procedimentos metodológicos descrito na Seção 6.2.1. Devido à dificuldade de analisar integralmente os dois projetos maiores, extraímos de forma aleatória três pacotes para detecção e análise de cada projeto. No SIGAA utilizamos os pacotes: ENSINO com 110.517 LOC, SISU com 9.973 LOC e ESTAGIOcom 29.751 LOC. Para o BroadleafCommerce, utilizamos: BROADLEAF- CONTENTMANAGEMENT-MODULEcom 18.636 LOC, BROADLEAF-FRAMEWORK com 107.606 LOC e BROADLEAF-PROFILE com 9808 LOC. Os dois projetos menores foram analisados integralmente. A Tabela 17 apresenta o resultado da avaliação de precisão da ferramenta, com a quantidade de instâncias por smells aplicada aos quatro projetos supracitados. O nível de precisão variou de 100% (EAGERSMELL e ONETOMANYCOLLECTIONSSMELL) e à 92,86% (N1JOINFETCHSMELL). Dois falsos-positivos detectados para PROJECTIONSMELLsão referentes à consultas ORM com objetos que foram posteriormente atualizados, portanto, não sendo consideradas consultas com objetivo somente leitura. A dificuldade para o detector identificar o tipo de objetivo do retorno é explicada na Seção 6.2.5.3. Os demais falsos- positivos detectados, tanto para PROJECTIONSMELL, quanto para N1JOINFETCHSMELLestão relacionados a uma limitação conhecida relacionada as consultas ORM com projeção contendo menos de três caracteres fazendo o detector reportar como smell, também explicado com mais detalhes na Seção 6.2.5.3.

O resultado da análise para avaliar a revocação nos quatro projetos selecionados é apresentado na Tabela 18. Os smells EAGERSMELLe N1JOINFETCHSMELLobtiveram 100% de revocação, repetindo o resultado apresentado na avaliação da precisão. Para os demais, o nível de revocação ficou inferior ao nível de precisão, gerando um número maior de falsos-

Tabela 17 – Análise de precisão - Aplicação em projetos reais

Smells Detectados TP FP Precisão

EagerSmell 294 294 0 100,00%

N1JoinFetchSmell 14 13 1 92,86%

OneToManyCollectionsSmell 1 1 0 100,00%

ProjectionSmell 106 101 5 95,33%

Fonte: Elaborada pelo autor (2020)

negativos que falsos-positivos. A maior parte dos falsos-negativos de ProjectionSmell estão relacionados à consultas ORM contendo o alias da entidade maior que três caracteres, fazendo o detector identificar como projeção de forma incorreta e não acusando o smell conforme limitação abordada na Seção 6.2.5.3. Quatro falsos-negativos estão relacionados a consultas ORM que estão divididas entre métodos diferentes, estando a projeção com uma série de condicionais para formulação e em um método distinto do corpo da consulta. A dificuldade pro detector neste caso é por não conseguir analisar estaticamente condicionais para saber se o método irá retornar uma String vazia ou uma projeção. Os dois falsos-negativos de N1JOINFETCHSMELLestão relacionados a atributos EAGERsem JOINFETCH de entidades diferentes da principal da consulta, limitação explicada em mais detalhes na Seção 6.2.3.3.

Tabela 18 – Analise de revocação - Aplicação em projetos reais

Smells Analisados TP FN Revocação

EagerSmell 294 294 0 100,00%

N1JoinFetchSmell 15 13 2 86,67%

OneToManyCollectionsSmell 1 1 0 100,00%

ProjectionSmell 117 101 16 87,18%

Fonte: Elaborada pelo autor (2020)

A Tabela 19 apresenta o F1-Score para verificação da média harmônica utilizando os dados de precisão e revocação calculados através da aplicação da ferramenta em projetos reais.

Tabela 19 – F1-Score - Aplicação em projetos reais

Smells Precisão Revocação F1-Score

EagerSmell 100,00% 100,00% 100,00%

N1JoinFetchSmell 92,86% 86,67% 89,66%

OneToManyCollectionsSmell 100,00% 100,00% 100,00%

ProjectionSmell 95,33% 87,18% 91,07%

Fonte: Elaborada pelo autor (2020)

ser explicados pela forma como a ferramenta realiza a análise para identificação. Os smells que apresentaram 100% são relativos à verificação de anotações que contêm mapeamentos padronizados pelo JPA, facilitando o desenvolvimento das regras de detecção e tornando a identificação dos smells mais precisa. Diferentemente, os outros dois smells analisam Strings de consultas ORM. Essa é uma análise mais complexa para o detector pelo fato de trabalhar com Strings, o que dificulta a análise por utilização do grafo de chamadas. Além disso as consultas podem ser criadas de diferentes formas, a depender do método utilizado, podem estar desordenadas e espalhadas por variáveis e métodos condicionais no código. Com relação aos smells que tiveram 100%, o smell ONETOMANYCOLLECTIONSSMELLteve apenas um resultado, o que não seria uma margem segura para afirmar que possui 100% de revocação/precisão. Acreditamos que mesmo com um número maior de resultados sua precisão e revocação manteriam-se no mesmo nível por também se basear em anotações, assim como o EAGERSMELL. Com os resultados iniciais obtidos, a ferramenta aparenta possuir um nível de precisão e revocação aceitável e pode ajudar a localizar os code smells ORM no código de forma a apresentar para o desenvolvedor analisar a necessidade ou não de refatoração. A partir desta análise, também foi possível identificar e validar limitações da ferramenta para futuras evoluções.