d etecting bad smells in source code using change history information fabio palomba, gabriele...

29
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

Upload: internet

Post on 22-Apr-2015

103 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia,

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

Page 2: D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia,

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

Page 3: D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia,

Introdução

Evolução do Software

Bad Smell (pressa ou desinformados)

Manter software pode se tornar mais caro

Page 4: D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia,

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

Page 5: D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia,

Hist

Exploração das informações em histórico deSistemas de controle de versão .

Page 6: D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia,

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%

Page 7: D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia,

Sistemas Utilizados no Estudo

Page 8: D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia,

Snapshots dos Sistemas

Page 9: D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia,

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

Page 10: D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia,

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

Page 11: D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia,

Extração SCV

Page 12: D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia,

Conjunto de Mudanças

Classes: adicionadas/removidas/movidas e renomeadas

Atributo: (...)

Método: (...)

Mudança de assinatura: visibilidade , tipo de retorno e parâmetros

Page 13: D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia,

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

Page 14: D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia,

Blob: classes modificadas requerem commit dePelo menos uma outra classe

Feature Envy: métodos de commit com métodos de outra classe

Page 15: D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia,

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?

Page 16: D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia,

Resultados

Page 17: D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia,

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

Page 18: D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia,

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

Page 19: D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia,

Comparação DV

14 casos em 5 sistemas

Hist 76%( 79% recall e 73% precision)vs

AC 10%( 7% recall e 20% precision)

DCCA

Page 20: D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia,

Comparação SS

4 sistemas afetados com 4 ocorrências Hist 100% com 100% precisão

SCCA

Page 21: D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia,

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

Page 22: D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia,

Comparação Blob

Hist precission 76% recall de 61% (média 68%)

Decor

Page 23: D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia,

Comparação FE

Oráculo identificou em 5 dos 8 sistemas, totalizando 42.

Hist identificou 34 deles , contra 25 do JDeodorant

JDeodorant

Page 24: D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia,

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.

Page 25: D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia,

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

Page 26: D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia,

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

Page 27: D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia,

Trabalhos Relacionados

Usam apenas métricas como: CBO, LOC, WMC e Redes Bayesianas

Page 28: D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia,

Conclusão

Levantou pontos de analise de contexto para evitar Perdas de informações e qualidade .

Proposta de definição de híbrido

Page 29: D ETECTING BAD SMELLS IN SOURCE CODE USING CHANGE HISTORY INFORMATION Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia,