Refatoração de Código
Legado, Parte 1
Os Programadores Também Choram...
O que vamos ver neste talk
● Setting the mood
● Primeiros casos para trabalho sujo
● Discussão sobre o que podemos fazer
Porque Refatorar?
● Sistemas mudam
● Requisitos mudam.
● Contemplar mudanças.
O que é código legado?
CÓDIGO LEGADO != CÓDIGO RUIM
O que é código legado?
CÓDIGO LEGADO = CÓDIGO SEM TESTES.
Como Refatorar?
Existem duas maneiras de se refatorar código
legado.
Editar e Rezar
● Padrão de Mercado
● Mexer com “cuidadinho”
● Teste = “Brincar com o Sistema.”
● Deployar e ver o que acontece
Cobrir e Mudar
Criando uma rede de segurança
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.
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
O que fazer?
● Utilizar IDEs (extract method, por exemplo)
● Quebrar dependências (extract interface)
● Refatorações iniciais conservativas
Senso Estético do código
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.
Flash Refactoring
Sprout Method
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.
Sprout Method - Quando Usar?
● Método que não tem como testar.
● Classe tem como se colocar em teste.
Wrap Class
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.
Wrap Class - Quando Usar?
● Comportamento novo e independente.
● Classe antiga grande e confusa demais.
Flash Refactoring
● Prepara o ambiente.
● Não adiciona testes no código legado
(ainda).
● Ajuda a entender melhor o código.
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.

Refatoração de Código Legado

  • 1.
    Refatoração de Código Legado,Parte 1 Os Programadores Também Choram...
  • 2.
    O que vamosver neste talk ● Setting the mood ● Primeiros casos para trabalho sujo ● Discussão sobre o que podemos fazer
  • 3.
    Porque Refatorar? ● Sistemasmudam ● Requisitos mudam. ● Contemplar mudanças.
  • 4.
    O que écódigo legado? CÓDIGO LEGADO != CÓDIGO RUIM
  • 5.
    O que écódigo legado? CÓDIGO LEGADO = CÓDIGO SEM TESTES.
  • 7.
    Como Refatorar? Existem duasmaneiras de se refatorar código legado.
  • 8.
    Editar e Rezar ●Padrão de Mercado ● Mexer com “cuidadinho” ● Teste = “Brincar com o Sistema.” ● Deployar e ver o que acontece
  • 9.
    Cobrir e Mudar Criandouma rede de segurança
  • 10.
    Testes Unitários ● Sãoos 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ódigoLegado "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
  • 13.
  • 14.
    Algoritmo Mudança CódigoLegado 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.
  • 15.
  • 16.
  • 17.
    Sprout Method Vantagem: ● Poucoinvasivo. ● 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.
  • 19.
  • 20.
    Wrap Class Vantagem: ● Poucoinvasivo. ● 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 ● Preparao ambiente. ● Não adiciona testes no código legado (ainda). ● Ajuda a entender melhor o código.
  • 23.
    Conclusão ● Sistemas nãomelhoram da noite pro dia. ● Melhorias tem que ser constantes. ● É muita coisa para se fazer. Mas melhoria deve ser constante.