Evolução de Software
A Survey of Software Refactoring
Reconstruction of Successful Software Evolution
Using Clone Detection
13/11/2007
João Arthur Brunet Monteiro
GMF/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 Monteiro
GMF/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 Monteiro
GMF/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 Monteiro
GMF/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 Monteiro
GMF/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 Monteiro
GMF/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 Monteiro
GMF/DSC/CEEI/UFCG
Refatoração
• Primitive Refactoring
• MoveMethod
• RenameMethod
• AddClass
• ExtractMethod
• Composite Refactoring
• MoveMethodsToVisitor
13/11/2007
João Arthur Brunet Monteiro
GMF/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 Monteiro
GMF/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 Monteiro
GMF/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 Monteiro
GMF/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 Monteiro
GMF/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 Monteiro
GMF/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 Monteiro
GMF/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 Monteiro
GMF/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 Monteiro
GMF/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 Monteiro
GMF/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 Monteiro
GMF/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 Monteiro
GMF/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 Monteiro
GMF/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 Monteiro
GMF/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 Monteiro
GMF/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 Monteiro
GMF/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 Monteiro
GMF/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 Monteiro
GMF/DSC/CEEI/UFCG
Visualização
13/11/2007
João Arthur Brunet Monteiro
GMF/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 Monteiro
GMF/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 Monteiro
GMF/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.
13/11/2007
João Arthur Brunet Monteiro
GMF/DSC/CEEI/UFCG
Download

software