D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele...
Transcript of D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele...
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
AbordagemAbordagens 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 ChangeShotgun Surgery
Parallel inheritance
BlobFeature Envy
Hist
Exploração das informações em histórico deSistemas de controle de versão .
Projetos analisadosForam analisados projetos em Java , sendo eles :
Apache Ant TomCat JEdit + 5 API’s Android
Experimento para levantar oráculo
Construção manual do Oráculo Compara os resultados da HIST com análise estrutural
Precision entre 61 % e 80%
Recall está entre 61% e 100%
Sistemas Utilizados no Estudo
Snapshots dos Sistemas
PropostaIdeia 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
Checkout de revisão i +1
Versão do Sistema
Mudanças Refinadas
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
Divergent Change: regras de associação e análise de Committed. Mleft => Mright
Exemplo
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 dePelo 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 RQRQ1: 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
R2Implementaçã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
14 casos em 5 sistemas
Hist 76%( 79% recall e 73% precision)vs
AC 10%( 7% recall e 20% precision)
DCCA
Comparação SS
4 sistemas afetados com 4 ocorrências Hist 100% com 100% precisão
SCCA
Comparação PI
31 casos 19 foram identificados pelo HistHist recall 61% com 12 falso positivo
VSAlgoritmo PICA detectou 14 corretas e 45% recall , falso positivo 4%
PICA
Comparação Blob
Hist precission 76% recall de 61% (média 68%)
Decor
Comparação FE
Oráculo identificou em 5 dos 8 sistemas, totalizando 42.
Hist identificou 34 deles , contra 25 do JDeodorant
JDeodorant
AbordagensDiferenç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 badsmells
ReplicaçãoPacote de Replicação
Repositório dos dados históricos extraídos Histórico de alterações das ferramentasOrá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