O documento discute estratégias para refatorar código legado, começando com definir código legado e por que é importante refatorá-lo. Em seguida, apresenta duas abordagens para refatoração - "Editar e Rezar" versus "Cobrir e Mudar" - enfatizando a importância de testes, especialmente testes unitários. Finalmente, discute técnicas específicas como Sprout Method, Wrap Class e Flash Refactoring para fazer as mudanças de forma incremental.
10. Testes Unitários
● São os mais importantes!
● Não são testes unitários:
○ Conversa com o Banco de Dados.
○ Acessa sistema de arquivos.
○ Conversa com a rede.
○ Precisa de alguma propriedade especial para rodá-
los.
11. Dilema do Código Legado
"Quando temos que modificar código, nós
devemos fazer testes. Para fazermos testes,
nós normalmente precisamos modificar o
código."
Michale C. Feathers
12. O que fazer?
● Utilizar IDEs (extract method, por exemplo)
● Quebrar dependências (extract interface)
● Refatorações iniciais conservativas
14. Algoritmo Mudança Código Legado
1. Identifique pontos de mudança.
2. Ache pontos de teste.
3. Quebre dependências.
4. Escreva testes.
5. Faça as mudanças e refatore.
17. Sprout Method
Vantagem:
● Pouco invasivo.
● Adiciona método com testes.
● Separa novo do antigo.
Desvantagem
● Classe antiga sem testes.
● Não quebra velhas dependências.
18. Sprout Method - Quando Usar?
● Método que não tem como testar.
● Classe tem como se colocar em teste.
20. Wrap Class
Vantagem:
● Pouco invasivo.
● Adiciona método com testes.
● Separa novo do antigo.
Desvantagem
● Classe antiga sem testes.
● Não quebra velhas dependências.
21. Wrap Class - Quando Usar?
● Comportamento novo e independente.
● Classe antiga grande e confusa demais.
22. Flash Refactoring
● Prepara o ambiente.
● Não adiciona testes no código legado
(ainda).
● Ajuda a entender melhor o código.
23. Conclusão
● Sistemas não melhoram da noite pro dia.
● Melhorias tem que ser constantes.
● É muita coisa para se fazer. Mas melhoria
deve ser constante.