![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,](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc176497959413d8efafa/html5/thumbnails/1.jpg)
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,](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc176497959413d8efafa/html5/thumbnails/2.jpg)
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,](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc176497959413d8efafa/html5/thumbnails/3.jpg)
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,](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc176497959413d8efafa/html5/thumbnails/4.jpg)
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,](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc176497959413d8efafa/html5/thumbnails/5.jpg)
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,](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc176497959413d8efafa/html5/thumbnails/6.jpg)
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,](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc176497959413d8efafa/html5/thumbnails/7.jpg)
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,](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc176497959413d8efafa/html5/thumbnails/8.jpg)
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,](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc176497959413d8efafa/html5/thumbnails/9.jpg)
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,](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc176497959413d8efafa/html5/thumbnails/10.jpg)
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,](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc176497959413d8efafa/html5/thumbnails/11.jpg)
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,](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc176497959413d8efafa/html5/thumbnails/12.jpg)
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,](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc176497959413d8efafa/html5/thumbnails/13.jpg)
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,](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc176497959413d8efafa/html5/thumbnails/14.jpg)
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,](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc176497959413d8efafa/html5/thumbnails/15.jpg)
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,](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc176497959413d8efafa/html5/thumbnails/16.jpg)
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,](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc176497959413d8efafa/html5/thumbnails/17.jpg)
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,](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc176497959413d8efafa/html5/thumbnails/18.jpg)
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,](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc176497959413d8efafa/html5/thumbnails/19.jpg)
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,](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc176497959413d8efafa/html5/thumbnails/20.jpg)
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,](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc176497959413d8efafa/html5/thumbnails/21.jpg)
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,](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc176497959413d8efafa/html5/thumbnails/22.jpg)
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,](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc176497959413d8efafa/html5/thumbnails/23.jpg)
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,](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc176497959413d8efafa/html5/thumbnails/24.jpg)
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,](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc176497959413d8efafa/html5/thumbnails/25.jpg)
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,](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc176497959413d8efafa/html5/thumbnails/26.jpg)
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,](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc176497959413d8efafa/html5/thumbnails/27.jpg)
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,](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc176497959413d8efafa/html5/thumbnails/28.jpg)
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,](https://reader035.vdocuments.pub/reader035/viewer/2022062700/552fc176497959413d8efafa/html5/thumbnails/29.jpg)