Refatoração

Davi Marques       William “Kina”
O que é?
O que é?
• Processo de alteração de um sistema de
  software de modo que o comportamento
  externo não mude, mas que sua estrutura
  interna seja melhorada.
Refatoração
• Então....
Refatoração
• Então....
Refatoração
• Espere! Não é bem assim. Tem um detalhe...
Refatoração
• Espere! Não é bem assim. Tem um detalhe...
• O sistema deve estar funcionando antes de
  refatorar!
Refatoração
• Espere! Não é bem assim. Tem um detalhe...
• O sistema deve estar funcionando antes de
  refatorar!
• Evite refatorar o código perto do prazo final.
Refatoração
• Espere! Não é bem assim. Tem um detalhe...
• O sistema deve estar funcionando antes de
  refatorar!
• Evite refatorar o código perto do prazo final.
• Se tiver tudo cagado, as vezes é melhor fazer
  um novo sistema ;)
Refatoração
• Como garantir que continua funcionando?
Refatoração
• Como garantir que continua funcionando?
Refatoração
• Mas testes automatizados não são custosos?!
Refatoração
• Mas testes automatizados não são custosos?!
Refatoração
Refatoração X Testes Automatizados
Refatoração
Refatoração X Testes Automatizados
Refatoração
• Quais os passos para refatorar?
Refatoração
• Quais os passos para refatorar?
• Procure os “bad smells” (maus cheiros)
Refatoração
• Como eu encontro um bad smell?
Refatoração
• Como eu encontro um bad smell?
• Não existe uma formula que diz que parte do
  código é um bad smell.
Refatoração
• Como eu encontro um bad smell?
• Não existe uma formula que diz que parte do
  código é um bad smell.
Refatoração
• Resumindo...
Refatoração
• Resumindo...
Exemplos de Bad Smells
•   Duplicated Code (Código Duplicado)
•   Long Method (Método Longo)
•   Large Class (Classe Grande)
•   Comments (Comentários)
•   Long Parameter List (Lista de Parâmetros Longa)
Catalogo de Refatorações
Catalogo de Refatorações




http://www.refactoring.com
Formato do Catalogo
• Nome da refatoração.
• Resumo da situação na qual ela é necessária e
  o que ela faz.
• Motivação para usá-la (e quando não usá-la).
• Mecânica. descrição passo a passo.
• Exemplos para ilustrar o uso.
Exemplos Refatorações
•   Extract Method (Extrair Método)
•   Pull Up Method (Subir Método na Hierarquia )
•   Substitute Algorithm (Substituir Algoritimo)
•   Replace Magic
•   Rename Method (Renomear Método)
•   Decompose Conditional (Decompor
    Condicional)
Extract Method
Extract Method
Exemplos Refatorações
•   Extract Method (Extrair Método)
•   Pull Up Method (Subir Método na Hierarquia )
•   Substitute Algorithm (Substituir Algoritimo)
•   Replace Magic Number
•   Rename Method (Renomear Método)
•   Decompose Conditional (Decompor
    Condicional)
Pull Up Method
Exemplos Refatorações
•   Extract Method (Extrair Método)
•   Pull Up Method (Subir Método na Hierarquia )
•   Substitute Algorithm (Substituir Algoritimo)
•   Replace Magic Number
•   Rename Method (Renomear Método)
•   Decompose Conditional (Decompor
    Condicional)
Substitute Algorithm
Exemplos Refatorações
•   Extract Method (Extrair Método)
•   Pull Up Method (Subir Método na Hierarquia )
•   Substitute Algorithm (Substituir Algoritimo)
•   Replace Magic Number
•   Rename Method (Renomear Método)
•   Decompose Conditional (Decompor
    Condicional)
Resumo
Resumo
• Um software é quase como um jardim.
Resumo
• Um software é quase como um jardim.
Resumo
• Um software é quase como um jardim.
Resumo
• Um software é quase como um jardim.
Resumo
• Um software é quase como um jardim.
Resumo
• Usar catalogo sistematicamente.
• Refatorar auxilia a manter o código legível e
  modificável.
• Um código legível e modificavel é mais fácil de
  ser mantido.
Lembrete
• Refatoração != refazer
• Refatoração != corrigir
• Refatoração != performance
Perguntas?

Refatoração

Notas do Editor

  • #2 [DAVI/KINA] Trabalhamos neste material sobre refatoração Fico muito feliz de ter ficado entre os mais procurados;.... Trata-se de um assunto importante e que deve estar no dia dia do dev. QUALIDADE qualidade do código facilidade de entendimento, consequentemente facilita a manutenção Teste para ver se o tamanho do texto está bom para ler. Bla bla bla bala; Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer urna nibh, accumsan ut ultrices nec, ullamcorper eget metus. Suspendisse commodo est vel augue tempor eu fringilla dui scelerisque. Sed ut magna orci. Aliquam erat volutpat. Nunc sed arcu feugiat elit laoreet pretium. Nullam nibh enim, fringilla sed molestie eu, ultrices a magna. Donec sit amet pretium dolor. Donec eget nisl orci, et auctor erat. Nunc eget sapien id urna facilis
  • #3 [DAVI/KINA] Formação Na ACCMM desde
  • #5 DAVI É simples,
  • #6 KINA Já que muda só internamente e não afeta nada!
  • #7 KINA Vamos refatorar todo o código!
  • #8 KINA
  • #9 KINA Para refatorar é preciso que o código funcione a maior parte do tempo. Não faz sentido melhorar o entendimento do código que não está certo! Falar do exemplo do parede com infiltração.
  • #10 DAVI Afinal, você está mudando o funcionamento interno. Se for algo de uma estrutura básica do sistema, pode acabar não dando tempo de testar cenários críticos.
  • #11 KINA LEMBRAR QUE A REFATORAÇÃO DEVE SER FEITA PREFERENCIALMENTE EM PEQUENAS RAJADAS E DURANTE O DESENVOLVIMENTO
  • #12 DAVI – PERGUNTAR PARA O KINA Como garantir de forma fácil que não está afetando o restante do código.
  • #13 KINA Existindo testes automáticos aumenta muito a probabilidade de não aparecer bugs. Dá mais segurança para fazer as alterações.
  • #14 DAVI – QUESTIONANDO O PESSOAL?
  • #15 KINA Quanto tempo você perde para garantir que a sua alteração tá funcionando? Falar de um exemplo simples (login, preparar cenário, etc.)
  • #16 DAVI Os testes automatizados não são pré-requisitos Só aumenta trabalho para garantir que o sistema manteve o comportamento após a refatoração Ou seja, você terá que garantir manualmente :P
  • #17 DAVI
  • #18 KINA
  • #19 KINA
  • #20 KINA
  • #22 Como?!?!? Sim... Pois é não existe uma forma sistemica que descreva que algo é ruim ou não, pois depende do contexto. E o “olhar humano” é muito mais eficiente. Pelo menos por enquanto :D
  • #23 Normalmente é quando você olha o código e tem a essa reação...
  • #25 DAVI Codigo duplicado: numero um do ranking das não conformidades Metodo longo: exemplo empresa de TV por assinatura
  • #26 KINA Apesar dos mau cheiros não serem sistemicamente “cheiraveis”, a sua solução é. Perguntar quem trabalha com Java/.net, usou Eclipse/NetBeans/IntelliJ/VS Studio Release Eclipse 2.1 ano de 2003 VS desde 2005 tem. No 2003 vc tem plugins.
  • #27 DAVI Falar sobre o catalogo disponivel nos livros e site.
  • #28 DAVI Catalogo do livro segue este padrão, e tbem no site
  • #29 DAVI Há casos que até uma linha de código compensa extrair Mau cheiro: código comentado A ideia é que um metodo tenha apenas um objetivo
  • #30 DAVI
  • #31 DAVI
  • #32 KINA
  • #33 KINA
  • #34 DAVI
  • #35 DAVI
  • #36 KINA DAVI: Converter projeto procedural em Objetos
  • #37 Perguntar quantos sistemas sem nenhuma manutenção e que estão em produção vcs conhecem.
  • #38 KINA Se não cuidar pode:
  • #39 Aparecer bugs
  • #40 Pode ser descontinuado, ou seja, morrer.
  • #41 Ficar torto, e uma vez torto é muito dificil arrumar tudo.
  • #42 Pode chegar um nível que você não consiga dar manutenção no sistema sem que gaste muito tempo.
  • #43 DAVI
  • #44 KINA