Refatoração (do inglês refactoring) é o processo de modificar um sistema de software para melhorar a estrutura interna do código sem alterar seu comportamento externo.

O uso desta técnica aprimora a concepção (design) de um software e evita a deterioração tão comum durante o ciclo de vida de um código. Esta deterioração é geralmente causada por mudanças com objetivos de curto prazo ou por alterações realizadas sem a clara compreensão da concepção do sistema.

Outra consequência é a melhora no entendimento do código, o que facilita a manutenção e evita a inclusão de defeitos. Esta melhora no entendimento vem da constante alteração do código com objetivo de facilitar a comunicação de motivações, intenções e objetivos por parte do programador.

É fundamental que o sistema de software possua testes automatizados para realizar refatoração. Desta forma, será possível garantir que o comportamento externo não foi alterado.

O livro mais importante sobre refatoração é Refactoring: Improving the Design of Existing Code (ISBN 0-201-48567-2) de Martin Fowler, onde são explicados os conceitos, motivações e uma série de refatorações descritas passo a passo.

Programação extrema tem refatoração como uma de suas práticas.

Exemplo

O código Java abaixo demonstra a aplicação da refatoração para extrair método (Extract Method).

Antes

/** Salva o produto no banco de dados. */ public void save() { // Verifica propriedades if (this.getName() == null) { throw new Exception("Falta nome");

if (this.getDescription() == null) { throw new Exception("Falta a descrição");

this.getDatabase().save(this);

Depois

/** Salva o produto no banco de dados. */ public void save() { this.checkProperties(); this.getDatabase().save(this);

/** Verifica as propriedades do produto. */ private void checkProperties() { if (this.getName() == null) { throw new Exception("Falta nome do produto.");

else if (this.getDescription() == null) { throw new Exception("Falta a descrição do produto.");

Outro exemplo de refatoração, que também utiliza a prática de Desenvolvimento Orientado a Testes pode ser encontrado no link http://www.improveit.com.br/xp/praticas/tdd.

Utilização

Kent Beck, um dos criadores da programação extrema, afirma que refatoração deve ser utilizada quando o "código cheirar mal" (do inglês bad smells in code). Este conselho bem humorado indica uma confiança na experiência de programadores e também ressalta o valor estético do código, que deve valorizar a clareza e comunicação.

Alguns indícios já possuem uma aceitação ampla para promover refatoração:

Código duplicado (duplicated code) Método longo (long method) Classe grande (large class) Lista de parâmetros longa (long parameter list) Má indentação (Bad Indentation)

Refatorações

As refatorações descritas no livro de Martin Fowler utilizam fortemente conceitos de orientação a objeto. Basta observar algumas:

Extrair Método (Extract Method) Mover Método (Move Method) Mover Atributo (Move Field) Extrair Classe (Extract Class) Encapsular Atributo (Encapsulate Field) Renomear Método (Rename Method) Subir Método (Pull Up Method) Subir Atributo (Pull Up Field) Descer Método (Push Down Method) Descer Atributo (Push Down Field) Extrair Sub-classe (Extract Subclass) Extrair Super-classe (Extract Superclass)

Ligações externas Refactoring Home mantido pelo próprio Martin Fowler. Engenharia de Software - Refactoring - http://paginas.fe.up.pt/~ei02017/docs/relatorio_es.pdf

Categoria:Programação Categoria:Terminologia informática