SlideShare ist ein Scribd-Unternehmen logo
1 von 71
Downloaden Sie, um offline zu lesen
Refatorar!
Porque ninguém gosta de código que cheira mal
@andreitognolo
github.com/elsouza
eliaslsouza@gmail.com
"Um bom desenvolvedor consegue entender
qualquer código.”
(Anônimo)
"Um bom programador consegue escrever
código que qualquer um entende"
(Outro anônimo, mais sábio)
Human-Readable Code
Calendar cal = new Calendar.getInstance();
cal.set(Calendar.YEAR, 2012);
cal.set(Calendar.MONTH, CALENDAR.NOVEMBER);
cal.set(Calendar.DAY, 20);
Date data = cal.getTime();
System.out.println(data);
Date data = geraData(15, Calendar.DECEMBER, 2013);
System.out.println(data);
Segundos! São apenas segundos!Segundos! São apenas segundos!
Você acha que você sempre faz um
código bom?
Você acha que a gentesempre faz um
código bom?
Saca só
Saca só:
/elsouza
if (!StringUtils.isNullOrEmpty(texto)
&& !texto.equals("")) {
//...
}
itemDePauta.adicionaValor(
"campo" +
++posicaoCampoNaTabela,
texto.replaceAll("", "")
.replaceAll("n", "")
.trim());
O que fazer então?
Sempre refatorar
?
Parte I
Como eu consigo tempo para refatorar?
100 joao if (...) {
100 joao if (...)
100 joao resultado = 1;
100 joao if (...)
100 joao resultado = 2;
150 joaquim if (...)
150 joaquim resultado = 3;
100 joao }
"The single most important trait of a professional programmer
is personal responsibility [...]. A professional
programmer does not pass
that responsibility off
on others".
(Uncle Bob)
Tem refatoração que não da
problema...
if (!StringUtils.isNullOrEmpty(texto)
&& !texto.equals("")) {
//...
}
if (!StringUtils.isNullOrEmpty(texto)) {
//...
}
itemDePauta.adicionaValor(
"campo" +
++posicaoCampoNaTabela,
texto.replaceAll("", "")
.replaceAll("n", "")
.trim());
itemDePauta.adicionaValor(
"campo" +
++posicaoCampoNaTabela,
texto.replaceAll("n", "")
.trim());
E isso é ainda mais verdade
se você utilizar as
ferramentas de
refatoração de sua
IDE
sempre que você modifica
algo em um método, você
tem que deixar ele melhor
do que encontrou
Moral da história
Ah, mas e quando tenho que
alterar uma funcionalidade já
existente, como eu faço?
#1
Tem teste?
Não...
Escrever teste
Implementar
E quando o código já existe, funciona e
eu quero melhorar?
O que é refatorar?
"é o processo de modificar
um sistema de software para
melhorar a estrutura interna
do código sem alterar
seu comportamento
externo"
Wikipedia
Alterar código que existe e
funciona?
Se eu tenho cobertura de testes,
eu sou corajoso
Escrever teste
Refatorar
Eu começo a refatorar pelo mesmo caminho
que eu começo a implementar: o TESTE
Escrever
teste
Implementar
Escrever
teste
Refatorar
Escrever teste
Implementa nova funcionalidade
Refatora o que acabou de desenvolver
Refatora o que já existe
Pequenas refatorações a cada momento
Não existem refatorações
monstruosas sem pequenos passos
Passos consistentes
Parte II
Técnicas de refatoração
O que refatorar?
Code Smells
Código duplicado
Código duplicado
if (temComplexidadeCondicional){
codigo = "Meu deus, como cheira mal";
} else {
codigo = "Legal!";
}
● Sistema de vendas
● Cada venda tem itens
● O valor total da venda é a soma dos itens
● Uma venda pode ser parcelada
● Se a venda for parcelada ela pode ter juros
Cenário
Métodolongo
Complexidade
condicional
Métodolongo
Complexidade
condicional
Princípio da
responsabilidade
única (Classe enorme)
Métodolongo
(clique para ver o vídeo)
1. Criar classe VendaAPrazo e VendaAVista
2. Introduce Factory (roda teste)
3. Alterar o método factory (roda teste)
4. Classe Venda abstract
5. Extract Method calcularJuros (roda teste)
6. CalcularJuros na VendaAVista, retornar 1 (roda teste)
7. CalcularJuros na VendaAPrazo, fazer conta (roda teste)
8. CalcularJuros na Venda como abstract (roda teste)
9. Tirar a factory (?)
Roteiro
(clique para ver o vídeo)
Resumo
● Ser responsável de verdade pelo seu código
● Você não vai ter tempo/dinheiro para uma refatoração grande
● Pequenos passos, passos consistentes
● Refatorando continuamente
● Saber identificar os smells é o primeiro passo
● Conhecer as técnicas de refatoração é essencial
Onde saber mais?
Refatorar! Porque ninguém gosta de código que cheira mal

Weitere ähnliche Inhalte

Was ist angesagt?

Eu não sou um "bom programador"!
Eu não sou um "bom programador"!Eu não sou um "bom programador"!
Eu não sou um "bom programador"!Gustavo Pereira
 
Seja Um Programador Pragmatico
Seja Um Programador PragmaticoSeja Um Programador Pragmatico
Seja Um Programador PragmaticoLeonardo Fernandes
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013Giovanni Bassi
 
E você pensava que tdd era coisa de javaneiro
E você pensava que tdd era coisa de javaneiroE você pensava que tdd era coisa de javaneiro
E você pensava que tdd era coisa de javaneiroPaulo Alves Junior
 
XP Conf BR: eXtreme Programming para programadores. Aplicando XP em seu código!
XP Conf BR: eXtreme Programming para programadores. Aplicando XP em seu código!XP Conf BR: eXtreme Programming para programadores. Aplicando XP em seu código!
XP Conf BR: eXtreme Programming para programadores. Aplicando XP em seu código!Mauricio Andreazza
 
Software de qualidade e qualidade de código
Software de qualidade e qualidade de códigoSoftware de qualidade e qualidade de código
Software de qualidade e qualidade de códigoGuilherme Silveira
 
Arquitetura em camadas em python e quanto isso pode ajudar
Arquitetura em camadas em python e quanto isso pode ajudarArquitetura em camadas em python e quanto isso pode ajudar
Arquitetura em camadas em python e quanto isso pode ajudarBetter Developer
 
Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)Rodrigo Kono
 
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
 
Aula 28,29 e 30 w3 c, versões, html5
Aula 28,29 e 30   w3 c, versões, html5Aula 28,29 e 30   w3 c, versões, html5
Aula 28,29 e 30 w3 c, versões, html5Jolvani Morgan
 
Palestra: Introdução à TypeScript & Features Ts 2.x
Palestra: Introdução à TypeScript & Features Ts 2.x Palestra: Introdução à TypeScript & Features Ts 2.x
Palestra: Introdução à TypeScript & Features Ts 2.x Glaucia Lemos
 
JavaScript - Aula Introdutória
JavaScript - Aula IntrodutóriaJavaScript - Aula Introdutória
JavaScript - Aula Introdutórialucasleite
 
WebCamps Software Testing
WebCamps Software TestingWebCamps Software Testing
WebCamps Software TestingRodrigo Vidal
 

Was ist angesagt? (20)

Eu não sou um "bom programador"!
Eu não sou um "bom programador"!Eu não sou um "bom programador"!
Eu não sou um "bom programador"!
 
Programação Orientada a Gambiarra
Programação Orientada a GambiarraProgramação Orientada a Gambiarra
Programação Orientada a Gambiarra
 
Seja Um Programador Pragmatico
Seja Um Programador PragmaticoSeja Um Programador Pragmatico
Seja Um Programador Pragmatico
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013
 
POG nunca mais - SOLISC
POG nunca mais - SOLISCPOG nunca mais - SOLISC
POG nunca mais - SOLISC
 
E você pensava que tdd era coisa de javaneiro
E você pensava que tdd era coisa de javaneiroE você pensava que tdd era coisa de javaneiro
E você pensava que tdd era coisa de javaneiro
 
XP Conf BR: eXtreme Programming para programadores. Aplicando XP em seu código!
XP Conf BR: eXtreme Programming para programadores. Aplicando XP em seu código!XP Conf BR: eXtreme Programming para programadores. Aplicando XP em seu código!
XP Conf BR: eXtreme Programming para programadores. Aplicando XP em seu código!
 
Software de qualidade e qualidade de código
Software de qualidade e qualidade de códigoSoftware de qualidade e qualidade de código
Software de qualidade e qualidade de código
 
Arquitetura em camadas em python e quanto isso pode ajudar
Arquitetura em camadas em python e quanto isso pode ajudarArquitetura em camadas em python e quanto isso pode ajudar
Arquitetura em camadas em python e quanto isso pode ajudar
 
Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)
 
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!
 
Aula 28,29 e 30 w3 c, versões, html5
Aula 28,29 e 30   w3 c, versões, html5Aula 28,29 e 30   w3 c, versões, html5
Aula 28,29 e 30 w3 c, versões, html5
 
Coding dojo
Coding dojoCoding dojo
Coding dojo
 
Palestra: Introdução à TypeScript & Features Ts 2.x
Palestra: Introdução à TypeScript & Features Ts 2.x Palestra: Introdução à TypeScript & Features Ts 2.x
Palestra: Introdução à TypeScript & Features Ts 2.x
 
JUnit Experience
JUnit ExperienceJUnit Experience
JUnit Experience
 
Coding Dojo em 10 Minutos!
Coding Dojo em 10 Minutos!Coding Dojo em 10 Minutos!
Coding Dojo em 10 Minutos!
 
JavaScript - Aula Introdutória
JavaScript - Aula IntrodutóriaJavaScript - Aula Introdutória
JavaScript - Aula Introdutória
 
Postgres Chainsaw Massacre
Postgres Chainsaw MassacrePostgres Chainsaw Massacre
Postgres Chainsaw Massacre
 
Java script
Java scriptJava script
Java script
 
WebCamps Software Testing
WebCamps Software TestingWebCamps Software Testing
WebCamps Software Testing
 

Ähnlich wie Refatorar! Porque ninguém gosta de código que cheira mal

TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"thiagobapt
 
Como usar IA para melhorar a qualidade do seu código
Como usar IA para melhorar a qualidade do seu códigoComo usar IA para melhorar a qualidade do seu código
Como usar IA para melhorar a qualidade do seu códigoEvandro da Silva Amparo
 
Test-Driven Development with PHP
Test-Driven Development with PHPTest-Driven Development with PHP
Test-Driven Development with PHPCezar Souza
 
Boas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_softwareBoas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_softwareivanassisleal
 
Exemplos de Design Patterns em Java
Exemplos de Design Patterns em JavaExemplos de Design Patterns em Java
Exemplos de Design Patterns em Javaalexmacedo
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a TestesGregorio Melo
 
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
 
Sistemas para o Mundo Real
Sistemas para o Mundo RealSistemas para o Mundo Real
Sistemas para o Mundo RealLeandro Silva
 
Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017Thiago Barradas
 
Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atechcesarcneto
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do MantraDionatan default
 

Ähnlich wie Refatorar! Porque ninguém gosta de código que cheira mal (20)

Testes de software de A a Z
Testes de software de A a ZTestes de software de A a Z
Testes de software de A a Z
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"
 
Como usar IA para melhorar a qualidade do seu código
Como usar IA para melhorar a qualidade do seu códigoComo usar IA para melhorar a qualidade do seu código
Como usar IA para melhorar a qualidade do seu código
 
Test-Driven Development with PHP
Test-Driven Development with PHPTest-Driven Development with PHP
Test-Driven Development with PHP
 
Boas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_softwareBoas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_software
 
Exemplos de Design Patterns em Java
Exemplos de Design Patterns em JavaExemplos de Design Patterns em Java
Exemplos de Design Patterns em Java
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
TDD
TDDTDD
TDD
 
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
 
Test-driven Development
Test-driven DevelopmentTest-driven Development
Test-driven Development
 
Sistemas para o Mundo Real
Sistemas para o Mundo RealSistemas para o Mundo Real
Sistemas para o Mundo Real
 
Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017
 
Debugging node
Debugging nodeDebugging node
Debugging node
 
Vivendo de hacking
Vivendo de hackingVivendo de hacking
Vivendo de hacking
 
Code smell gsw
Code smell   gswCode smell   gsw
Code smell gsw
 
O programador pragmático
O programador pragmáticoO programador pragmático
O programador pragmático
 
Anti-patterns
Anti-patternsAnti-patterns
Anti-patterns
 
Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atech
 
Minicurso de TDD
Minicurso de TDDMinicurso de TDD
Minicurso de TDD
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do Mantra
 

Mehr von Andrei Tognolo

Mais de 24 anos de Scrum - Ainda faz sentido usar?
Mais de 24 anos de Scrum - Ainda faz sentido usar?Mais de 24 anos de Scrum - Ainda faz sentido usar?
Mais de 24 anos de Scrum - Ainda faz sentido usar?Andrei Tognolo
 
Overcoming the fear of deployments
Overcoming the fear of deploymentsOvercoming the fear of deployments
Overcoming the fear of deploymentsAndrei Tognolo
 
Fronteiras entre o Lean e a Gambiarra
Fronteiras entre o Lean e a GambiarraFronteiras entre o Lean e a Gambiarra
Fronteiras entre o Lean e a GambiarraAndrei Tognolo
 
Reducing passive interruptions
Reducing passive interruptionsReducing passive interruptions
Reducing passive interruptionsAndrei Tognolo
 
Porque nosso time parou de estimar
Porque nosso time parou de estimarPorque nosso time parou de estimar
Porque nosso time parou de estimarAndrei Tognolo
 
Testes UI: não aceite mais falso negativos
Testes UI: não aceite mais falso negativosTestes UI: não aceite mais falso negativos
Testes UI: não aceite mais falso negativosAndrei Tognolo
 
Navegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaNavegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaAndrei Tognolo
 

Mehr von Andrei Tognolo (7)

Mais de 24 anos de Scrum - Ainda faz sentido usar?
Mais de 24 anos de Scrum - Ainda faz sentido usar?Mais de 24 anos de Scrum - Ainda faz sentido usar?
Mais de 24 anos de Scrum - Ainda faz sentido usar?
 
Overcoming the fear of deployments
Overcoming the fear of deploymentsOvercoming the fear of deployments
Overcoming the fear of deployments
 
Fronteiras entre o Lean e a Gambiarra
Fronteiras entre o Lean e a GambiarraFronteiras entre o Lean e a Gambiarra
Fronteiras entre o Lean e a Gambiarra
 
Reducing passive interruptions
Reducing passive interruptionsReducing passive interruptions
Reducing passive interruptions
 
Porque nosso time parou de estimar
Porque nosso time parou de estimarPorque nosso time parou de estimar
Porque nosso time parou de estimar
 
Testes UI: não aceite mais falso negativos
Testes UI: não aceite mais falso negativosTestes UI: não aceite mais falso negativos
Testes UI: não aceite mais falso negativos
 
Navegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaNavegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo java
 

Refatorar! Porque ninguém gosta de código que cheira mal