Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

Vamos falar sobre O que é refatoração? Por que refatoramos? Como escolhemos as batalhas que queremos lutar? O que consideramos ao refatorar?

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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;

Slide 5

Slide 5 text

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;

Slide 6

Slide 6 text

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;

Slide 7

Slide 7 text

Sobre mim • Edmilton ou apenas Ed • Eterno aprendiz • Desenvolvimento de Software desde 2000 • Muitos anos escrevendo código do jeito sofrido

Slide 8

Slide 8 text

8 anos 700 RDoers 13000 Clientes 20 Países 1 ano de escritório em São Paulo

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

Várias coisas diferentes com o mesmo nome

Slide 12

Slide 12 text

Precisamos refatorar esta tela, para deixar o campo número ao lado do campo endereço.

Slide 13

Slide 13 text

Precisamos refatorar esta API para responder de 3000ms para 100ms

Slide 14

Slide 14 text

Vamos refatorar função X para corrigir aquele bug

Slide 15

Slide 15 text

O que é refatoração? • Refatoração (Refactoring) - substantivo • Refatorar (Refactoring) - verbo Martin Fowler em seus livros sobre refatoração trabalha com 2 definições

Slide 16

Slide 16 text

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.

Slide 17

Slide 17 text

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.

Slide 18

Slide 18 text

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.

Slide 19

Slide 19 text

Refatoração é para pessoas!!!

Slide 20

Slide 20 text

Precisamos refatorar esta tela, para deixar o campo número ao lado do campo endereço.

Slide 21

Slide 21 text

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.

Slide 22

Slide 22 text

Precisamos refatorar esta API para responder de 3000ms para 100ms

Slide 23

Slide 23 text

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.

Slide 24

Slide 24 text

Vamos refatorar função X para corrigir aquele bug Correção de bug altera o comportamento observável.

Slide 25

Slide 25 text

O que é refatoração? Quando dividimos uma classe de mais de 1000 linhas em novas classes

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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"

Slide 29

Slide 29 text

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/

Slide 30

Slide 30 text

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.

Slide 31

Slide 31 text

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.

Slide 32

Slide 32 text

Por que refatoramos?

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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.

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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.

Slide 37

Slide 37 text

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.

Slide 38

Slide 38 text

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.

Slide 39

Slide 39 text

Respondemos mais rápido à mudanças Quanto mais código para ler e entender, maior é a dificuldade em acertar da primeira vez

Slide 40

Slide 40 text

Respondemos mais rápido à mudanças Mais fácil entender onde e como fazer as mudanças

Slide 41

Slide 41 text

Respondemos mais rápido à mudanças Código legível e fácil localização: reduz a carga cognitiva

Slide 42

Slide 42 text

Ajuda na redução do turnover Código complexo aumenta o ciclo de entrega Que aumenta a insatisfação dos participantes do projeto

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

Ajuda na redução do turnover Código mal estruturado + pressão intensa = perder pessoas.

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

Decidindo o que refatorar Codebase relativamente grande Projeto de + 8 anos +/- 100 engenheiros Produto em constante crescimento

Slide 47

Slide 47 text

Dando visibilidade aos problemas

Slide 48

Slide 48 text

Débito Técnico Metáfora usando a área financeira Citado por Ward Cunningham (@WardCunningham) Com prudência, dá pra usar e sobreviver

Slide 49

Slide 49 text

No content

Slide 50

Slide 50 text

No content

Slide 51

Slide 51 text

Preferencialmente Mas com liberdade aqui também

Slide 52

Slide 52 text

Preferencialmente Visão de todo o time Momento de análise e descobertas Maior liberdade para prova de conceito

Slide 53

Slide 53 text

Mas com liberdade aqui também Momento mais próximo do código Maior clareza da implementação

Slide 54

Slide 54 text

Escolhendo as batalhas que queremos lutar Realmente temos um problema? Está atrapalhando o nosso dia a dia? É o melhor momento para atacarmos?

Slide 55

Slide 55 text

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?

Slide 56

Slide 56 text

Como refatoramos? Código novo: Assim que seu primeiro ciclo de escrita de código é concluído (Red, Green)

Slide 57

Slide 57 text

Como refatoramos? Código já existente: e seu comportamento já está implementado, mas precisa ser melhorado.

Slide 58

Slide 58 text

Refatorar código novo? Adicionando funcionalidade Escrever os testes Fazer os teste passarem Não alterar código existente 2 chapéus

Slide 59

Slide 59 text

Refatorar código novo? Refatorando Reestruturar o código Manter os teste passando Não adicionar novas funcionalidades 2 chapéus

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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.

Slide 62

Slide 62 text

Cuidados ao refatorar Trecho a ser refatorado com cobertura de testes

Slide 63

Slide 63 text

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)

Slide 64

Slide 64 text

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.

Slide 65

Slide 65 text

Cuidados ao refatorar Mantenha-se a pouquíssimos passos de distância do código que passava no teste.

Slide 66

Slide 66 text

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)

Slide 67

Slide 67 text

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/

Slide 68

Slide 68 text

Livros base

Slide 69

Slide 69 text

Estamos contratando https://grnh.se/da017d1f2

Slide 70

Slide 70 text

Obrigado! Twitter: @ed_neves Telegram: @edmilton_neves Github: edmilton