Refatoração: um pouco além do código (parte I)

Edmilton Neves
Ship It!
Published in
3 min readAug 15, 2019

Recentemente tive a felicidade de abordar o tema refatoração em um encontro do GURU-SP (veja a gravação) e também na trilha XP do TDC-SP 2019, com a intenção de abordar o assunto com um outro olhar, deixando um pouco de lado os N tipos de refatoração muito bem catalogados por Martin Fowler e olhando para o racional que antecede o ato de refatorar.

O que é refatoração?

Antes de tudo, é importante esclarecer o que é e principalmente o que não é refatoração.

Ao longo da minha jornada, já vi ou usei o termo refatoração para as mais diversas coisas, como por exemplo:

  • Alteração de um formulário, movendo um campo de lugar: “Precisamos refatorar a tela para deixar o campo número ao lado do campo endereço”
  • Melhoria de performance: “Precisamos refatorar esta API que está respondendo em 3000ms para responder em até 100ms”
  • Correção de bug: “Vamos refatorar a função X para corrigir aquela bug”

Porém Martin Fowler (um dos maiores autores do assunto), aborda em seus livros duas definições para refatoração, como vemos abaixo:

Substantivo: Uma alteração feita na estrutura interna do software para torná-lo mais fácil de entender e menos custoso de ser modificado, sem alterar o seu comportamento observável.

Analisando esta definição em partes, o trecho “… sem alterar o seu comportamento observável.” nos mostra que após uma sessão de refatoração, o usuário daquela peça de software — seja uma pessoa ou outro programa — não deve perceber quaisquer mudanças.

Já o trecho “… para torná-lo mais fácil de entender e menos custoso de ser modificado …” nos mostra que a refatoração é para pessoas. Não refatoramos para tornar o código mais performático, nós refatoramos para que a próxima pessoa que irá ler este trecho de código compreenda mais facilmente seu propósito. E esta pessoa pode ser o próprio autor do código seis meses após a escrita!

Com uma melhor compreensão do que de fato é considerado Refatoração, deixamos de usar esse termo para coisas como alteração visual, melhoria de performance, correção de bug, etc.

Nos exemplos citados acima, otimização de performance merece uma explicação mais detalhada.

Embora Refatoração e Otimização de performance tenham suas similaridades, seus propósitos são diferentes.

Durante a Refatoração nosso olhar é para melhorar a legibilidade do código, mesmo que para tal tenhamos um ciclo a mais de processamento. Já durante alterações para otimização de performance, nosso foco é exclusivamente tornar o processamento daquela peça de software mais rápido, mesmo que para isso tenhamos que ter um trecho muito mais complexo de se entender.

Então, o que é Refatoração?

Alguns exemplos de Refatoração são:

  • Quando dividimos uma classe com mais de uma responsabilidade em novas classes.
  • Quando um método muito grande é quebrado em outros métodos ou classes.
  • Quando removemos “código morto”.
  • Quando removemos”magic numbers”.
  • E muito mais em https://refactoring.com/catalog/

Por que refatoramos?

Sabendo que a Refatoração não entrega valor imediato ao cliente, o que nos leva a refatorar?

A frase abaixo exemplifica um dos principais motivos para refatorarmos:

“Qualquer tolo pode escrever código que o computador entenda. Bons programadores(as) escrevem código que humanos podem entender.” — Martin Fowler, 1999

Porque está em nosso DNA. Nosso segundo princípio de engenharia é “Projete seu código para ser mais fácil de entender, não mais fácil de escrever”.

Porque melhora o design do software: se o codebase cresce desordenado, o custo de manutenção aumenta.

Porque nos permite responder mais rápido às mudanças. Código legível e de fácil localização reduz a carga cognitiva ao atuarmos em alterações.

Porque ajuda na redução do turnover. Com codebase de difícil compreensão, o ciclo de entrega e a imprevisibilidade do time aumentam, refletindo assim em maior pressão sobre o time e maior tensão entre gestão e desenvolvedores(as). Código mal estruturado + pressão intensa resulta em perder pessoas do time.

No próximo post vamos compartilhar alguns pontos que nos ajudam a decidir melhor o que refatorar.

E o que motiva seu time a refatorar?

--

--