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
Download

Document