Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Refatoração: um pouco além do código

Refatoração: um pouco além do código

Um papo sobre como estamos refatorando por aqui na Resultados Digitais, alguns fatores que nos auxiliam na tomada de decisão de quando refatorar determinado ponto e as consequências destas decisões.

Edmilton

June 29, 2019
Tweet

Other Decks in Technology

Transcript

  1. Vamos falar sobre O que é refatoração? Por que refatoramos?

    Como escolhemos as batalhas que queremos lutar? O que consideramos ao refatorar?
  2. Por que? Porque muitas vezes já ouvi e usei o

    termo “Refatoração" de forma diferente do proposto pelos principais autores do tema;
  3. Por que? Porque muitas vezes já ouvi e usei o

    termo “Refatoração" de forma diferente do proposto pelos principais autores do tema; Porque já tive muitas dificuldades em fazer com que o PO/PM/ Gestor comprasse a refatoração;
  4. Por que? Porque muitas vezes já ouvi e usei o

    termo “Refatoração" de forma diferente do proposto pelos principais autores do tema; Porque já tive muitas dificuldades em fazer com que o PO/PM/ Gestor comprasse a refatoração; Porque já abracei refatoração pensando resolver em 1 dia e resolvi em 4;
  5. Por que? Porque muitas vezes já ouvi e usei o

    termo “Refatoração" de forma diferente do proposto pelos principais autores do tema; Porque já tive muitas dificuldades em fazer com que o PO/PM/ Gestor comprasse a refatoração; Porque já abracei refatoração pensando resolver em 1 dia e resolvi em 4; Porque eu gostaria de saber destas coisas há alguns anos;
  6. Sobre mim • Edmilton ou apenas Ed • Eterno aprendiz

    • Desenvolvimento de Software desde 2000 • Muitos anos escrevendo código do jeito sofrido
  7. Somos remote-friendly + 30% do time de engenharia é remoto

    Criamos uma ferramenta open source para o trabalho remoto bit.ly/matrix-rd
  8. Somos remote-friendly + 30% do time de engenharia é remoto

    Criamos uma ferramenta open source para o trabalho remoto bit.ly/matrix-rd
  9. O que é refatoração? • Refatoração (Refactoring) - substantivo •

    Refatorar (Refactoring) - verbo Martin Fowler em seus livros sobre refatoração trabalha com 2 definições
  10. Refatoração (refactoring) (substantivo / noun) • Uma 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 o seu comportamento observável. • A change made to the internal structure of software to make it easier to understand and cheaper to modify without changing its observable behavior.
  11. Refatoração (refactoring) (substantivo / noun) • Uma 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 o seu comportamento observável. • A change made to the internal structure of software to make it easier to understand and cheaper to modify without changing its observable behavior.
  12. Refatoração (refactoring) (substantivo / noun) • Uma 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 o seu comportamento observável. • A change made to the internal structure of software to make it easier to understand and cheaper to modify without changing its observable behavior.
  13. Refatoração (refactoring) (substantivo / noun) • Uma 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 o seu comportamento observável.
  14. Refatoração X Otimização de Performance • Similares mas com propósitos

    diferentes. • Refatoração: foco é legibilidade do código, as vezes torna mais rápido, as vezes mais lento. • Performance: foco é tornar o programa mais rápido, mesmo que tenha que sacrificar a legibilidade, entregando um código difícil de entender.
  15. O que é refatoração? Quando dividimos uma classe de mais

    de 1000 linhas em novas classes Quando um método muito grande é quebrado em outros métodos ou classes
  16. O que é refatoração? Quando dividimos uma classe de mais

    de 1000 linhas em novas classes Quando um método muito grande é quebrado em outros métodos ou classes Quando removemos código morto
  17. O que é refatoração? Quando dividimos uma classe de mais

    de 1000 linhas em novas classes Quando um método muito grande é quebrado em outros métodos ou classes Quando removemos código morto Quando substituimos um "número mágico"
  18. O que é refatoração? Quando dividimos uma classe de mais

    de 1000 linhas em novas classes Quando um método muito grande é quebrado em outros métodos ou classes Quando removemos código morto Quando substituimos um "número mágico" E muito mais em https://refactoring.com/catalog/
  19. Refatorar (verbo / verb) • Reestruturar o software aplicando uma

    série de refatorações sem alterar seu comportamento observável. • To restructure software by applying a series of refactorings without changing its observable behavior.
  20. Durante uma sessão de Refatoração, normalmente utilizamos várias pequenas refatorações,

    como extrair para uma classes costuma envolver também mover métodos.
  21. Por que refatoramos? Qualquer tolo pode escrever código que o

    computador pode entender. Bons programadores escrevem código que humanos podem entender. Martin Fowler, 1999 Any fool can write code that computer can understand. Good programmers write code that humans can understand. Martin Fowler, 1999
  22. Melhora o design do software Conforme o sistema cresce, o

    custo e o tempo gasto acompanham. Um codebase mais enxuto é mais fácil de ser mantido.
  23. Projete seu código para ser mais fácil de entender, não

    mais fácil de escrever Segundo princípio de engenharia da RD
  24. Projete seu código para ser mais fácil de entender, não

    mais fácil de escrever Primeira interação no desenvolvimento: foco principal para que o computador entenda e siga corretamente nossas instruções.
  25. Projete seu código para ser mais fácil de entender, não

    mais fácil de escrever Com a comunicação estabelecida, devemos voltar nosso olhar para a segunda pessoa a usar o que fizemos: o próximo humano que irá pôr as mãos neste código.
  26. Projete seu código para ser mais fácil de entender, não

    mais fácil de escrever Mais vale um ciclo a mais do computador compilando algo, do que a próxima pessoa gastar uma semana numa mudança que levaria algumas horas “só" porque meu código estava complexo para compreender.
  27. Respondemos mais rápido à mudanças Quanto mais código para ler

    e entender, maior é a dificuldade em acertar da primeira vez
  28. Ajuda na redução do turnover Código complexo aumenta o ciclo

    de entrega Que aumenta a insatisfação dos participantes do projeto
  29. Ajuda na redução do turnover Que aumenta a pressão no

    time Devs e Devas começam a trabalhar em condições de forte tensão
  30. Decidindo o que refatorar Um dos desafios da refatoração é

    sucessão - como dividir o trabalho de refatorar em etapas seguras e como ordenar estas etapas. One of the challenges of refactoring is succession - how to slice the work of a refactoring into safe steps and how to order those steps. Kent Beck
  31. Decidindo o que refatorar Codebase relativamente grande Projeto de +

    8 anos +/- 100 engenheiros Produto em constante crescimento
  32. Débito Técnico Metáfora usando a área financeira Citado por Ward

    Cunningham (@WardCunningham) Com prudência, dá pra usar e sobreviver
  33. Preferencialmente Visão de todo o time Momento de análise e

    descobertas Maior liberdade para prova de conceito
  34. Escolhendo as batalhas que queremos lutar Realmente temos um problema?

    Está atrapalhando o nosso dia a dia? É o melhor momento para atacarmos?
  35. Escolhendo as batalhas que queremos lutar Temos orçamento para isso?

    Por que esta refatoração agora e não outra? Temos conhecimento do contexto?
  36. Como refatoramos? Código novo: Assim que seu primeiro ciclo de

    escrita de código é concluído (Red, Green)
  37. Refatorar código novo? Adicionando funcionalidade Escrever os testes Fazer os

    teste passarem Não alterar código existente 2 chapéus
  38. Refatorar código novo? Refatorando Reestruturar o código Manter os teste

    passando Não adicionar novas funcionalidades 2 chapéus
  39. Cuidados ao refatorar Ferramentas de apoio a identificação de mau

    cheiro no código (Bad Smells). Mas o mapa nunca pode ser mais importante que o terreno. Rubocop, Reek, Code Climate
  40. Cuidados ao refatorar Desenvolvimento guiado por testes (TDD) Pergunta: Perguntamos

    para o sistema escrevendo um teste. Resposta: Respondemos a pergunta escrevendo código que passa no teste. Refinamento: Melhoramos a pergunta consolidando ideias e removendo coisas desnecessárias. Repetição: Mantemos o diálogo com novas perguntas.
  41. Cuidados ao refatorar Baby Steps Você está no zero, onde

    tem que chegar primeiro? No um! Só depois disso é que você se preocupa com o dois. (Henrique Bastos)
  42. Cuidados ao refatorar Intervenções cirúrgicas Testar após cada mudança ajuda

    a encontrar facilmente a falha, caso ocorra. Isso é muito melhor do que ter várias alterações, rodar os testes e falhar.
  43. Esteja alinhado ao negócio "Negócios são bem servidos via refatoração

    contínua, ainda assim, as práticas de refatoração devem coexistir harmoniosamente com as prioridades do negócio." @JoshuaKerievsky (Refactoring to Patterns)
  44. Leituras Catálogo de refatorações: https://refactoring.com/catalog/ Tipos de débitos técnicos: https://

    agilemichaeldougherty.wordpress.com/2015/07/24/types- of-technical-debt/