C# - Refatoração : Quando e Como Refatorar - II


Hoje vamos continuar tratando da refatoração tendo como objetivo obter um código limpo.

Continuando o artigo anterior vamos tratar duas questões neste artigo  : 

Quando Refatorar o código ?   e Como Refatorar ?

A melhor maneira de refatorar o código é fazê-lo em pequenos passos.

Também é importante fazer isso antes de adicionar qualquer nova funcionalidade ou recursos à solução. A refatoração de código não deve mudar o comportamento final do código.

Uma das técnicas mais amplamente utilizadas para refatoração de código é o processo red/green usado no desenvolvimento orientado a testes Agile.

Aplicando o método Red-Green-Refactor, os desenvolvedores dividem a refatoração em três etapas distintas:

  1. Parar e considerar o que precisa ser desenvolvido. (Red)
  2. Aplicar o desenvolvimento para passar no teste básico. (Green)
  3. Implementar melhorias.(Refatorar)

A refatoração por abstração também é um método usado principalmente quando há uma grande quantidade de refatoração a ser feita. A abstração envolve heranças de classe, hierarquia e extração. O objetivo da abstração é reduzir duplicações desnecessárias no código do software.

Veremos a seguir cenários que indicam quando você deve iniciar a refatoração do seu código:

1- Repetindo o código

2- Corrigindo um problema no código

Os bugs no código se comportam exatamente como os da vida real: eles vivem nos lugares mais escuros e sujos do código. Limpe seu código e os erros serão descobertos.

A refatoração proativa é uma boa prática pois elimina a necessidade de tarefas especiais de ter que fazer a refatoração posteriormente. 

Assim, ao corrigir um problema verifique se não seria o caso de aplicar a refatoração.

3- Revisando o código

A revisão do código pode ser a última chance de organizá-lo antes que ele vá para produção e se torne disponível ao público.

Uma estratégia interessante é realizar essas avaliações em dupla, assim você pode consertar problemas simples rapidamente e avaliar o tempo para consertar os problemas mais difíceis.

Aqui é o melhor momento para refatorar o que for preciso.

Agora veremos como realizar a refatoração.

Como Refatorar ?

A seguir temos um checklist onde elencamos 3 situações para realizar a refatoração de uma forma correta.

1- O código tem que ficar mais limpo e fácil de entender

Se o código permanecer impuro e sujo após a refatoração ... bem, me desculpe, mas você acabou de perder uma hora de sua vida. Tente descobrir por que isso aconteceu e faça a coisa certa.

Frequentemente isso ocorre quando você deixa de refatorar com pequenas mudanças e mistura um monte de refatorações em uma grande mudança. Assim, é muito fácil perder o fio da meada e a cabeça, especialmente se você tiver um limite de tempo para realizar o trabalho.

Mas isso também pode acontecer quando o código a ser refatorado é um código extremamente desleixado. Assim, não importa o que você melhore, o código como um todo continua sendo um desastre.

Neste caso, vale a pena avaliar reescrever completamente partes do código. Mas antes disso, você deve reservar um tempo maior para esta tarefa e escrever testes de unidade. Caso contrário, você acabará tendo um código confuso e com grandes chances de quebrar o projeto.

2- Não implementar novas funcionalidades durante a refatoração

Lembre-se, refatorar é o processo de modificar o código a fim de torná-lo mais fácil de manter, entender e estender sem alterar o seu comportamento.

Portanto durante a refatoração o seu objetivo é melhorar o código que já foi escrito para uma funcionalidade já implementada e não implementar novas funcionalidades inserindo um código novo no projeto.

Com a refatoração você não muda o que o seu software faz você muda como ele faz.

Então, não misture refatoração e desenvolvimento direto de novos recursos. Tente separar esses processos pelo menos dentro dos limites dos commits individuais.

3- Todos os testes existentes precisam passar após a refatoração

Aqui temos uma questão delicada a ser tratada. Como já vimos, na refatoração vamos mudar como o código foi escrito sem incluir novas funcionalidades.

Então a princípio, você deve iniciar a refatoração com todos os testes 'verdes', ou seja, todos os testes já tem que ter passado, e, devem continuar assim.

Existem dois casos quando os testes podem falhar após a refatoração:

  1. Você cometeu algum erro durante a refatoração.

    Vá em frente e corrija o seu erro, refaça os testes até que eles passem.

  1. Seus testes foram de nível muito baixo. Por exemplo, você estava testando métodos privados nas classes;

    Neste caso, a culpa é dos testes, e, o que você pode fazer, é refatorar os próprios testes ou escrever um conjunto inteiramente novo de testes de nível superior.             

De qualquer forma os testes tem continuar 'verdes' após a refatoração.

Provavelmente esta lista não inclui todos os cenários que você tem que levar em conta mas já te orienta em aspectos importantes que você tem que seguir para quando for refatorar.

A seguir vamos apresentar os principais 'code smell' que identificam um código como ruim fazendo o código 'cheirar mal' e indicar que precisa ser refatorado.

"Mas o fruto do Espírito é: amor, gozo, paz, longanimidade, benignidade, bondade, fé, mansidão, temperança.
Contra estas coisas não há lei."

Gálatas 5:22,23


Referências:


José Carlos Macoratti