13/11/2007 joão arthur brunet monteiro gmf/dsc/ceei/ufcg evolução de software a survey of...

29
13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution Using Clone Detection

Upload: yasmin-delgado

Post on 07-Apr-2016

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution

13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG

Evolução de Software

A Survey of Software Refactoring

Reconstruction of Successful Software Evolution Using Clone Detection

Page 2: 13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution

13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG

Roteiro

• Contextualização• O Problema• Refatoração

• Definição• Refatoração e Evolução• Processo• Técnicas e Ferramentas

• Conclusão

Page 3: 13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution

13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG

Contextualização

• Software precisa evoluir• Modificações• Adição de funcionalidades• Melhoria na estrutura• Adequação ao cliente

Page 4: 13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution

13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG

O Problema

• Complexidade aumenta• Distância do design original• Erosão do Design• Perda de qualidade• Custo com manutenção é alto

Page 5: 13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution

13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG

A Solução: Refatoração

• Restruturação• Refatoração:

• “Processo de mudar um software orientado a objeto de uma maneira que não altere seu comportamento externo, mas melhore sua qualidade interna”

• Reduzir a complexidade do software aumentando de forma incremental sua qualidade

Page 6: 13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution

13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG

A Solução: Refatoração

• Relacionado à qualidade interna do software• Evolution Critical• Normalmente não é fruto de novas

funcionalidades no código, mas está relacionado à previsão da adição de novas funcionalidades• “Funciona, mas e quando eu precisar

modificar? Vai ser simples?”

Page 7: 13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution

13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG

Refatoração e Evolução

• Melhorar aspectos como:• Modularidade• Reusabilidade• Complexidade• Manutenabilidade

• Refatorar para facilitar futuras adaptações e extensões

• Coverter código legado em um código modularizado e extensível

Page 8: 13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution

13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG

Refatoração

• Primitive Refactoring• MoveMethod• RenameMethod• AddClass• ExtractMethod

• Composite Refactoring• MoveMethodsToVisitor

Page 9: 13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution

13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG

Refatoração: O Processo

• Identificar qual parte do código deve ser refatorada

• Determinar quais refactorings devem ser aplicados

• Garantir a preservação do comportamento• Avaliar o efeito da refatoração nas

características que indicam qualidade no software

• Manter a consistência do código com os outros artefatos

Page 10: 13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution

13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG

Refatoração: O Processo

• Uso de métricas para identificar quais partes do software precisam ser refatoradas

• Abordagens dinâmicas e estáticas• Testes• Detecção Bad Semells

• Código Duplicado• God Class

Page 11: 13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution

13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG

Refatoração: O Processo

• Por definição, refatoração não pode alterar o comportamento do software

• O que é comportamento?• Para um mesmo conjunto de valores de

entrada, a saída deve ser a mesma depois da refatoração

• Desempenho depende do domínio• Embarcados• Sistemas de vendas web

Page 12: 13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution

13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG

Refatoração: O Processo

• Avaliar o efeito da refatoração na qualidade do software

• Demeyer [1] avaliou que, ao trocar condições lógicas por polimorfismo, o software ganha em desempenho• Compiladores otimizam chamadas

polimórficas

Page 13: 13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution

13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG

Refatoração: O Processo

• Manter a consistência com outros artefatos• Documentação do design• Testes de unidade• Documentação do código e de

funcionalidades

Page 14: 13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution

13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG

Refatoração: O Processo

• Design Wizard• Abordagem baseada em testes que permite

verificar se o design de um determinado programa está em conformidade com o design especificado

• Suporte à atividade de refatoração

Page 15: 13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution

13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG

Refatoração: Formalismos

• Uso de Asserções• Pré-condições

• Devem ser válidas antes da refatoração• Pós-condições

• Devem ser válidas depois da refatoração• Invariantes

• Devem ser válidas antes e depois da refatoração

Page 16: 13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution

13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG

Refatoração: Uso de asserções

• Maneira verificável de assegurar que o comportamento de um método foi mantido depois de refatorado

• Exemplo: MoveMethod(print,ASCIIDoc,Printer)• Pré-condições

• ASCIIDoc e Printer devem existir• o método print deve existir em ASCIIDoc• Não deve existir o método print em

Printer

Page 17: 13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution

13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG

Refatoração: Uso de asserções

• Pós-condições• O método print deve existir em Printer• O método print não deve existir em

ASCIIDoc• Invariantes

• ASCIIDoc e Printer devem existir antes de depois da refatoração

Page 18: 13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution

13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG

Outros Formalismos

• Fatiamento de Programas• Extrair todas as declarações que podem

afetar um certo conjunto de variáveis• Baseado em grafos de dependência• Pode ser usado para verificar que uma

refatoração preserva o comportamento de determinada porção do código

Page 19: 13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution

13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG

Outros artefatos

• Refatoração não é somente aplicável a código• Modelos de Design• Esquemas de bancos de dados• Arquitetura de Software• Requisitos de Software

• Necessidade de manter todos sincronizados

Page 20: 13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution

13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG

Ferramentas

• Ferramentas automatizam primitive refactorings • IntelliJ Idea• Eclipse• JFactor• XRefactory• JBuilder• CodeGuide

• www.refactoring.com/tools.html

Page 21: 13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution

13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG

Ferramentas

• Indepedência de linguagem• Embora exista ferramentas de refatoração

para Java, não existe para JAspect• Confiabilidade

• Undo

Page 22: 13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution

13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG

Refatoração e XP

• Pequenas iterações ao estilo:• Codifica para passar nos testes• Refatora

• Refatoração é um dos pilares de XP• Refatoração + Testes = Aumento da

qualidade e confiabilidade do código

Page 23: 13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution

13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG

Conclusões

• Evolução implica em refatoração• O uso de métricas e visualização é

extremamente importante para a atividade de refatoração

• Análise de impacto também é uma das atividades que podem acompanhar a refatoração

• Refatoração não é exclusiva a código

Page 24: 13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution

13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG

Reconstruction of Successful Software Evolution Using Clone Detection• Heurística para reconstruir o processo

evolutivo explorando técnicas de detecção de código duplicado

• Interesse em como as mudanças afetam o software ao longo do tempo

• Software Peleontology Heurist

Page 25: 13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution

13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG

Visualização

• Procura por mudanças entre duas versões distintas de software

• Visualização em forma de matriz

Page 26: 13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution

13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG

Visualização

Page 27: 13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution

13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG

Conclusões

• Limitações• Escrita• As linhas devem ser idênticas para serem

detectadas• Escalabilidade da visualização• Poucos dados• Poucas conclusões

Page 28: 13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution

13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG

Conclusões

• Usar o histórico de refatoração com intuito de entender a evolução do software pode ser interessante

• Detecção de outros tipos de refatoração• Abordar a interpretação dos dados

Page 29: 13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution

13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG

Referências

• [1] S. Demeyer, “Maintainability versus Performance: What's the effect of introducing Polimorphism?” technical report, Lab. on Reeng., Universiteit Antwerpern, Belgium, 2002.