DETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia, Denys Poshyvanyk Johnatan Oliveira ASE A1 Estrutura • • • • • • • Introdução Detecção Smell por Histórico de informações Design de estudo (RQ) Análise dos Resultados Ameaças à Validade Trabalhos relacionados Conclusões e trabalhos futuros Introdução Evolução do Software Bad Smell (pressa ou desinformados) Manter software pode se tornar mais caro Abordagem Abordagens com base em métricas que analisam a estrutura do código fonte. EX: LongMethod (LOC) Falta precision and Recall para verificação ao decorrer do tempo. Identificar 5 tipos de Bad Smell através do Histórico de Versão: Divergent Change Shotgun Surgery Parallel inheritance Blob Feature Envy Hist Exploração das informações em histórico de Sistemas de controle de versão . Projetos analisados Foram analisados projetos em Java , sendo eles : Apache Ant TomCat JEdit + 5 API’s Android Precision entre 61 % e 80% Recall está entre 61% e 100% Experimento para levantar oráculo Construção manual do Oráculo Compara os resultados da HIST com análise estrutural Sistemas Utilizados no Estudo Snapshots dos Sistemas Proposta Ideia Chave Identificar Bad Smell através de informações de histórico de sistemas de controle de Versão Processo de Detecção/Extração Extração Checkout de revisão i Mudanças Refinadas Versão do Sistema Checkout de revisão i +1 Compara e retorna o conjunto resultante diferente Extração SCV Conjunto de Mudanças Classes: adicionadas/removidas/movidas e renomeadas Atributo: (...) Método: (...) Mudança de assinatura: visibilidade , tipo de retorno e parâmetros Heurística Exemplo Divergent Change: regras de associação e análise de Committed. Mleft => Mright Shotgun Surgery: mudança em um método, resulta em Mudança de métodos em outras classes. Parallel Inheritance : os pares de classes das quais a adição de uma subclasse implica a adição de uma subclasse para a outra classe Blob: classes modificadas requerem commit de Pelo menos uma outra classe Feature Envy: métodos de commit com métodos de outra classe Questões de Pesquisa RQ1: Qual é o desempenho do HIST na detecção de Bad Smell? RQ2: Como comparar as técnicas existentes com a Hist? Resultados Resultados RQ RQ1: Avaliaram o HIST com o oráculo criado. Através de precision e recall identificaram que HIST fiou entre 61% e 89% de identificação. RQ2: ????? OBS: uma técnica complementa a outra R2 Implementação de 3 algoritmos de detecção Divergent Change : DCCA com base em conectividade (coesão) Shotgun Surgery: SSCA chamadas de método entre classes Parallel Inheritance: PICA classes afetadas pela herança Paralela como pares das classes Blob e Feature Envy Comparação DV DCCA 14 casos em 5 sistemas Hist 76%( 79% recall e 73% precision) vs AC 10%( 7% recall e 20% precision) Comparação SS SCCA 4 sistemas afetados com 4 ocorrências Hist 100% com 100% precisão Comparação PI PICA 31 casos 19 foram identificados pelo Hist Hist recall 61% com 12 falso positivo VS Algoritmo PICA detectou 14 corretas e 45% recall , falso positivo 4% Comparação Blob Decor Hist precission 76% recall de 61% (média 68%) Comparação FE JDeodorant Oráculo identificou em 5 dos 8 sistemas, totalizando 42. Hist identificou 34 deles , contra 25 do JDeodorant Abordagens Diferenças detectadas pelas abordagens % code smell correto em ambos % Identificação correta pelo HIST % Identificação correta pela análise estática , que não foi Identificada pelo HIST. Ameaças a Validade Ameaça de construção: criação do oráculo manual Comparação: Comparação da Hist com ferramentas Ameaça Externa: generalização dos resultados . Apenas 5 bad smells Replicação Pacote de Replicação Repositório dos dados históricos extraídos Histórico de alterações das ferramentas Oráculo manual Código Hist Trabalhos Relacionados Usam apenas métricas como: CBO, LOC, WMC e Redes Bayesianas Conclusão Levantou pontos de analise de contexto para evitar Perdas de informações e qualidade . Proposta de definição de híbrido