Download - AgilCoop | Desenvolvimento ágil de software · 2011. 12. 14. · Created Date: 1/21/2010 1:59:51 PM
-
Refatoração:Melhorando
código existente
AgilCoop – Cursos de Verão 2010
Mariana BravoIME/USP
-
Copyleft AgilCoop 2010
Refatoração
● Uma mudança no sistema que não altera seu comportamento funcional, mas melhora sua estrutura interna
● Limpa o código, minimizando as chances de introduzir erros
● Melhora o design depois que o código foi escrito
-
Copyleft AgilCoop 2010
De onde vem?
● Surgiu na comunidade Smalltalk nos anos ~90● Desenvolveu-se formalmente na Universidade
de Illinois em Urbana-Champaign● Grupo do Prof. Ralph Johnson
– Tese de PhD de William Opdyke (1992)
– John Brant e Don Roberts: The Refactoring Browser Tool
● Kent Beck e Martin Fowler na indústria
-
Copyleft AgilCoop 2010
O espírito da refatoração
-
Copyleft AgilCoop 2010
O espírito da refatoração
Refatoração
-
Copyleft AgilCoop 2010
O espírito da refatoração
Refatoração
-
Copyleft AgilCoop 2010
Primeiro passo: Testes
● Conjunto sólido de testes garante que o comportamento não será alterado
● Refatorações podem adicionar erros– Porém, como são feitas em pequenos passos, é fácil
recuperar-se de uma falha
● Testes devem ser automatizados e verificarem o próprio resultado
-
Copyleft AgilCoop 2010
Exemplos
-
Copyleft AgilCoop 2010
Extrair método
● Transforma um fragmento de código em um método com um nome explicativo
● Motivação:– Facilitar o entendimento de trecho de código– Aumentar as chances de reutilização do novo
método
-
Copyleft AgilCoop 2010
Renomear variável
● Muda o nome de uma variável para expressar melhor o seu propósito
● Motivação:– Facilitar o entendimento do papel da variável em
seu escopo
-
Copyleft AgilCoop 2010
Dinâmica da refatoração
● Cada mudança é simples...● Mas seu efeito acumulado pode melhorar
muito o design do código
● É construindo o sistema que podemos descobrir como melhorá-lo
-
Copyleft AgilCoop 2010
Refatorar para...
● Melhorar o design do software
● Facilitar o entendimento do software
● Encontrar falhas mais facilmente
● Programar mais rapidamente
-
Copyleft AgilCoop 2010
Quando refatorar
● Sempre que você precisar fazer algo e o código atrapalhar mais do que ajudar:– Quando adiciona funcionalidade– Quando corrige um erro– Quando revisa o código– Na terceira cópia, refatore (ou na primeira!)
● Quando o código cheira mau– “If it stinks, change it.” (Se feder, troque-o.)
Vó de Beck, sobre como cuidar de bebês
-
Copyleft AgilCoop 2010
Alguns maus cheiros
● Nomes de variáveis obscuros● Código duplicado● Método muito longo● Classe muito grande● Intimidade inapropriada● Comentários● Muitos parâmetros
-
Copyleft AgilCoop 2010
Maus cheiros em testes
● Problemas no código:– Testes obscuros– Presença de condições– Replicação de código– Lógica de testes em produção
● Problemas no comportamento:– Testes frágeis– Testes lentos– Intervenções manuais
-
Copyleft AgilCoop 2010
Exemplos
-
Copyleft AgilCoop 2010
Mover método
● Move um método que utiliza mais funcionalidades de outra classe do que aquela em que se encontra
● Motivação:– Uma classe tem muitos comportamentos– O acoplamento entre classes é muito forte
● O velho método delega ou é removido
-
Copyleft AgilCoop 2010
Usando ferramentas
-
Copyleft AgilCoop 2010
Substituir temporário por chamada
● Substitui o uso de uma variável por uma chamada a um método que realiza as operações
● Motivação:– Variáveis temporárias incentivam seu uso
prolongado por terem um escopo limitado
-
Copyleft AgilCoop 2010
Mais um exemplo
-
Copyleft AgilCoop 2010
E o desempenho?
“Devemos esquecer as pequenas eficiências em 97% do tempo: otimização prematura é a raiz de todo o mal.”
Donald Knuth
● Usar profiling para encontrar gargalos● Otimizar apenas os gargalos● Código fatorado:
– Compra tempo para otimizar– Aumenta a precisão na otimização
-
Copyleft AgilCoop 2010
Dois chapéus
● Refatoração ● Nova funcionalidade● Correção de erros
-
Copyleft AgilCoop 2010
Mais exemplos: sugestões?
-
Copyleft AgilCoop 2010
Problemas com refatorações
● Refatoração de sistemas grandes ou enormes● Refatoração com bancos de dados● Refatoração de APIs públicas
● Quando não refatorar?– Quando é tão ruim que reescrever é melhor– Quando você está próximo de um prazo
-
Copyleft AgilCoop 2010
Dúvidas?
Mariana [email protected]
-
Copyleft AgilCoop 2010
Referências
● M. Fowler, “Refactoring, Improving the design of existing code”, Addison-Wesley Professional, 1999
● J. Kerievsky, “Refactoring to Patterns”, Addison-Wesley Professional, 2004
● S. Ambler, P. Sadalage, “Refactoring Databases: Evolutionary Database Design”, Addison-Wesley Professional, 2006
● www.refactoring.com
http://www.refactoring.com/
Slide 1Slide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Slide 19Slide 20Slide 21Slide 22Slide 23Slide 24Slide 25Slide 26