• Ramon Ferreira Silva

Refatoração de código

Atualizado: 26 de Ago de 2019


Ciclo : Red-Green-Refacotor

A Refatoração de código é uma prática que surgiu na década de 80, entre os membros da comunidade de programadores de Smalltalk, logo ganhou força e atingiu outras comunidades de programadores.


Os programadores tinham consciência que não escreviam o código mais correto logo na primeira tentativa, e que precisavam ler, reler e modificar os seus códigos com uma frequência maior do que escreviam novas linhas de código.


Logo alguns termos se tornaram populares entre os programadores que adotavam a refatoração, o mais famoso deles é o termo badsmell ou mau cheiro, que significa que uma parte do código está estranha e merece ser revista e modificada para que se torne mais legível e flexível.


Atualmente a refatoração tornou-se ganhou ainda mais popularidade graças à comunidade Java que a adotou maciçamente.


A literatura também contribuiu bastante para popularização da refatoração, sobre tudo Martin Fowler que criou muitas das obras mais importantes sobre o tema, além de se tornar um grande evangelista das práticas de refatoração.


As metodologias ágeis de desenvolvimento como XP e Scrum, muito populares nos dias de hoje, têm na refatoração um de seus principais pilares, ajudando-a a se popularizar ainda mais.


Segundo o relatório de do National Standart Institute, o custo de um erro (bug) em fase de desenvolvimento que custa 1 unidade ( entenda unidade como qualquer custo, como por exemplo hora/pessoa, dólares, etc…) e após ir para produção esse mesmo erro pode custar até milhares de dólares. Por isso a refatoração de código, quando implantada desde o início do projeto, resulta em um custo muito menor.



Além do benefício de redução de custos, a refatoração como tarefa diária de desenvolvimento ajuda a manter a equipe mais cuidadosa com o código desenvolvido, pois se um código parece estranho ele logo será corrigido, corrigindo um possível problema o mais cedo possível.


O conhecimento do código também é disseminado mais rapidamente, pois todos os membros da equipe acabam por refatorar códigos escritos por outros desenvolvedores, o que melhora a passagem de conhecimento para novos membros, reduz o impacto causado pela ausência de um membro e os riscos do projeto.


Conceitos


Abaixo temos dois conceitos descritos por Martin Fowler em seu livro (2004, p.46).

  1. Refatoração: uma alteração feita na estrutura interna do software para torá-lo mais compreensível e barato de manter, sem que haja mudança no seu comportamento externo.

  2. Refatorar: é a reestruturação de um software, tendo por base uma série de refatorações, sem alterar o comportamento externo.

Ainda em seu livro, Martin Fowler,  descreve:

Refatoração é uma técnica disciplinada para reestruturar um código fonte existente, alterando sua estrutura interna sem mudar o seu comportamento externo. Sua essência está em uma série de pequenas transformações que preservam comportamento. Cada transformação (chamada de refatoração) faz pouca coisa, mas uma sequência de pequenas transformações produz uma reestruturação significativa.

Ou seja, a refatoração tem como principal objetivo, melhorar a estrutura interna do software, sem afetar suas as interações externas, de modo que o usuário do sistema quase nunca percebe qualquer alteração que possa ter acontecido.  Para garantir que isto ocorra, cada modificação deve ser validada através de cenários de testes ou testes automatizados, para evitar que novos bugs sejam introduzidos ou que o comportamento fique diferente do esperado.


A refatoração torna o código mais fácil de ser entendido. O programador quando escreve uma porção de código ele está informando ao computador o que ele deve fazer, mas outras pessoas também devem ser capazes de ler e entender o que foi escrito, possibilitando que o código possa ser alterado a qualquer hora por qualquer pessoa, até mesmo pelo próprio programador que o tenha escrito tempos atrás e não se lembre de todos os detalhes.


Além disso, a refatoração ajuda os programadores a encontrar Bugs no software, pois com uma melhor compreensão da estrutura do código, fica muito mais claro onde as coisas não estão como deveriam estar. Kent Beck diz

Não sou um grande programador, mas um programador comum com grandes hábitos.”. ( p.49)

Refatorar ajuda a codificar mais rápido. Codificar novas funcionalidades é mais produtivo que ficar corrigir bugs, e isso só possível quando o software possui uma boa arquitetura. Um software até pode começar sendo desenvolvido muito rapidamente, mas com o tempo a arquitetura deixa de ser tão eficiente e a velocidade do time de desenvolvedores cai. Para evitar que isso ocorra, a refatoração deve ser aplicada, de modo a manter sempre uma boa qualidade e compreensão do código.


Enquanto desenvolve um código o programador assume dois papéis, o primeiro papel é exercido enquanto o programador cria novas funcionalidades e o segundo papel, enquanto o programador tenta melhorar o código recém-escrito. Durante a sua tarefa de programação fica trocando os papéis constantemente. Essa troca deliberada de papéis não é considerada uma boa prática, o programador deve separar esses dois momentos, para evitar que a perda de foco.


Existem três situações onde a refatoração se faz necessária.


Refatoração de código ao adicionar uma nova funcionalidade


A situação mais comum onde você irá aplicar a refatoração é quando estiver adicionando novas funcionalidades. O código onde será adicionada a funcionalidade muitas vezes foi escrito por outra pessoa e precisa ser compreendido antes de ser modificado. Outra razão é que muitas das vezes o código foi escrito de uma maneira que não fica fácil adicionar aquela funcionalidade e talvez se estivesse estruturado de outra forma, a alteração seria menos trabalhosa. Aplicando a refatoração o código fica mais claro e fácil de ser modificado.


Refatoração de código quando um Bug precisa ser corrigido


Quando é preciso corrigir algum Bug, deve-se aplicar a refatoração para que o código fique mais compreensível. A refatoração deve ser aplicada quantas vezes forem necessárias até que com uma melhor compreensão do código o Bug possa ser facilmente identificado.


Refatoração de código durante a revisão de código


Muitas organizações adotam a prática de refatoração de código, durante um período do ciclo de desenvolvimento, a equipe para de desenvolver novas funcionalidades de revisa o código dos outros desenvolvedores da equipe. Esta prática ajuda a disseminar o conhecimento sobre o software entre os membros da equipe e também ajuda na passagem de conhecimento entre os desenvolvedores mais experientes e os menos experientes.


O ideal que durante a revisão, o revisor e o desenvolvedor que escreveu o código fiquem juntos assim, eles podem discutir sobre o entendimento da funcionalidade, e quando esta compressão não está clara para um dos dois, o código deve ser refatorado até se tornar compreensível para todos.


#programação #Agile #Refatoração #BoasPráticas #EngenhariadeSoftware #ArquiteturadeSoftware