Vamos falar de Clean Code, Refatoração e TDD

160
Vamos falar de Clean Vamos falar de Clean Code, Refatoração e Code, Refatoração e TDD mais uma vez TDD mais uma vez Domingos Teruel Zend Certified Engineer

description

Slides da palestra ministrada no 4º E-TIC do Instituto Federal de Camboriu. Escrever código com baixa qualidade, de forma ilegível e confusa pode até funcionar!Tais atitudes,conscientes ou não, resultam na contração de uma dívida que cobra juros altos,perda de produtividade. Serão abordados tópicos relacionados principalmente a responsabilidade e profissionalismo no desenvolvimento de software. Pontos importantes como motivação, qualidade de código, métricas, técnicas de refactoring, desenvolvimento orientado a testes e boas práticas para manter o código limpo e evitar muitas dores de cabeça no futuro!

Transcript of Vamos falar de Clean Code, Refatoração e TDD

Page 1: Vamos falar de Clean Code, Refatoração e TDD

Vamos falar de Clean Vamos falar de Clean Code, Refatoração e Code, Refatoração e TDD mais uma vezTDD mais uma vez

Domingos TeruelZend Certified Engineer

Page 2: Vamos falar de Clean Code, Refatoração e TDD
Page 3: Vamos falar de Clean Code, Refatoração e TDD

Domingos TeruelZend Certified Engineer PHP 5.3

Tecnólogo em Processamento de dados e Gestão da Tecnologia da Informação,

especialista em interfaces de sistemas, atuando no desenvolvimento e

implementação de sistemas web com software livre e Governo Eletrônico.

Page 4: Vamos falar de Clean Code, Refatoração e TDD
Page 5: Vamos falar de Clean Code, Refatoração e TDD

Sobre o que vamos falar?Sobre o que vamos falar?

Page 6: Vamos falar de Clean Code, Refatoração e TDD

Profissionalismo e felicidadeProfissionalismo e felicidade

Page 7: Vamos falar de Clean Code, Refatoração e TDD
Page 8: Vamos falar de Clean Code, Refatoração e TDD

Insatisfação com o fracassoInsatisfação com o fracasso

Page 9: Vamos falar de Clean Code, Refatoração e TDD
Page 10: Vamos falar de Clean Code, Refatoração e TDD

Existe diferença?Existe diferença?

Page 11: Vamos falar de Clean Code, Refatoração e TDD

Insatisfação no trabalhoInsatisfação no trabalho

Page 12: Vamos falar de Clean Code, Refatoração e TDD

Você se sente profissional?Você se sente profissional?

Page 13: Vamos falar de Clean Code, Refatoração e TDD

Você se sente profissional?Você se sente profissional?

Page 14: Vamos falar de Clean Code, Refatoração e TDD

Você se sente profissional?Você se sente profissional?

Page 15: Vamos falar de Clean Code, Refatoração e TDD

Poderia ser mais produtivo?Poderia ser mais produtivo?

Page 16: Vamos falar de Clean Code, Refatoração e TDD

Sensação de impotênciaSensação de impotência

Page 17: Vamos falar de Clean Code, Refatoração e TDD

Se sente um peão de obra, trabalho braçal Se sente um peão de obra, trabalho braçal e desgastante!e desgastante!

Se sente um peão de obra, trabalho braçal Se sente um peão de obra, trabalho braçal e desgastante!e desgastante!

Page 18: Vamos falar de Clean Code, Refatoração e TDD

Qual a diferença entre cansaço e Qual a diferença entre cansaço e stress?stress?

Page 19: Vamos falar de Clean Code, Refatoração e TDD

Já teve aquele sentimento de largar

tudo?

Page 20: Vamos falar de Clean Code, Refatoração e TDD

O que mais motiva um O que mais motiva um desenvolvedor?desenvolvedor?

Page 21: Vamos falar de Clean Code, Refatoração e TDD

“Quem trabalha apenas pelo salário, ganhe o que for, será

sempre mal pago.”

(Autor desconhecido)

Page 22: Vamos falar de Clean Code, Refatoração e TDD
Page 23: Vamos falar de Clean Code, Refatoração e TDD
Page 24: Vamos falar de Clean Code, Refatoração e TDD

“Qual é a sua obraobra? Quando você se for, o

vai restar?”

(Mario Cortella)

Page 25: Vamos falar de Clean Code, Refatoração e TDD

Afinal, quanto custa a Afinal, quanto custa a bagunçabagunça para a empresa? para a empresa?

Afinal, quanto custa a Afinal, quanto custa a bagunçabagunça para a empresa? para a empresa?

Page 26: Vamos falar de Clean Code, Refatoração e TDD

Alta rotatividadeAlta rotatividade

Page 27: Vamos falar de Clean Code, Refatoração e TDD

Demora no lançamento de novas Demora no lançamento de novas funcionalidadesfuncionalidades

Demora no lançamento de novas Demora no lançamento de novas funcionalidadesfuncionalidades

Page 28: Vamos falar de Clean Code, Refatoração e TDD

Dificuldade na hora de realizar Dificuldade na hora de realizar qualquerqualquer modificação...

Page 29: Vamos falar de Clean Code, Refatoração e TDD

Alta incidência de bugs?Alta incidência de bugs?

Page 30: Vamos falar de Clean Code, Refatoração e TDD

Quanto custa a falta deconfiança do seu cliente?

Page 31: Vamos falar de Clean Code, Refatoração e TDD

Quanto tempo você perde tentando entender o código para corrigir um

bug?

Quanto tempo você perde tentando entender o código para corrigir um

bug?

Page 32: Vamos falar de Clean Code, Refatoração e TDD

Conclusão: Passamos a maior parte do tempo lendo o código!

Conclusão: Passamos a maior parte do tempo lendo o código!

Page 33: Vamos falar de Clean Code, Refatoração e TDD

Evolução da Produtividade

Page 34: Vamos falar de Clean Code, Refatoração e TDD

Clean code, o que é?Clean code, o que é?

Page 35: Vamos falar de Clean Code, Refatoração e TDD
Page 36: Vamos falar de Clean Code, Refatoração e TDD

Você teria medo de tomar o remédio?

Você teria medo de tomar o remédio?

Page 37: Vamos falar de Clean Code, Refatoração e TDD

Código feito com cuidado

Page 38: Vamos falar de Clean Code, Refatoração e TDD

Que revela intenção

Page 39: Vamos falar de Clean Code, Refatoração e TDD

simplessimples

Page 40: Vamos falar de Clean Code, Refatoração e TDD

Fácil de entenderFácil de entender

Page 41: Vamos falar de Clean Code, Refatoração e TDD

“Qualquer tolo consegue escrever código que um computador entenda.

Bons programadores escrevem Bons programadores escrevem código que humanos possam código que humanos possam

entender.entender.”

(Martin Fowler)

Page 42: Vamos falar de Clean Code, Refatoração e TDD

Funcionar é o mínimomínimo que se

espera.

Page 43: Vamos falar de Clean Code, Refatoração e TDD

Qualidade Qualidade Externa x InternaExterna x Interna

Page 44: Vamos falar de Clean Code, Refatoração e TDD

Qualidade externaexterna é aquela que você percebe logo de cara. Se ausabilidade da interface for ruim, aperformance for sofrível e defeitos acontecem com frequência, a pessoa logo percebe e sequer compra o software.

Page 45: Vamos falar de Clean Code, Refatoração e TDD

Qualidade internainterna é aquela que você só percebe com o tempo. Infelizmente o comercial não vende esse tipo de qualidade. Noentanto, é é ela que atrasa o negócio e mata a ela que atrasa o negócio e mata a empresa aos poucos, sufoca e empresa aos poucos, sufoca e aumenta os custosaumenta os custos. É ela que gera boa parte da rotatividade.

Page 46: Vamos falar de Clean Code, Refatoração e TDD

Como medir a qualidade do código?

Page 47: Vamos falar de Clean Code, Refatoração e TDD

• Linhas de código?

• Número de métodos?

• Número de classes?

• Linhas de código por método?

• Complexidade ciclomática?

• Número de estruturas de decisão?

?

Page 48: Vamos falar de Clean Code, Refatoração e TDD
Page 49: Vamos falar de Clean Code, Refatoração e TDD

WTF

Page 50: Vamos falar de Clean Code, Refatoração e TDD

WTF

WTF

Page 51: Vamos falar de Clean Code, Refatoração e TDD

WTF

WTF

WTF

Page 52: Vamos falar de Clean Code, Refatoração e TDD

dificuldade de entenderdificuldade de entender

Page 53: Vamos falar de Clean Code, Refatoração e TDD

nivel máximo de sujeiranivel máximo de sujeira

Page 54: Vamos falar de Clean Code, Refatoração e TDD

Debate: Até que ponto vale apena continuar mantendo um projeto

vivo?

Debate: Até que ponto vale apena continuar mantendo um projeto

vivo?

Page 55: Vamos falar de Clean Code, Refatoração e TDD

Falar é fácilFalar é fácil

Page 56: Vamos falar de Clean Code, Refatoração e TDD

O desafio é criar código de qualidade!

O desafio é criar código de qualidade!

Page 57: Vamos falar de Clean Code, Refatoração e TDD

No entanto, falar é o primeiro passo rumo a melhoria!

No entanto, falar é o primeiro passo rumo a melhoria!

Page 58: Vamos falar de Clean Code, Refatoração e TDD

Quatro estágios necessários para

adquirir novos novos hábitoshábitos

Page 59: Vamos falar de Clean Code, Refatoração e TDD

Estágio 1

“Inconsciente e sem “Inconsciente e sem habilidade”habilidade”

Ignoramos o comportamento e o

hábito

Page 60: Vamos falar de Clean Code, Refatoração e TDD

Estágio 2

“Consciente e sem “Consciente e sem habilidade”habilidade”

Conhecemos o comportamento mas

ainda não temos o hábito de aplicá-lo”

Page 61: Vamos falar de Clean Code, Refatoração e TDD

Estágio 3

“Consciente e “Consciente e habilidoso”habilidoso”

Nos sentimos confortáveis com pela prática que vamos

adquirindo com o tempo

Page 62: Vamos falar de Clean Code, Refatoração e TDD

Estágio 4

“Inconsciente e “Inconsciente e habilidoso”habilidoso”

O hábito se torna uma coisa natural

Page 63: Vamos falar de Clean Code, Refatoração e TDD

Escrever código limpo requer muita Escrever código limpo requer muita prática e habilidade!prática e habilidade!

Escrever código limpo requer muita Escrever código limpo requer muita prática e habilidade!prática e habilidade!

Page 64: Vamos falar de Clean Code, Refatoração e TDD

Començando a treinarComençando a treinar

Page 65: Vamos falar de Clean Code, Refatoração e TDD

Nomes estranhosNomes estranhos

Page 66: Vamos falar de Clean Code, Refatoração e TDD

Limitação históricaLimitação histórica

Page 67: Vamos falar de Clean Code, Refatoração e TDD

1. READ INPUT TAPE A1, B1, C1;2. 501 FORMAT A1;3. IF (A1) 777, 777, 7774. IF (B1) 888, 888, 8885. IF (C1) 999, 999, 9996. STOP 17. 799 S = FLOATF(A1 + B1 + C1) / 2.08. WRITE TO TAPE S9. END PROCESS

As linguagens não ajudavam muito

As linguagens não ajudavam muito

Page 68: Vamos falar de Clean Code, Refatoração e TDD

Os ambientes não ajudavam

Os ambientes não ajudavam

Page 69: Vamos falar de Clean Code, Refatoração e TDD

Nem os computadoresNem os computadores

Page 70: Vamos falar de Clean Code, Refatoração e TDD

Deixaram essa herança maldita!

Deixaram essa herança maldita!

Page 71: Vamos falar de Clean Code, Refatoração e TDD

Aprendendo com os mestres

Aprendendo com os mestres

Page 72: Vamos falar de Clean Code, Refatoração e TDD

1. // Descrição da maquina2. $m_desc;3. // Resultado parcial da soma4. $s1;5. // Cor dos olhos6. $cOlhos;7. // Valor do índice temporário8. $aux;

Page 73: Vamos falar de Clean Code, Refatoração e TDD

revela a intençãorevela a intenção

Page 74: Vamos falar de Clean Code, Refatoração e TDD

1. // Descrição da maquina2. $m_desc;3. // Resultado parcial da soma4. $s1;5. // Cor dos olhos6. $cOlhos;7. // Valor do índice temporário8. $aux;

Page 75: Vamos falar de Clean Code, Refatoração e TDD

1. // Descrição da maquina2. $descricaoDaMaquina;3. // Resultado parcial da soma4. $resultadoParcialSoma;5. // Cor dos olhos6. $corDosOlhos;7. // Valor do índice temporário8. $valorDoIndiceTemporario;

Page 76: Vamos falar de Clean Code, Refatoração e TDD

1.2. $descricaoDaMaquina;3.4. $resultadoParcialSoma;5.6. $corDosOlhos;7.8. $valorDoIndiceTemporario;

Page 77: Vamos falar de Clean Code, Refatoração e TDD

1.$descricaoDaMaquina;2.$resultadoParcialSoma;3.$corDosOlhos;4.$valorDoIndiceTemporario;

Page 78: Vamos falar de Clean Code, Refatoração e TDD

Não seja genéricoNão seja genérico

Page 79: Vamos falar de Clean Code, Refatoração e TDD

1. // Processa folha de pagamento2. processa()processa();3. // Calcula o imposto de renda ret.4. calcula();5. // Renderiza o relatório de alunos6. renderiza();7. // Totaliza as estatísticas da ligação8. totaliza()totaliza();

Page 80: Vamos falar de Clean Code, Refatoração e TDD

1. // Processa folha de pagamento2. processaFolhaPagamento()processaFolhaPagamento();3. // Calcula o imposto de renda ret.4. calculaImpostoRetido()calculaImpostoRetido();5. // Renderiza o relatório de alunos6. renderizaRelatorioAlunos()renderizaRelatorioAlunos();7. // Totaliza as estatísticas da ligação8. totalizaEstatisticasLigacao()totalizaEstatisticasLigacao();

Page 81: Vamos falar de Clean Code, Refatoração e TDD

1. 2. processaFolhaPagamento()processaFolhaPagamento();3. 4. calculaImpostoRetido()calculaImpostoRetido();5. 6. renderizaRelatorioAlunos()renderizaRelatorioAlunos();7. 8. totalizaEstatisticasLigacao()totalizaEstatisticasLigacao();

Page 82: Vamos falar de Clean Code, Refatoração e TDD

1. processaFolhaPagamento()processaFolhaPagamento();2. calculaImpostoRetido()calculaImpostoRetido();3. renderizaRelatorioAlunos()renderizaRelatorioAlunos();4. totalizaEstatisticasLigacao()totalizaEstatisticasLigacao();

Page 83: Vamos falar de Clean Code, Refatoração e TDD

Simplifique estruturas de decisão

Simplifique estruturas de decisão

Page 84: Vamos falar de Clean Code, Refatoração e TDD

<?phpclass Taximetro { public function calculaValorDaCorrida($hora) { if ($hora > 22:00 || $hora < 06:00) { return $this->distancia * 3.90; } else { return $this->distancia * 2.10; } }}

Page 85: Vamos falar de Clean Code, Refatoração e TDD

<?phpclass Taximetro { public function calculaValorDaCorrida($hora) { if () { return $this->distancia * 3.90; } else { return $this->distancia * 2.10; } }}

Page 86: Vamos falar de Clean Code, Refatoração e TDD

<?phpclass Taximetro { public function calculaValorDaCorrida($hora) { if ($this->ehBandeiraDois($hora)) { return $this->distancia * 3.90; } else { return $this->distancia * 2.10; } }}

Page 87: Vamos falar de Clean Code, Refatoração e TDD

<?phpclass Taximetro { public function calculaValorDaCorrida($hora) { if ($this->ehBandeiraDois($hora)) { return $this->distancia * 3.90; } else { return $this->distancia * 2.10; } } public function ehBandeiraDois($hora) { return $hora > 22:00 || $hora < 06:00; }}

Page 88: Vamos falar de Clean Code, Refatoração e TDD

Números mágicosNúmeros mágicos

Page 89: Vamos falar de Clean Code, Refatoração e TDD

<?php<?phpclassclass TaximetroTaximetro {{ publicpublic functionfunction calculaValorDaCorridacalculaValorDaCorrida(($hora$hora)) {{ ifif ( ($this->ehBandeiraDois($hora)$this->ehBandeiraDois($hora)) {) { returnreturn $this->distancia ** 3.903.90;; } } elseelse {{ returnreturn $this->distancia ** 2.102.10;; } } } } publicpublic functionfunction ehBandeiraDoisehBandeiraDois(($hora$hora)) {{ returnreturn $hora$hora >> 2222::0000 |||| $hora$hora << 0606::0000;; } }}}

Page 90: Vamos falar de Clean Code, Refatoração e TDD

<?php<?phpclassclass TaximetroTaximetro {{ publicpublic functionfunction calculaValorDaCorridacalculaValorDaCorrida(($hora$hora)) {{ ifif ( ($this->ehBandeiraDois($hora)$this->ehBandeiraDois($hora)) {) { returnreturn $$this->distancia **;; } } elseelse {{ returnreturn $$this->distancia **;; } } } } publicpublic functionfunction ehBandeiraDoisehBandeiraDois(($hora$hora)) {{ returnreturn $hora$hora >> 2222::0000 |||| $hora$hora << 0606::0000;; } }}}

Page 91: Vamos falar de Clean Code, Refatoração e TDD

<?php<?phpclassclass TaximetroTaximetro {{ publicpublic functionfunction calculaValorDaCorridacalculaValorDaCorrida(($hora$hora)) {{ ifif ( ($this->ehBandeiraDois($hora)$this->ehBandeiraDois($hora)) {) { returnreturn $$this->distancia ** PRECO_B2PRECO_B2;; } } elseelse {{ returnreturn $$this->distancia ** PRECO_B1PRECO_B1;; } } } } publicpublic functionfunction ehBandeiraDoisehBandeiraDois(($hora$hora)) {{ returnreturn $hora$hora >> 2222::0000 |||| $hora$hora << 0606::0000;; } }}}

Page 92: Vamos falar de Clean Code, Refatoração e TDD

<?php<?phpclassclass TaximetroTaximetro {{ publicpublic functionfunction calculaValorDaCorridacalculaValorDaCorrida(($hora$hora)) {{ ifif ( ($this->ehBandeiraDois($hora)$this->ehBandeiraDois($hora)) {) { returnreturn $$this->distancia ** PRECO_BANDEIRA2PRECO_BANDEIRA2;; } } elseelse {{ returnreturn $$this->distancia ** PRECO_BANDEIRA1PRECO_BANDEIRA1;; } } } } publicpublic functionfunction ehBandeiraDoisehBandeiraDois(($hora$hora)) {{ returnreturn $hora$hora >> 2222::0000 |||| $hora$hora << 0606::0000;; } }}}

Page 93: Vamos falar de Clean Code, Refatoração e TDD

Saindo do labirintoSaindo do labirinto

Page 94: Vamos falar de Clean Code, Refatoração e TDD

<?php...function calculaValorDaCorrida($hora) { if ($hora > 22:00 || $hora < 06:00) { return $this->distancia * 3.90; } else { if ($this->diaDaSemana == 'Domingo') { return $this->distancia * 2.9; }else { return $this->distancia * 2.10; } }}...

Page 95: Vamos falar de Clean Code, Refatoração e TDD

distância da margemdistância da margem

Page 96: Vamos falar de Clean Code, Refatoração e TDD

<?php...function calculaValorDaCorrida($hora) { if ($hora > 22:00 || $hora < 06:00) { return $this->distancia * 3.90; } else { if ($this->diaDaSemana == 'Domingo') { return $this->distancia * 2.9; }else { return $this->distancia * 2.10; } }}...

Page 97: Vamos falar de Clean Code, Refatoração e TDD

<?php...function calculaValorDaCorrida($hora) { if () { return $this->distancia * 3.90; } else { if () { return $this->distancia * 2.9; }else { return $this->distancia * 2.10; } }}...

Page 98: Vamos falar de Clean Code, Refatoração e TDD

<?php...function calculaValorDaCorrida() { if ($this->ehBandeiraDois()) { return $this->distancia * 3.90; } else { if ($this->ehHorarioDeDomingo()) { return $this->distancia * 2.9; }else { return $this->distancia * 2.10; } }}...

Page 99: Vamos falar de Clean Code, Refatoração e TDD

<?php..function calculaValorDaCorrida() { if ($this->ehBandeiraDois()) { return $this->distancia * 3.90; } if ($this->ehHorarioDeDomingo()) { return $this->distancia * 2.9; }else { return $this->distancia * 2.10; }}...

Page 100: Vamos falar de Clean Code, Refatoração e TDD

<?php...function calculaValorDaCorrida() { if ($this->ehBandeiraDois()) { return $this->distancia * 3.90; } if ($this->ehHorarioDeDomingo()) { return $this->distancia * 2.9; }else { return $this->distancia * 2.10; }}...

Page 101: Vamos falar de Clean Code, Refatoração e TDD

<?php...function calculaValorDaCorrida() { if ($this->ehBandeiraDois()) { return $this->distancia * 3.90; } if ($this->ehHorarioDeDomingo()) { return $this->distancia * 2.9; } return $this->distancia * 2.10;

}...

Page 102: Vamos falar de Clean Code, Refatoração e TDD

<?php...function calculaValorDaCorrida() { if ($this->ehBandeiraDois()) { return $this->distancia * PRECO_BANDEIRA2; } if ($this->ehHorarioDeDomingo()) { return $this->distancia * PRECO_DE_DOMINGO; } return $this->distancia * PRECO_BANDEIRA1;} ...

Page 103: Vamos falar de Clean Code, Refatoração e TDD

medo de estragar algo?medo de estragar algo?

Page 104: Vamos falar de Clean Code, Refatoração e TDD
Page 105: Vamos falar de Clean Code, Refatoração e TDD

economize, teste mais cedo!

economize, teste mais cedo!

Page 106: Vamos falar de Clean Code, Refatoração e TDD

Mas o que é refatorar?Mas o que é refatorar?

Page 107: Vamos falar de Clean Code, Refatoração e TDD

“Alteração feita na estrutura interna do software para torná-

lo mais fácil de ser entendido e menos custoso

de ser modificado sem alterar seu comportamento

observável.”

(Martin Fowler)

Page 108: Vamos falar de Clean Code, Refatoração e TDD

“Refactoring é a arte de evoluir o design do código existente.”

(William C. Wake)

Page 109: Vamos falar de Clean Code, Refatoração e TDD

“Refatorar é uma forma de manter seu software

sustentável e competitivo com o passar do tempo.”

Page 110: Vamos falar de Clean Code, Refatoração e TDD

Refatorar é uma forma de investimento

Refatorar é uma forma de investimento

Page 111: Vamos falar de Clean Code, Refatoração e TDD

Tempo investido refatorando é proporcional ao tempo

economizado com o entendimento do código multiplicado pelo número

de pessoas na equipe.

(Rodrigo Branas - Developer)

Page 112: Vamos falar de Clean Code, Refatoração e TDD

A fórmula matemática do refactoring:

Tr = Te * tamanho da equipe

1 hora investida refatorando é proporcional a

8 horas economizadas com o entendimento em uma equipe de 8

pessoas.

Isso sem falar em flexibilidade, redução na quantidade de

defeitos e reuso.

Page 113: Vamos falar de Clean Code, Refatoração e TDD

infelizmente, o inverso também é verdadeiro

infelizmente, o inverso também é verdadeiro

Page 114: Vamos falar de Clean Code, Refatoração e TDD

Como vendervender atividades de refatoração para o seu gerente?

Como vendervender atividades de refatoração para o seu gerente?

Page 115: Vamos falar de Clean Code, Refatoração e TDD

Diálogo entre o Desenvolvedor e o Gerente

Desenvolvedor: João, preciso fazer um refactoring no código!Gerente: Refactoring?! O que é isso, você vai melhorar a performance?Desenvolvedor: Não, não...Gerente: Vai deixar a interface mais bonita e mais fácil de ser utilizada?Desenvolvedor: Não...Gerente: Então? O que é isso?Desenvolvedor: “Vou fazer uma alteração na estrutura interna do software,para torná-lo mais fácil de ser entendido e menos custoso de sermodificado, sem alterar seu comportamento observável.” (Martin Fowler)Gerente: Não.

Page 116: Vamos falar de Clean Code, Refatoração e TDD

Refatore com um propósito, evite refatorar apenas por

refatorar

Refatore com um propósito, evite refatorar apenas por

refatorar

Page 117: Vamos falar de Clean Code, Refatoração e TDD

Atente-se as oportunidadesoportunidades!

Atente-se as oportunidadesoportunidades!

Page 118: Vamos falar de Clean Code, Refatoração e TDD

Aproveite a correçãocorreção de um defeito para refatorar!

Aproveite a correçãocorreção de um defeito para refatorar!

Page 119: Vamos falar de Clean Code, Refatoração e TDD

Vai adicionaradicionar algo novo, aproveite para refatorar!

Vai adicionaradicionar algo novo, aproveite para refatorar!

Page 120: Vamos falar de Clean Code, Refatoração e TDD

Refatore quando precisar entenderentender uma parte do código

Refatore quando precisar entenderentender uma parte do código

Page 121: Vamos falar de Clean Code, Refatoração e TDD

Os 7 principais inimigos da Os 7 principais inimigos da refatoraçãorefatoração

Os 7 principais inimigos da Os 7 principais inimigos da refatoraçãorefatoração

Page 122: Vamos falar de Clean Code, Refatoração e TDD

DesconhecimentoDesconhecimentoDesconhecimentoDesconhecimento

Page 123: Vamos falar de Clean Code, Refatoração e TDD

Não se dar conta do problema é uma das principais causas. É É

comum ver desenvolvedores comum ver desenvolvedores experientes que não dão experientes que não dão

atenção a qualidade do código.atenção a qualidade do código.

Page 124: Vamos falar de Clean Code, Refatoração e TDD

ImediatismoImediatismoImediatismoImediatismo

Page 125: Vamos falar de Clean Code, Refatoração e TDD

Pensar apenas em resolver o resolver o problemaproblema, sem considerar que a natureza do desenvolvimento

de software é a mudança.

Page 126: Vamos falar de Clean Code, Refatoração e TDD

Janelas quebradasJanelas quebradasJanelas quebradasJanelas quebradas

Page 127: Vamos falar de Clean Code, Refatoração e TDD

Temos dificuldade em lidar com janelas quebradas. Seja numa

dieta, relacionamento ou desenvolvimento de software, o

desânimo das janelas desânimo das janelas quebradas leva ao fracassoquebradas leva ao fracasso.

Page 128: Vamos falar de Clean Code, Refatoração e TDD

Nível técnico baixoNível técnico baixoNível técnico baixoNível técnico baixo

Page 129: Vamos falar de Clean Code, Refatoração e TDD

É fácil culpar o estagiário. É preciso ter pessoas com nível

técnico alto e senso crítico apurado para zelar pelas zelar pelas boaspráticas e manter a boaspráticas e manter a

ordem do códigoordem do código.

Page 130: Vamos falar de Clean Code, Refatoração e TDD

Falta de trabalho em Falta de trabalho em equipeequipe

Falta de trabalho em Falta de trabalho em equipeequipe

Page 131: Vamos falar de Clean Code, Refatoração e TDD

O código pertence a equipe, não ao seu autor.

Todos devem se Todos devem se responsabilizar e zelar responsabilizar e zelar

pelo bem comumpelo bem comum.

Page 132: Vamos falar de Clean Code, Refatoração e TDD

GerenciamentoGerenciamentoGerenciamentoGerenciamento

Page 133: Vamos falar de Clean Code, Refatoração e TDD

Pressão comercialPressão comercialPressão comercialPressão comercial

Page 134: Vamos falar de Clean Code, Refatoração e TDD

Quando não Quando não refatorar?refatorar?

Quando não Quando não refatorar?refatorar?

Page 135: Vamos falar de Clean Code, Refatoração e TDD

• Quando o código simplesmente não funciona, é instáveé instável

• Se funciona, ninguém sabe ao ninguém sabe ao certo comocerto como......

• Próximo ao final do prazo de prazo de entregaentrega

Page 136: Vamos falar de Clean Code, Refatoração e TDD

A maioria das empresas precisa contrair algumas dívidascontrair algumas dívidas para

funcionar efetivamente

A maioria das empresas precisa contrair algumas dívidascontrair algumas dívidas para

funcionar efetivamente

Page 137: Vamos falar de Clean Code, Refatoração e TDD

Mas cuidado com o aumento do débito débito técnicotécnico, os juros são altos

Mas cuidado com o aumento do débito débito técnicotécnico, os juros são altos

Page 138: Vamos falar de Clean Code, Refatoração e TDD

Testes unitáriosTestes unitários

Page 139: Vamos falar de Clean Code, Refatoração e TDD

As 3 leis do TDDAs 3 leis do TDD

Page 140: Vamos falar de Clean Code, Refatoração e TDD

• Você não pode escrever o código Você não pode escrever o código até que tenha criado um teste até que tenha criado um teste falhandofalhando;

• Você não pode escrever mais Você não pode escrever mais testes do que seja suficiente para testes do que seja suficiente para falharfalhar;

• Você não pode escrever mais Você não pode escrever mais código do que o suficiente para código do que o suficiente para passar o teste que esta falhandopassar o teste que esta falhando;

Page 141: Vamos falar de Clean Code, Refatoração e TDD

1 Conceito por teste1 Conceito por teste

Page 142: Vamos falar de Clean Code, Refatoração e TDD

• Separe do teste que esteja testando com mais de um mais de um conceitoconceito em outros testes

• FaciliteFacilite o entendimento de cada teste

Page 143: Vamos falar de Clean Code, Refatoração e TDD

Os testes devem ser rápidosrápidos para executar,

pois quando são lentos a frequência de execução

diminui.

Page 144: Vamos falar de Clean Code, Refatoração e TDD

Testes não podem depender uns dos depender uns dos

outros,outros, pois se um falha os outros também

falharam

Page 145: Vamos falar de Clean Code, Refatoração e TDD

Ao executa-los mais de uma vez, devem sempre

retornar o mesmoretornar o mesmo resultado

Page 146: Vamos falar de Clean Code, Refatoração e TDD

Os testes devem ser devem ser escritos antes do escritos antes do

códigocódigo. Após o código será mais

difícil fazer o teste

Page 147: Vamos falar de Clean Code, Refatoração e TDD

O código do teste é tão código do teste é tão importante quanto o importante quanto o código da produção.código da produção.O teste precisa sofrer

alterações da mesma forma que o código

Page 148: Vamos falar de Clean Code, Refatoração e TDD

Quanto mais sujo o teste mais difícil mais difícil dar

manutenção, e menor a menor a flexibilidadeflexibilidade para alterá-

lo.

Page 149: Vamos falar de Clean Code, Refatoração e TDD

“Se você deixar seus testes apodrecerem, seu código também

apodrecerá”

Page 150: Vamos falar de Clean Code, Refatoração e TDD

Fique atento aos maus cheiros!

Fique atento aos maus cheiros!

Page 151: Vamos falar de Clean Code, Refatoração e TDD

• Comentários pobres, obsoletos e redundantes

• Código comentado

• Testes que requerem mais de um passo

• Muitos parâmetros ou parâmetros booleanos

• Métodos mortos ou que fazem muita coisa

• Responsabilidades fora do contexto

• Nomes pequenos e inexpressivos

Page 152: Vamos falar de Clean Code, Refatoração e TDD

• Duplicação

• Inconsistência

• Intenção obscura

• Variáveis e funções inexpressivas

• Despadronização

• Números mágicos

• Desencapsulamento

• Efeitos colaterais

• Testes insuficientes

Page 153: Vamos falar de Clean Code, Refatoração e TDD

ConclusãoConclusão

Page 154: Vamos falar de Clean Code, Refatoração e TDD

• Tudo o que falamos até aqui não é para ser uma lista de regras

• Você não se torna um bom programador aprendendo uma lista de regras.

• As técnicas e práticas têm que começar a fazer parte do nosso dia a dia.

• Devemos nos preocupar com a qualidade do código e não somente fazê-lo funcionar.

Page 155: Vamos falar de Clean Code, Refatoração e TDD

Você é responsável pelo código que escreve e só você!

Você é responsável pelo código que escreve e só você!

Page 156: Vamos falar de Clean Code, Refatoração e TDD

ReferênciaReferência

Page 157: Vamos falar de Clean Code, Refatoração e TDD

• Clean Code - Robert Martin

• Refactoring - Martin Fowler

• Patters of Enterprise Application Architecture - Martin Fowler

• Test-Driven Development by Example - Kent Beck

• Effective Java - Joshua Block

• Design Patterns - Eric Gamma, Richard Helm, Ralph Johnson e John Vlissides

• Design Patterns - Head First - Eric Freeman e Elisabeth Freeman

• Refactoring to Patterns - Joshua Kerievisky

• Domain-Driven Design - Eric Evans

• Working Effectively with Legacy Code - Michael Feathers

• Baseado no curso de Clean Code por Rodrigo Branas (www.agilecode.com.br)

ReferênciaReferência

Page 158: Vamos falar de Clean Code, Refatoração e TDD

Perguntas?Perguntas?

Page 159: Vamos falar de Clean Code, Refatoração e TDD

Participe!

Page 160: Vamos falar de Clean Code, Refatoração e TDD

[email protected] http://about.me/mingomax