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

editar

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

editar

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)
  • indentação (Bad Indentation)

Refatorações

editar

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)

Referências

Ligações externas

editar

📚 Artikel Terkait di Wikipedia

IntelliJ IDEA

Consultado em 29 de junho de 2021  «IntelliJ IDEA :: Java refactoring plus sophisticated code refactoring for JSP, XML, CSS, HTML, JavaScript». JetBrains. Consultado

Code smell

termo passou a aumentar após a publicação do livro Refactoring: Improving the Design of Existing Code de Martin Fowler, em 1999. O termo é também usado

Lava flow (programação)

Layer Anti-Pattern». Code rant. Consultado em 26 de novembro de 2018  1954-, Brown, William J., (1998). AntiPatterns : refactoring software, architectures

Ambiente de desenvolvimento integrado

tipo mais comuns no mercado são chamadas robôs de testes; Refatoração (refactoring) - consiste na melhoria constante do código-fonte do software, seja na

Dívida tecnológica

espaguete Custo irrecuperável Suryanarayana, Girish (novembro de 2014). Refactoring for Software Design Smells 1st ed. [S.l.]: Morgan Kaufmann. 258 páginas

Fixture

janeiro de 2014  Meszaros, Gerard (2007). xUnit Test Patterns: Refactoring Test Code (PDF). [S.l.]: Addison-Wesley Professional. ISBN 978-0-13-149505-0

Objeto mock

número de vezes que os métodos num objeto mock são chamados; um sucessivo refactoring do código que está sendo testado, poderia portanto fazer que o teste

Delphi (software)

compilador do C++ Builder, atualização dos drivers DBExpress, novos refactorings e recursos da IDE. Nessa versão o gerenciador de memória utilizado pelo