Refatoração
Origem: Wikipédia, a enciclopédia livre.
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 bugs. 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 a que o comportamento externo não foi alterado.
O livro mais importante sobre refatoração é Refactoring: Improving the Design of Existing Code (ISBN 0201485672) 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.
Índice |
[editar] 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"); } else 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. */ public 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.
[editar] Utilização
Kent Beck, um dos criadores da Programação Extrema (Extreme Programming), 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)
[editar] 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)
[editar] Links externos
- Refactoring Home mantido pelo próprio Martin Fowler.