SlideShare uma empresa Scribd logo
Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.br




  Princípios do Refactoring
http://www.slideshare.net/rodrigobranas
@rodrigobranas
  rodrigo.branas@gmail.com
 http://www.agilecode.com.br
Formação Acadêmica
Ciências da Computação – UFSC
Gerenciamento de Projetos - FGV

Certificações

SCJA, SCJP, SCJD, SCWCD, SCBCD, PMP, MCP e CSM
Rodrigo Branas – rodrigo.branas@gmail.com
10 anos de experiência na plataforma Java
1000 horas em sala de aula
Mais de 50 palestras em eventos

Líder da área de desenvolvimento na Gennera
Autor da revista Java Magazine
Palestrante
Instrutor da Academia Java e Agile da Globalcode
Criador dos treinamentos de Clean Code, Selenium e
Maven da Agile Code

Trabalhou com as empresas: EDS, HP, GM, Citibank,
OnCast, Globalcode, V.Office, Dígitro, Softplan, Unimed,
Suntech, Vale do Rio Doce, Senai, NET.
O que é Refactoring?
“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)
“Refactoring é a arte de evoluir o
  design do código existente.”

         (William C. Wake)
“Refactoring é uma forma de manter
seu software sustentável e competitivo
       com o passar do tempo.”

          (Rodrigo Branas)
Refatorar é uma forma de
      investimento
Tempo investido refatorando é proporcional ao
 tempo economizado com o entendimento do
código multiplicado pelo número de pessoas na
                    equipe.
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.
Infelizmente, o inverso também é
           verdadeiro
Como vender atividades de
refactoring para o seu gerente?
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 ser
modificado, sem alterar seu comportamento observável.” (Martin Fowler)

Gerente: Não.
Refatore com um propósito, evite
  refatorar apenas por refatorar
Fique atento as oportunidades
Refatore na hora de adicionar
    novas funcionalidades
Refatore quando for
 corrigir um defeito
Refatore quando precisar
entender uma parte do código
Os 7 principais inimigos da
        refatoração
Desconhecimento
Não se dar conta do problema é
  uma das principais causas. É
  comum ver desenvolvedores
experientes que não dão atenção
     a qualidade do código.
Imediatismo
Pensar apenas em resolver o
problema, sem considerar que a
natureza do desenvolvimento de
    software é a mudança.
Janelas Quebradas
Temos dificuldade em lidar com
 janelas quebradas. Seja numa
    dieta, relacionamento ou
desenvolvimento de software, o
desânimo das janelas quebradas
        leva ao fracasso.
Nível técnico baixo
É fácil culpar o estagiário. É
preciso ter pessoas com nível
  técnico alto e senso crítico
apurado para zelar pelas boas
práticas e manter a ordem do
             código.
Falta de trabalho em equipe
O código pertence a equipe, não
 ao seu autor. Todos devem se
responsabilizar e zelar pelo bem
            comum.
Gerenciamento
Normalmente, seja por
   desconhecimento ou por pressão
superior, iniciativas de refatoração são
cortadas pela gerência. Cuidado com o
 nível de maturidade técnica de quem
           toma as decisões.
Pressão comercial
Contratos mal feitos ou vendas que não
 consideram a capacidade técnica de
 entrega elevam o nível de pressão e
       também do imediatismo.
Quando você não deve
     refatorar?
Quando o código simplesmente
   não funciona, é instável
Se funciona, ninguém sabe ao
        certo como...
Próximo ao final do prazo de
         entrega
A maioria das empresas precisa
 contrair algumas dívidas para
    funcionar efetivamente
Mas cuidado com o aumento
do débito técnico, os juros são altos
Desafios da Refactoração
Refactoring

Mais conteúdo relacionado

Mais procurados

Selenium - WebDriver
Selenium - WebDriverSelenium - WebDriver
Selenium - WebDriver
Rodrigo Branas
 
[MTC 2021] Vieses da qualidade - Daniele Vieira Fiorot
[MTC 2021] Vieses da qualidade -  Daniele Vieira Fiorot[MTC 2021] Vieses da qualidade -  Daniele Vieira Fiorot
[MTC 2021] Vieses da qualidade - Daniele Vieira Fiorot
minastestingconference
 
Grunt
GruntGrunt
[MTC 2021] QAs que não codificam e seus 12% de vagas - Paulo César de Oliveira
[MTC 2021] QAs que não codificam e seus 12% de vagas - Paulo César de Oliveira[MTC 2021] QAs que não codificam e seus 12% de vagas - Paulo César de Oliveira
[MTC 2021] QAs que não codificam e seus 12% de vagas - Paulo César de Oliveira
minastestingconference
 
Como a Natura vem diminuindo seu custo de operação total com Drupal - DrupalC...
Como a Natura vem diminuindo seu custo de operação total com Drupal - DrupalC...Como a Natura vem diminuindo seu custo de operação total com Drupal - DrupalC...
Como a Natura vem diminuindo seu custo de operação total com Drupal - DrupalC...
Taller Negócio Digitais
 
Entendendo O Scrum (e como ele se encaixa na plataforma Microsoft)
Entendendo O Scrum (e como ele se encaixa na plataforma Microsoft)Entendendo O Scrum (e como ele se encaixa na plataforma Microsoft)
Entendendo O Scrum (e como ele se encaixa na plataforma Microsoft)
Giovanni Bassi
 
QA além da automação
QA além da automaçãoQA além da automação
QA além da automação
minastestingconference
 
#Moving br workshop
#Moving br workshop#Moving br workshop
#Moving br workshop
Fernanda Ferreira
 
Alm e ATLM - A importância dos lifecycles no desenvolvimento de software
Alm e ATLM - A  importância dos lifecycles no desenvolvimento de softwareAlm e ATLM - A  importância dos lifecycles no desenvolvimento de software
Alm e ATLM - A importância dos lifecycles no desenvolvimento de software
Vandre Ramos, MSc, MBA, CSM
 
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...
minastestingconference
 
PARE, entenda seu contexto e contribua de maneira efetiva como QA
PARE, entenda seu contexto e contribua de maneira efetiva como QAPARE, entenda seu contexto e contribua de maneira efetiva como QA
PARE, entenda seu contexto e contribua de maneira efetiva como QA
Frederico Augusto Do Carmo Moreira
 
TDC2018FLN | Trilha Agile - Agilidade e para desenvolvedores?
TDC2018FLN | Trilha Agile - Agilidade e para desenvolvedores?TDC2018FLN | Trilha Agile - Agilidade e para desenvolvedores?
TDC2018FLN | Trilha Agile - Agilidade e para desenvolvedores?
tdc-globalcode
 
E so mais um campinho na tela
E so mais um campinho na telaE so mais um campinho na tela
E so mais um campinho na tela
Vandre Ramos, MSc, MBA, CSM
 
Enter SCRUM
Enter SCRUMEnter SCRUM
Enter SCRUM
Breno Campos
 
Mindset de QA em Diferentes Contextos
Mindset de QA em Diferentes ContextosMindset de QA em Diferentes Contextos
Mindset de QA em Diferentes Contextos
Júlio de Lima
 
A saga do desenvolvedor java
A saga do desenvolvedor javaA saga do desenvolvedor java
A saga do desenvolvedor java
Josenaldo de Oliveira Matos Filho
 
Praticas Ágeis para desenvolvimento de Software
Praticas Ágeis para desenvolvimento de SoftwarePraticas Ágeis para desenvolvimento de Software
Praticas Ágeis para desenvolvimento de Software
Paulo Moura
 
IFSP 2015 - Cultura DevOps
IFSP 2015 - Cultura DevOpsIFSP 2015 - Cultura DevOps
IFSP 2015 - Cultura DevOps
Leonardo Comelli
 
Começando errado com php
Começando errado com phpComeçando errado com php
Começando errado com php
Marcelo Felipe Santiago Diniz
 
Perspectivas em teste de software
Perspectivas em teste de softwarePerspectivas em teste de software
Perspectivas em teste de software
Qualister
 

Mais procurados (20)

Selenium - WebDriver
Selenium - WebDriverSelenium - WebDriver
Selenium - WebDriver
 
[MTC 2021] Vieses da qualidade - Daniele Vieira Fiorot
[MTC 2021] Vieses da qualidade -  Daniele Vieira Fiorot[MTC 2021] Vieses da qualidade -  Daniele Vieira Fiorot
[MTC 2021] Vieses da qualidade - Daniele Vieira Fiorot
 
Grunt
GruntGrunt
Grunt
 
[MTC 2021] QAs que não codificam e seus 12% de vagas - Paulo César de Oliveira
[MTC 2021] QAs que não codificam e seus 12% de vagas - Paulo César de Oliveira[MTC 2021] QAs que não codificam e seus 12% de vagas - Paulo César de Oliveira
[MTC 2021] QAs que não codificam e seus 12% de vagas - Paulo César de Oliveira
 
Como a Natura vem diminuindo seu custo de operação total com Drupal - DrupalC...
Como a Natura vem diminuindo seu custo de operação total com Drupal - DrupalC...Como a Natura vem diminuindo seu custo de operação total com Drupal - DrupalC...
Como a Natura vem diminuindo seu custo de operação total com Drupal - DrupalC...
 
Entendendo O Scrum (e como ele se encaixa na plataforma Microsoft)
Entendendo O Scrum (e como ele se encaixa na plataforma Microsoft)Entendendo O Scrum (e como ele se encaixa na plataforma Microsoft)
Entendendo O Scrum (e como ele se encaixa na plataforma Microsoft)
 
QA além da automação
QA além da automaçãoQA além da automação
QA além da automação
 
#Moving br workshop
#Moving br workshop#Moving br workshop
#Moving br workshop
 
Alm e ATLM - A importância dos lifecycles no desenvolvimento de software
Alm e ATLM - A  importância dos lifecycles no desenvolvimento de softwareAlm e ATLM - A  importância dos lifecycles no desenvolvimento de software
Alm e ATLM - A importância dos lifecycles no desenvolvimento de software
 
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...
 
PARE, entenda seu contexto e contribua de maneira efetiva como QA
PARE, entenda seu contexto e contribua de maneira efetiva como QAPARE, entenda seu contexto e contribua de maneira efetiva como QA
PARE, entenda seu contexto e contribua de maneira efetiva como QA
 
TDC2018FLN | Trilha Agile - Agilidade e para desenvolvedores?
TDC2018FLN | Trilha Agile - Agilidade e para desenvolvedores?TDC2018FLN | Trilha Agile - Agilidade e para desenvolvedores?
TDC2018FLN | Trilha Agile - Agilidade e para desenvolvedores?
 
E so mais um campinho na tela
E so mais um campinho na telaE so mais um campinho na tela
E so mais um campinho na tela
 
Enter SCRUM
Enter SCRUMEnter SCRUM
Enter SCRUM
 
Mindset de QA em Diferentes Contextos
Mindset de QA em Diferentes ContextosMindset de QA em Diferentes Contextos
Mindset de QA em Diferentes Contextos
 
A saga do desenvolvedor java
A saga do desenvolvedor javaA saga do desenvolvedor java
A saga do desenvolvedor java
 
Praticas Ágeis para desenvolvimento de Software
Praticas Ágeis para desenvolvimento de SoftwarePraticas Ágeis para desenvolvimento de Software
Praticas Ágeis para desenvolvimento de Software
 
IFSP 2015 - Cultura DevOps
IFSP 2015 - Cultura DevOpsIFSP 2015 - Cultura DevOps
IFSP 2015 - Cultura DevOps
 
Começando errado com php
Começando errado com phpComeçando errado com php
Começando errado com php
 
Perspectivas em teste de software
Perspectivas em teste de softwarePerspectivas em teste de software
Perspectivas em teste de software
 

Semelhante a Refactoring

Produtividade em Desenvolvimento de Software
Produtividade em Desenvolvimento de SoftwareProdutividade em Desenvolvimento de Software
Produtividade em Desenvolvimento de Software
Rildo (@rildosan) Santos
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme Programming
Rodrigo Branas
 
Scrum 8
Scrum 8Scrum 8
Gerenciamento de equipes no desenvolvimento de software
Gerenciamento de equipes no desenvolvimento de softwareGerenciamento de equipes no desenvolvimento de software
Gerenciamento de equipes no desenvolvimento de software
Roberto Brandini
 
Fatores que influenciam na longevidade de um Software
Fatores que influenciam na longevidade de um SoftwareFatores que influenciam na longevidade de um Software
Fatores que influenciam na longevidade de um Software
Pablo Dall'Oglio
 
Palestra papel do desenvolvedor no sucesso da empresa
Palestra papel do desenvolvedor no sucesso da empresaPalestra papel do desenvolvedor no sucesso da empresa
Palestra papel do desenvolvedor no sucesso da empresa
Henrique Nunes Bez Fontana
 
Scrum
ScrumScrum
Métodos Ágeis para Desenvolvimento de Software
Métodos Ágeis para Desenvolvimento de SoftwareMétodos Ágeis para Desenvolvimento de Software
Métodos Ágeis para Desenvolvimento de Software
alexandre_malaquias
 
Uma abordagem às Metodologias Ágeis em Gerência de Projetos
Uma abordagem às Metodologias Ágeis em Gerência de ProjetosUma abordagem às Metodologias Ágeis em Gerência de Projetos
Uma abordagem às Metodologias Ágeis em Gerência de Projetos
Giovani Elísio Silva
 
Desenvolvimento ágil de software
Desenvolvimento ágil de softwareDesenvolvimento ágil de software
Desenvolvimento ágil de software
diogenes.araujo
 
Scrum experience bo tutorial scrum v15
Scrum experience bo tutorial scrum v15Scrum experience bo tutorial scrum v15
Scrum experience bo tutorial scrum v15
claudioluciodovallopes
 
Metodologias Ágeis para Gestão e Planejamento de Projetos Scrum - XP - Kanban
Metodologias Ágeis para Gestão e Planejamento de Projetos Scrum - XP - KanbanMetodologias Ágeis para Gestão e Planejamento de Projetos Scrum - XP - Kanban
Metodologias Ágeis para Gestão e Planejamento de Projetos Scrum - XP - Kanban
Matheus Costa
 
Design for change: Fatores que influenciam na longevidade de um Software PHP
Design for change: Fatores que influenciam na longevidade de um Software PHPDesign for change: Fatores que influenciam na longevidade de um Software PHP
Design for change: Fatores que influenciam na longevidade de um Software PHP
Pablo Dall'Oglio
 
Como fazer a gestão do Time de Desenvolvimento
Como fazer a gestão do Time de DesenvolvimentoComo fazer a gestão do Time de Desenvolvimento
Como fazer a gestão do Time de Desenvolvimento
Aragon Vieira
 
Leds zeppellin infraestrutura de apoio ao desenvolvimento
Leds zeppellin   infraestrutura de apoio ao desenvolvimentoLeds zeppellin   infraestrutura de apoio ao desenvolvimento
Leds zeppellin infraestrutura de apoio ao desenvolvimento
ledsifes
 
Programacao Extrema
Programacao ExtremaProgramacao Extrema
Programacao Extrema
Robson Silva Espig
 
Utilizando metologias ágeis com VSTS: Scrum e XP, YES WE CAN! (ALM204)
Utilizando metologias ágeis com VSTS: Scrum e XP, YES WE CAN! (ALM204)Utilizando metologias ágeis com VSTS: Scrum e XP, YES WE CAN! (ALM204)
Utilizando metologias ágeis com VSTS: Scrum e XP, YES WE CAN! (ALM204)
André Dias
 
Scrum - Desenvolvimento Ágil
Scrum - Desenvolvimento ÁgilScrum - Desenvolvimento Ágil
Scrum - Desenvolvimento Ágil
Israel Santiago
 
Metodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareMetodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de Software
Luciano Almeida
 
Metodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareMetodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de Software
Emerson Henrique
 

Semelhante a Refactoring (20)

Produtividade em Desenvolvimento de Software
Produtividade em Desenvolvimento de SoftwareProdutividade em Desenvolvimento de Software
Produtividade em Desenvolvimento de Software
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme Programming
 
Scrum 8
Scrum 8Scrum 8
Scrum 8
 
Gerenciamento de equipes no desenvolvimento de software
Gerenciamento de equipes no desenvolvimento de softwareGerenciamento de equipes no desenvolvimento de software
Gerenciamento de equipes no desenvolvimento de software
 
Fatores que influenciam na longevidade de um Software
Fatores que influenciam na longevidade de um SoftwareFatores que influenciam na longevidade de um Software
Fatores que influenciam na longevidade de um Software
 
Palestra papel do desenvolvedor no sucesso da empresa
Palestra papel do desenvolvedor no sucesso da empresaPalestra papel do desenvolvedor no sucesso da empresa
Palestra papel do desenvolvedor no sucesso da empresa
 
Scrum
ScrumScrum
Scrum
 
Métodos Ágeis para Desenvolvimento de Software
Métodos Ágeis para Desenvolvimento de SoftwareMétodos Ágeis para Desenvolvimento de Software
Métodos Ágeis para Desenvolvimento de Software
 
Uma abordagem às Metodologias Ágeis em Gerência de Projetos
Uma abordagem às Metodologias Ágeis em Gerência de ProjetosUma abordagem às Metodologias Ágeis em Gerência de Projetos
Uma abordagem às Metodologias Ágeis em Gerência de Projetos
 
Desenvolvimento ágil de software
Desenvolvimento ágil de softwareDesenvolvimento ágil de software
Desenvolvimento ágil de software
 
Scrum experience bo tutorial scrum v15
Scrum experience bo tutorial scrum v15Scrum experience bo tutorial scrum v15
Scrum experience bo tutorial scrum v15
 
Metodologias Ágeis para Gestão e Planejamento de Projetos Scrum - XP - Kanban
Metodologias Ágeis para Gestão e Planejamento de Projetos Scrum - XP - KanbanMetodologias Ágeis para Gestão e Planejamento de Projetos Scrum - XP - Kanban
Metodologias Ágeis para Gestão e Planejamento de Projetos Scrum - XP - Kanban
 
Design for change: Fatores que influenciam na longevidade de um Software PHP
Design for change: Fatores que influenciam na longevidade de um Software PHPDesign for change: Fatores que influenciam na longevidade de um Software PHP
Design for change: Fatores que influenciam na longevidade de um Software PHP
 
Como fazer a gestão do Time de Desenvolvimento
Como fazer a gestão do Time de DesenvolvimentoComo fazer a gestão do Time de Desenvolvimento
Como fazer a gestão do Time de Desenvolvimento
 
Leds zeppellin infraestrutura de apoio ao desenvolvimento
Leds zeppellin   infraestrutura de apoio ao desenvolvimentoLeds zeppellin   infraestrutura de apoio ao desenvolvimento
Leds zeppellin infraestrutura de apoio ao desenvolvimento
 
Programacao Extrema
Programacao ExtremaProgramacao Extrema
Programacao Extrema
 
Utilizando metologias ágeis com VSTS: Scrum e XP, YES WE CAN! (ALM204)
Utilizando metologias ágeis com VSTS: Scrum e XP, YES WE CAN! (ALM204)Utilizando metologias ágeis com VSTS: Scrum e XP, YES WE CAN! (ALM204)
Utilizando metologias ágeis com VSTS: Scrum e XP, YES WE CAN! (ALM204)
 
Scrum - Desenvolvimento Ágil
Scrum - Desenvolvimento ÁgilScrum - Desenvolvimento Ágil
Scrum - Desenvolvimento Ágil
 
Metodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareMetodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de Software
 
Metodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareMetodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de Software
 

Mais de Rodrigo Branas

Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasNode.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Rodrigo Branas
 
Node.js - #6 - Core Modules - net - Rodrigo Branas
Node.js - #6 - Core Modules - net - Rodrigo BranasNode.js - #6 - Core Modules - net - Rodrigo Branas
Node.js - #6 - Core Modules - net - Rodrigo Branas
Rodrigo Branas
 
Node.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasNode.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo Branas
Rodrigo Branas
 
Node.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo BranasNode.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo Branas
Rodrigo Branas
 
Node.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo BranasNode.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo Branas
Rodrigo Branas
 
Node.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo BranasNode.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo Branas
Rodrigo Branas
 
Node.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasNode.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo Branas
Rodrigo Branas
 
#6 - Git - Desfazendo as coisas
#6 - Git - Desfazendo as coisas#6 - Git - Desfazendo as coisas
#6 - Git - Desfazendo as coisas
Rodrigo Branas
 
#5 - Git - Contribuindo com um repositório remoto
#5 - Git - Contribuindo com um repositório remoto#5 - Git - Contribuindo com um repositório remoto
#5 - Git - Contribuindo com um repositório remoto
Rodrigo Branas
 
#4 - Git - Stash
#4 - Git - Stash#4 - Git - Stash
#4 - Git - Stash
Rodrigo Branas
 
#3 - Git - Branching e Merging
#3 - Git - Branching e Merging#3 - Git - Branching e Merging
#3 - Git - Branching e Merging
Rodrigo Branas
 
#2 - Git - DAG
#2 - Git - DAG#2 - Git - DAG
#2 - Git - DAG
Rodrigo Branas
 
A evolução do AngularJS
A evolução do AngularJSA evolução do AngularJS
A evolução do AngularJS
Rodrigo Branas
 
JavaScript - Date
JavaScript - DateJavaScript - Date
JavaScript - Date
Rodrigo Branas
 
JavaScript - Expressões Regulares
JavaScript - Expressões RegularesJavaScript - Expressões Regulares
JavaScript - Expressões Regulares
Rodrigo Branas
 
Automação de Testes com AngularJS
Automação de Testes com AngularJSAutomação de Testes com AngularJS
Automação de Testes com AngularJS
Rodrigo Branas
 
Scope AngularJS
Scope AngularJSScope AngularJS
Scope AngularJS
Rodrigo Branas
 
HTTP Interceptors com AngularJS
HTTP Interceptors com AngularJSHTTP Interceptors com AngularJS
HTTP Interceptors com AngularJS
Rodrigo Branas
 
Criando serviços com AngularJS
Criando serviços com AngularJSCriando serviços com AngularJS
Criando serviços com AngularJS
Rodrigo Branas
 
Criando Filtros com AngularJS
Criando Filtros com AngularJSCriando Filtros com AngularJS
Criando Filtros com AngularJS
Rodrigo Branas
 

Mais de Rodrigo Branas (20)

Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasNode.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
 
Node.js - #6 - Core Modules - net - Rodrigo Branas
Node.js - #6 - Core Modules - net - Rodrigo BranasNode.js - #6 - Core Modules - net - Rodrigo Branas
Node.js - #6 - Core Modules - net - Rodrigo Branas
 
Node.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasNode.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo Branas
 
Node.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo BranasNode.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo Branas
 
Node.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo BranasNode.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo Branas
 
Node.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo BranasNode.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo Branas
 
Node.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasNode.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo Branas
 
#6 - Git - Desfazendo as coisas
#6 - Git - Desfazendo as coisas#6 - Git - Desfazendo as coisas
#6 - Git - Desfazendo as coisas
 
#5 - Git - Contribuindo com um repositório remoto
#5 - Git - Contribuindo com um repositório remoto#5 - Git - Contribuindo com um repositório remoto
#5 - Git - Contribuindo com um repositório remoto
 
#4 - Git - Stash
#4 - Git - Stash#4 - Git - Stash
#4 - Git - Stash
 
#3 - Git - Branching e Merging
#3 - Git - Branching e Merging#3 - Git - Branching e Merging
#3 - Git - Branching e Merging
 
#2 - Git - DAG
#2 - Git - DAG#2 - Git - DAG
#2 - Git - DAG
 
A evolução do AngularJS
A evolução do AngularJSA evolução do AngularJS
A evolução do AngularJS
 
JavaScript - Date
JavaScript - DateJavaScript - Date
JavaScript - Date
 
JavaScript - Expressões Regulares
JavaScript - Expressões RegularesJavaScript - Expressões Regulares
JavaScript - Expressões Regulares
 
Automação de Testes com AngularJS
Automação de Testes com AngularJSAutomação de Testes com AngularJS
Automação de Testes com AngularJS
 
Scope AngularJS
Scope AngularJSScope AngularJS
Scope AngularJS
 
HTTP Interceptors com AngularJS
HTTP Interceptors com AngularJSHTTP Interceptors com AngularJS
HTTP Interceptors com AngularJS
 
Criando serviços com AngularJS
Criando serviços com AngularJSCriando serviços com AngularJS
Criando serviços com AngularJS
 
Criando Filtros com AngularJS
Criando Filtros com AngularJSCriando Filtros com AngularJS
Criando Filtros com AngularJS
 

Refactoring

  • 1. Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.br Princípios do Refactoring
  • 3. @rodrigobranas rodrigo.branas@gmail.com http://www.agilecode.com.br Formação Acadêmica Ciências da Computação – UFSC Gerenciamento de Projetos - FGV Certificações SCJA, SCJP, SCJD, SCWCD, SCBCD, PMP, MCP e CSM
  • 4. Rodrigo Branas – rodrigo.branas@gmail.com 10 anos de experiência na plataforma Java 1000 horas em sala de aula Mais de 50 palestras em eventos Líder da área de desenvolvimento na Gennera Autor da revista Java Magazine Palestrante Instrutor da Academia Java e Agile da Globalcode Criador dos treinamentos de Clean Code, Selenium e Maven da Agile Code Trabalhou com as empresas: EDS, HP, GM, Citibank, OnCast, Globalcode, V.Office, Dígitro, Softplan, Unimed, Suntech, Vale do Rio Doce, Senai, NET.
  • 5. O que é Refactoring?
  • 6. “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)
  • 7. “Refactoring é a arte de evoluir o design do código existente.” (William C. Wake)
  • 8. “Refactoring é uma forma de manter seu software sustentável e competitivo com o passar do tempo.” (Rodrigo Branas)
  • 9. Refatorar é uma forma de investimento
  • 10. Tempo investido refatorando é proporcional ao tempo economizado com o entendimento do código multiplicado pelo número de pessoas na equipe.
  • 11. 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.
  • 12. Infelizmente, o inverso também é verdadeiro
  • 13. Como vender atividades de refactoring para o seu gerente?
  • 14. 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 ser modificado, sem alterar seu comportamento observável.” (Martin Fowler) Gerente: Não.
  • 15. Refatore com um propósito, evite refatorar apenas por refatorar
  • 16. Fique atento as oportunidades
  • 17. Refatore na hora de adicionar novas funcionalidades
  • 18. Refatore quando for corrigir um defeito
  • 19. Refatore quando precisar entender uma parte do código
  • 20. Os 7 principais inimigos da refatoração
  • 22. Não se dar conta do problema é uma das principais causas. É comum ver desenvolvedores experientes que não dão atenção a qualidade do código.
  • 24. Pensar apenas em resolver o problema, sem considerar que a natureza do desenvolvimento de software é a mudança.
  • 26. Temos dificuldade em lidar com janelas quebradas. Seja numa dieta, relacionamento ou desenvolvimento de software, o desânimo das janelas quebradas leva ao fracasso.
  • 28. É fácil culpar o estagiário. É preciso ter pessoas com nível técnico alto e senso crítico apurado para zelar pelas boas práticas e manter a ordem do código.
  • 29. Falta de trabalho em equipe
  • 30. O código pertence a equipe, não ao seu autor. Todos devem se responsabilizar e zelar pelo bem comum.
  • 32. Normalmente, seja por desconhecimento ou por pressão superior, iniciativas de refatoração são cortadas pela gerência. Cuidado com o nível de maturidade técnica de quem toma as decisões.
  • 34. Contratos mal feitos ou vendas que não consideram a capacidade técnica de entrega elevam o nível de pressão e também do imediatismo.
  • 35. Quando você não deve refatorar?
  • 36. Quando o código simplesmente não funciona, é instável
  • 37.
  • 38. Se funciona, ninguém sabe ao certo como...
  • 39.
  • 40. Próximo ao final do prazo de entrega
  • 41. A maioria das empresas precisa contrair algumas dívidas para funcionar efetivamente
  • 42. Mas cuidado com o aumento do débito técnico, os juros são altos

Notas do Editor

  1. Refatore com um propósito, sejaparaadicionarfuncionalidades, corrigirdefeitosoumesmoentenderumaregra de negócio
  2. Refatore com um propósito, sejaparaadicionarfuncionalidades, corrigirdefeitosoumesmoentenderumaregra de negócio
  3. Refatore com um propósito, sejaparaadicionarfuncionalidades, corrigirdefeitosoumesmoentenderumaregra de negócio
  4. Refatore com um propósito, sejaparaadicionarfuncionalidades, corrigirdefeitosoumesmoentenderumaregra de negócio
  5. Existeumagrandeprobabilidade de ocorreregressãopoisninguémsabeaocertocomo a regra de negóciofunciona.