Refactoring: O que é isso?

Refactoring: O que é isso?

Refactoring, Refactoração ou Refatoração é uma técnica para recodificação de um determinado trecho de código, alterando sua estrutura interna e melhorando-a sem fazer quaisquer alterações em seu comportamento externo. Portanto, preservando seu comportamento inicial.

Surgiu na década de 80/90 na comunidade Smalltalk. Foi Kent Beck (eXtreme Programming) que a trouxe para a indústria.

Para melhores resultados, recomenda-se trabalhar com pequenos trechos de códigos e efetuar as modificações significantes. Porque com trechos de código curtos, as chances do sistema parar de funcionar ou criar bugs são menores.

Importante ressaltar que Refatoração não repara erros, nem adiciona novas funcionalidades, parâmetros e etc.

A Refatoração melhora a compreensão, a documentação e a clareza do código fonte, tornando-o mais fácil para manutenções futuras.

Mas porque existe Refatoração? Por alguns motivos como, por exemplo, questões de cronograma, alguns sistemas ficam sem documentação e com falhas no desenvolvimento. O que torna dificil a manutenção e conseqüentemente custoso para a corporação.

Exemplo 1:

Sem refactoring

public bool ehAnoBissexto(int ano)
{
  bool AnoBissexto = false;

  if (ano > 0)
  {
    if (ano % 4 == 0)
    {
      if ((ano % 100 != 0) || (ano % 400 == 0))
      {
        AnoBissexto = true;
      }
    }
  }
  return AnoBissexto;
}
...

Com refactoring

public bool ehAnoBissexto(int ano)
{
  if (ano == 0)
  return false;

  if (ano % 4 != 0)
  return false;

  if ((ano % 100 == 0) && (ano % 400 != 0))
  return false;

  return true;
}
...

Referência:
http://pt.wikipedia.org/wiki/Ano_bissexto

Vamos a um resumo sobre Refatoração.

Motivos para se fazer Refatoração:
- Existem métodos maiores que 50 linhas?
- Código duplicado
- Método muito longo
- Classe muito grande
- Intimidade inapropriada
- Comentários
- Muitos parâmetros
- Três repetições

O que melhorar?
- Nome de variáveis
- Interfaces dos objetos
- Arquitetura
- Encapsular código repetido em um novo método
- Generalização de métodos

Em que melhora?
- Simplicidade
- Flexibilidade
- Clareza
- Desempenho

Existem ferramentas no mercado?
- Refactoring Browser

Leitura recomendada:
- Refactoring.com

Abraços,
Bruno Amaral

About the Author