Upload
yasmin-delgado
View
216
Download
0
Embed Size (px)
Citation preview
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
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
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
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
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
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?”
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
13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG
Refatoração
• Primitive Refactoring• MoveMethod• RenameMethod• AddClass• ExtractMethod
• Composite Refactoring• MoveMethodsToVisitor
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
13/11/2007 João Arthur Brunet MonteiroGMF/DSC/CEEI/UFCG
Visualização
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
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
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.