Diretriz: Refatoração
Esta diretriz descreve como aplicar a técnica de refatoração para melhorar o design do código existente.
Relacionamentos
Descrição Principal

A refatoração envolve a melhoria do design do código existente sem alterar o comportamento do sistema. Não é explicitamente a adição ou alteração de comportamento, mas a melhoria do design do comportamento existente.

Um conjunto completo de testes de desenvolvedor é necessário antes que a refatoração seja seguramente aplicada. É fundamental que o comportamento do sistema esteja em um estado conhecido e correto antes da modificação do design, de forma que você possa melhorar o design sem o receio de que a implementação da modificação cause erros. A refatoração é uma transformação segura para melhorar o código, mas só é segura se existirem testes que possam comprovar que o sistema funciona como esperado.

A refatoração inicia quando uma área, que precisa de melhorias é identificada no sistema, quer através da análise do código, ou qualquer outra representação do design. Os problemas identificados são às vezes chamados de "cheiros".

Seguem alguns cheiros para observar se poderão conduzir a refatoração:

  • Código duplicado: O código duplicado torna o sistema mais difícil de entender e manter.
  • Grandes Elementos ou Métodos de Design: Grandes elementos ou métodos de design diminuem a capacidade das pessoas de compreenderem o design, reduzem o potencial de reuso e tornam os testes de desenvolvedor mais difíceis.
  • Elementos mal nomeados: independente de serem variáveis, funções, classes ou componentes, seus nomes devem denotar o que eles são, de forma que o código possa ser mantido.
  • Acoplamento justo: Cada elemento de design deve funcionar com o mínimo de preocupação sobre os aspectos internos dos outros elementos de design. Caso contrário, as alterações em um elemento podem causar efeitos indesejáveis em outros elementos.

Como você pode ver nesta lista, a refatoração pode melhorar a "parte interna" de um elemento de design, a interface do elemento ou os relacionamentos e a colaboração entre os elementos. Além disso, muitos dos cheiros são caracterizados como fatores que tornam o software mais difícil de entender; e que a refatoração torna o sistema mais simples.

Após um problema ter sido identificado, um método de refatoração poderá ser selecionado para melhorar a situação. Existem catálogos de métodos de refatoração disponíveis que são padrões de alteração que vão resolver os problemas comuns, mantendo o comportamento do sistema.

Seguem exemplos de métodos de refatoração:

  • Extração de Método: Colocar o código duplicado em um único método ou extrair uma parte de um método grande para um novo método.
  • Extração de Classe: Colocar uma parte coesa de uma classe em uma nova classe, para reduzir o tamanho de um elemento de design que seja muito grande.
  • renomeação de Método, renomeação de Classe ou renomeação de Variável: Dê um nome mais significativo a um elemento para que se torne mais compreensível.
  • Extração de Interface: Crie uma interface limpa para um elemento para reduzir o acoplamento.

Quando a refatoração for aplicada, os testes de desenvolvedor devem ser reexecutados para garantir que o sistema ainda se comporta corretamente. É importante que o sistema esteja funcionando corretamente após cada refatoração. Embora muitas refatorações possam ser feitas em conjunto para impulsionar grandes mudanças em todo o código base, os testes devem ser executados com sucesso em cada refatoração aplicada. A refatoração deve ser aplicada como pequenas transformações que preservam o comportamento.

Conforme mencionado anteriormente, a refatoração exige a cobertura de teste de desenvolvedor plena da área sob consideração. Existem outras técnicas que permitem a refatoração. Os padrões de codificação definem um estilo comum e tornam mais fácil a refatoração consistente. Uma atitude de propriedade coletiva de código por parte da equipe é muito importante. Cada desenvolvedor deve entender que a refatoração pode ser aplicada em todo o código base para melhorar a implementação.  

Informações Adicionais