Share
Embed
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
Transcript
70 slides
-
Vamos falar sobre O que é refatoração? Por que refatoramos?
Como escolhemos as batalhas que queremos lutar? O que consideramos ao refatorar? -
Por que? Porque muitas vezes já ouvi e usei o
termo “Refatoração" de forma diferente do proposto pelos principais autores do tema; -
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; -
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; -
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; -
Sobre mim • Edmilton ou apenas Ed • Eterno aprendiz
• Desenvolvimento de Software desde 2000 • Muitos anos escrevendo código do jeito sofrido -
8 anos 700 RDoers 13000 Clientes 20 Países 1 ano
de escritório em São Paulo -
Somos remote-friendly + 30% do time de engenharia é remoto
Criamos uma ferramenta open source para o trabalho remoto bit.ly/matrix-rd -
Somos remote-friendly + 30% do time de engenharia é remoto
Criamos uma ferramenta open source para o trabalho remoto bit.ly/matrix-rd -
Precisamos refatorar esta tela, para deixar o campo número ao
lado do campo endereço. -
O que é refatoração? • Refatoração (Refactoring) - substantivo •
Refatorar (Refactoring) - verbo Martin Fowler em seus livros sobre refatoração trabalha com 2 definições -
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. -
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. -
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. -
Precisamos refatorar esta tela, para deixar o campo número ao
lado do campo endereço. -
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. -
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. -
Vamos refatorar função X para corrigir aquele bug Correção de
bug altera o comportamento observável. -
O que é refatoração? Quando dividimos uma classe de mais
de 1000 linhas em novas classes -
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 -
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 -
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" -
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/ -
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. -
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. -
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 -
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. -
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 -
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. -
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. -
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. -
Respondemos mais rápido à mudanças Quanto mais código para ler
e entender, maior é a dificuldade em acertar da primeira vez -
Respondemos mais rápido à mudanças Mais fácil entender onde e
como fazer as mudanças -
Respondemos mais rápido à mudanças Código legível e fácil localização:
reduz a carga cognitiva -
Ajuda na redução do turnover Código complexo aumenta o ciclo
de entrega Que aumenta a insatisfação dos participantes do projeto -
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 -
Ajuda na redução do turnover Código mal estruturado + pressão
intensa = perder pessoas. -
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 -
Decidindo o que refatorar Codebase relativamente grande Projeto de +
8 anos +/- 100 engenheiros Produto em constante crescimento -
Débito Técnico Metáfora usando a área financeira Citado por Ward
Cunningham (@WardCunningham) Com prudência, dá pra usar e sobreviver -
Preferencialmente Visão de todo o time Momento de análise e
descobertas Maior liberdade para prova de conceito -
Mas com liberdade aqui também Momento mais próximo do código
Maior clareza da implementação -
Escolhendo as batalhas que queremos lutar Realmente temos um problema?
Está atrapalhando o nosso dia a dia? É o melhor momento para atacarmos? -
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? -
Como refatoramos? Código novo: Assim que seu primeiro ciclo de
escrita de código é concluído (Red, Green) -
Como refatoramos? Código já existente: e seu comportamento já está
implementado, mas precisa ser melhorado. -
Refatorar código novo? Adicionando funcionalidade Escrever os testes Fazer os
teste passarem Não alterar código existente 2 chapéus -
Refatorar código novo? Refatorando Reestruturar o código Manter os teste
passando Não adicionar novas funcionalidades 2 chapéus -
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 -
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. -
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) -
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. -
Cuidados ao refatorar Mantenha-se a pouquíssimos passos de distância do
código que passava no teste. -
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) -
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/