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
Top Related