SlideShare uma empresa Scribd logo
1 de 23
Baixar para ler offline
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.

Mais conteúdo relacionado

Mais procurados

Testes: Existe vida antes do TDD, por Diana Arnos
Testes: Existe vida antes do TDD, por Diana ArnosTestes: Existe vida antes do TDD, por Diana Arnos
Testes: Existe vida antes do TDD, por Diana ArnosiMasters
 
Juntando as idéias I
Juntando as idéias IJuntando as idéias I
Juntando as idéias ITestRock!
 
Java: Excecoes e Tratamento de Erros
Java: Excecoes e Tratamento de ErrosJava: Excecoes e Tratamento de Erros
Java: Excecoes e Tratamento de ErrosArthur Emanuel
 
Mutant Testing: um mundo para um X-Testing.
Mutant Testing: um mundo para um X-Testing.Mutant Testing: um mundo para um X-Testing.
Mutant Testing: um mundo para um X-Testing.Robson Agapito Correa
 
DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira mal
DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira malDEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira mal
DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira malElias Souza
 
Testes de unidade alem do basico
Testes de unidade alem do basicoTestes de unidade alem do basico
Testes de unidade alem do basicoIsmael
 
TDD no Community Launch 2010 - Christian Cunha
TDD no Community Launch 2010 - Christian CunhaTDD no Community Launch 2010 - Christian Cunha
TDD no Community Launch 2010 - Christian CunhaChristian Cunha
 
Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!
Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!
Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!Robson Bittencourt
 
[Campus code] Boas práticas em Rails
[Campus code] Boas práticas em Rails[Campus code] Boas práticas em Rails
[Campus code] Boas práticas em Railsfabio perrella
 
Test driven development
Test driven developmentTest driven development
Test driven developmentclauvane1708
 
Testes Unitários - 1 Sessão beiraJUG
Testes Unitários - 1 Sessão beiraJUGTestes Unitários - 1 Sessão beiraJUG
Testes Unitários - 1 Sessão beiraJUGbeiraJUG
 
Apresentação jasmine
Apresentação jasmineApresentação jasmine
Apresentação jasmineRangel Javier
 
Padrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por TestesPadrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por TestesEverton Rodrigues
 
Qualidade de Código
Qualidade de CódigoQualidade de Código
Qualidade de CódigoJoberto Diniz
 

Mais procurados (20)

Unit Testing
Unit TestingUnit Testing
Unit Testing
 
JUnit Experience
JUnit ExperienceJUnit Experience
JUnit Experience
 
Clean code
Clean codeClean code
Clean code
 
Testes: Existe vida antes do TDD, por Diana Arnos
Testes: Existe vida antes do TDD, por Diana ArnosTestes: Existe vida antes do TDD, por Diana Arnos
Testes: Existe vida antes do TDD, por Diana Arnos
 
Juntando as idéias I
Juntando as idéias IJuntando as idéias I
Juntando as idéias I
 
Java: Excecoes e Tratamento de Erros
Java: Excecoes e Tratamento de ErrosJava: Excecoes e Tratamento de Erros
Java: Excecoes e Tratamento de Erros
 
Mutant Testing: um mundo para um X-Testing.
Mutant Testing: um mundo para um X-Testing.Mutant Testing: um mundo para um X-Testing.
Mutant Testing: um mundo para um X-Testing.
 
DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira mal
DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira malDEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira mal
DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira mal
 
Testes de unidade alem do basico
Testes de unidade alem do basicoTestes de unidade alem do basico
Testes de unidade alem do basico
 
7 interfaces
7 interfaces7 interfaces
7 interfaces
 
TDD no Community Launch 2010 - Christian Cunha
TDD no Community Launch 2010 - Christian CunhaTDD no Community Launch 2010 - Christian Cunha
TDD no Community Launch 2010 - Christian Cunha
 
Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!
Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!
Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!
 
[Campus code] Boas práticas em Rails
[Campus code] Boas práticas em Rails[Campus code] Boas práticas em Rails
[Campus code] Boas práticas em Rails
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
Testes Unitários - 1 Sessão beiraJUG
Testes Unitários - 1 Sessão beiraJUGTestes Unitários - 1 Sessão beiraJUG
Testes Unitários - 1 Sessão beiraJUG
 
Testes Unitários
Testes UnitáriosTestes Unitários
Testes Unitários
 
Apresentação jasmine
Apresentação jasmineApresentação jasmine
Apresentação jasmine
 
Padrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por TestesPadrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por Testes
 
Testes Unitários
Testes UnitáriosTestes Unitários
Testes Unitários
 
Qualidade de Código
Qualidade de CódigoQualidade de Código
Qualidade de Código
 

Semelhante a Refatoração de Código Legado

Coding Dojo - Funcionamento
Coding Dojo - FuncionamentoCoding Dojo - Funcionamento
Coding Dojo - Funcionamentothiagodp
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In TubaRafael Paz
 
Testes de Unidade, por que você deve começar a fazer? - Javaneiros
Testes de Unidade, por que você deve começar a fazer? - JavaneirosTestes de Unidade, por que você deve começar a fazer? - Javaneiros
Testes de Unidade, por que você deve começar a fazer? - JavaneirosRenan Siravegna
 
Teste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste vocêTeste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste vocêTiago Link
 
Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atechcesarcneto
 
A importância dos testes unitários: do código legado ao pipeline de testes em...
A importância dos testes unitários: do código legado ao pipeline de testes em...A importância dos testes unitários: do código legado ao pipeline de testes em...
A importância dos testes unitários: do código legado ao pipeline de testes em...Rodrigo Oliveira, Msc, PMP
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de softwareHeider Lopes
 
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitDomingos Teruel
 
TDD com Código Legado
TDD com Código LegadoTDD com Código Legado
TDD com Código LegadoCesar Romero
 
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...Thiago Barradas
 
TDC Florianópolis 2019. Trilha Java - Arquitetura de Testes
TDC Florianópolis 2019. Trilha Java - Arquitetura de TestesTDC Florianópolis 2019. Trilha Java - Arquitetura de Testes
TDC Florianópolis 2019. Trilha Java - Arquitetura de TestesSandro Giacomozzi
 
In tests we trust: começando com TDD, mocks e mais
In tests we trust: começando com TDD, mocks e maisIn tests we trust: começando com TDD, mocks e mais
In tests we trust: começando com TDD, mocks e maisAna Paula Gomes
 
TDC Florianópolis 2013 - Refatorar! porque ninguém gosta de código que cheir...
TDC Florianópolis 2013  - Refatorar! porque ninguém gosta de código que cheir...TDC Florianópolis 2013  - Refatorar! porque ninguém gosta de código que cheir...
TDC Florianópolis 2013 - Refatorar! porque ninguém gosta de código que cheir...Elias Souza
 
TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"Cesar Romero
 
Refinamento e boas práticas de programação
Refinamento e boas práticas de programaçãoRefinamento e boas práticas de programação
Refinamento e boas práticas de programaçãoAécio Costa
 

Semelhante a Refatoração de Código Legado (20)

Clean code
Clean codeClean code
Clean code
 
Clean code em C#
Clean code em C#Clean code em C#
Clean code em C#
 
Coding Dojo - Funcionamento
Coding Dojo - FuncionamentoCoding Dojo - Funcionamento
Coding Dojo - Funcionamento
 
Codigo limpo
Codigo limpoCodigo limpo
Codigo limpo
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In Tuba
 
Testes de Unidade, por que você deve começar a fazer? - Javaneiros
Testes de Unidade, por que você deve começar a fazer? - JavaneirosTestes de Unidade, por que você deve começar a fazer? - Javaneiros
Testes de Unidade, por que você deve começar a fazer? - Javaneiros
 
Teste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste vocêTeste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste você
 
Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atech
 
A importância dos testes unitários: do código legado ao pipeline de testes em...
A importância dos testes unitários: do código legado ao pipeline de testes em...A importância dos testes unitários: do código legado ao pipeline de testes em...
A importância dos testes unitários: do código legado ao pipeline de testes em...
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software
 
Codigo limpo.pptx
Codigo limpo.pptxCodigo limpo.pptx
Codigo limpo.pptx
 
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnit
 
Cultura de testes
Cultura de testesCultura de testes
Cultura de testes
 
TDD com Código Legado
TDD com Código LegadoTDD com Código Legado
TDD com Código Legado
 
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
 
TDC Florianópolis 2019. Trilha Java - Arquitetura de Testes
TDC Florianópolis 2019. Trilha Java - Arquitetura de TestesTDC Florianópolis 2019. Trilha Java - Arquitetura de Testes
TDC Florianópolis 2019. Trilha Java - Arquitetura de Testes
 
In tests we trust: começando com TDD, mocks e mais
In tests we trust: começando com TDD, mocks e maisIn tests we trust: começando com TDD, mocks e mais
In tests we trust: começando com TDD, mocks e mais
 
TDC Florianópolis 2013 - Refatorar! porque ninguém gosta de código que cheir...
TDC Florianópolis 2013  - Refatorar! porque ninguém gosta de código que cheir...TDC Florianópolis 2013  - Refatorar! porque ninguém gosta de código que cheir...
TDC Florianópolis 2013 - Refatorar! porque ninguém gosta de código que cheir...
 
TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"
 
Refinamento e boas práticas de programação
Refinamento e boas práticas de programaçãoRefinamento e boas práticas de programação
Refinamento e boas práticas de programação
 

Refatoração de Código Legado

  • 1. Refatoração de Código Legado, Parte 1 Os Programadores Também Choram...
  • 2. O que vamos ver neste talk ● Setting the mood ● Primeiros casos para trabalho sujo ● Discussão sobre o que podemos fazer
  • 3. Porque Refatorar? ● Sistemas mudam ● 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.
  • 6.
  • 7. Como Refatorar? Existem duas maneiras 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 Criando uma rede de segurança
  • 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.