13/11/2007 joão arthur brunet monteiro gmf/dsc/ceei/ufcg evolução de software a survey of...
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](https://reader034.vdocuments.net/reader034/viewer/2022042721/5706383e1a28abb8238f068e/html5/thumbnails/1.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042721/5706383e1a28abb8238f068e/html5/thumbnails/2.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042721/5706383e1a28abb8238f068e/html5/thumbnails/3.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042721/5706383e1a28abb8238f068e/html5/thumbnails/4.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042721/5706383e1a28abb8238f068e/html5/thumbnails/5.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042721/5706383e1a28abb8238f068e/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042721/5706383e1a28abb8238f068e/html5/thumbnails/7.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042721/5706383e1a28abb8238f068e/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042721/5706383e1a28abb8238f068e/html5/thumbnails/9.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042721/5706383e1a28abb8238f068e/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042721/5706383e1a28abb8238f068e/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042721/5706383e1a28abb8238f068e/html5/thumbnails/12.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042721/5706383e1a28abb8238f068e/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042721/5706383e1a28abb8238f068e/html5/thumbnails/14.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042721/5706383e1a28abb8238f068e/html5/thumbnails/15.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042721/5706383e1a28abb8238f068e/html5/thumbnails/16.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042721/5706383e1a28abb8238f068e/html5/thumbnails/17.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042721/5706383e1a28abb8238f068e/html5/thumbnails/18.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042721/5706383e1a28abb8238f068e/html5/thumbnails/19.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042721/5706383e1a28abb8238f068e/html5/thumbnails/20.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042721/5706383e1a28abb8238f068e/html5/thumbnails/21.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042721/5706383e1a28abb8238f068e/html5/thumbnails/22.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042721/5706383e1a28abb8238f068e/html5/thumbnails/23.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042721/5706383e1a28abb8238f068e/html5/thumbnails/24.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042721/5706383e1a28abb8238f068e/html5/thumbnails/25.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042721/5706383e1a28abb8238f068e/html5/thumbnails/26.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042721/5706383e1a28abb8238f068e/html5/thumbnails/27.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042721/5706383e1a28abb8238f068e/html5/thumbnails/28.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042721/5706383e1a28abb8238f068e/html5/thumbnails/29.jpg)
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.