Refatoração de código

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
Reestruturar o código de computador existente sem alterar seu comportamento externo

Na programação de computadores e no design de software, a refatoração de código é o processo de reestruturação do código de computador existente — alterando a fatoração — sem alterar seu comportamento externo. A refatoração destina-se a melhorar o design, a estrutura e/ou a implementação do software (seus atributos não funcionais), preservando sua funcionalidade. As vantagens potenciais da refatoração podem incluir melhor legibilidade do código e complexidade reduzida; eles podem melhorar a capacidade de manutenção do código-fonte' e criar uma arquitetura interna ou modelo de objeto mais simples, limpo ou expressivo para melhorar a extensibilidade. Outro objetivo potencial para refatoração é o desempenho aprimorado; os engenheiros de software enfrentam um desafio constante para escrever programas com desempenho mais rápido ou que usem menos memória.

Normalmente, a refatoração aplica uma série de microrrefatorações básicas padronizadas, cada uma das quais é (geralmente) uma pequena alteração no código-fonte de um programa de computador que preserva o comportamento do software, ou pelo menos não modifica sua conformidade com os requisitos funcionais. Muitos ambientes de desenvolvimento fornecem suporte automatizado para executar os aspectos mecânicos dessas refatorações básicas. Se bem feita, a refatoração de código pode ajudar os desenvolvedores de software a descobrir e corrigir bugs ou vulnerabilidades ocultos ou inativos no sistema, simplificando a lógica subjacente e eliminando níveis desnecessários de complexidade. Se for mal feito, pode falhar no requisito de que a funcionalidade externa não seja alterada e, portanto, pode introduzir novos bugs.

Ao melhorar continuamente o design do código, facilitamos e facilitamos o trabalho. Isso é em contraste acentuado com o que normalmente acontece: pouca refatoração e muita atenção prestada para adicionar rapidamente novas características. Se você entrar no hábito higiênico de refatorar continuamente, você vai descobrir que é mais fácil estender e manter o código.

Joshua Kerievsky, Refactoring para padrões

Motivação

A refatoração geralmente é motivada pela percepção de um cheiro de código. Por exemplo, o método em questão pode ser muito longo ou pode ser quase uma duplicata de outro método próximo. Uma vez reconhecidos, esses problemas podem ser resolvidos refatorando o código-fonte ou transformando-o em uma nova forma que se comporta da mesma forma que antes, mas que não "cheira mais".

Para uma rotina longa, uma ou mais sub-rotinas menores podem ser extraídas; ou para rotinas duplicadas, a duplicação pode ser removida e substituída por uma função compartilhada. A falha na execução da refatoração pode resultar no acúmulo de dívida técnica; por outro lado, a refatoração é um dos principais meios de pagamento da dívida técnica.

Benefícios

Existem duas categorias gerais de benefícios para a atividade de refatoração.

  1. Manutenção. É mais fácil corrigir bugs porque o código fonte é fácil de ler e a intenção do seu autor é fácil de entender. Isso pode ser alcançado através da redução de grandes rotinas monolíticas em um conjunto de métodos individualmente concisos, bem conhecidos e de uso único. Pode ser alcançado movendo um método para uma classe mais apropriada, ou removendo comentários enganosos.
  2. Extensibilidade. É mais fácil estender as capacidades do aplicativo se ele usa padrões de design reconhecíveis, e fornece alguma flexibilidade onde nenhum antes pode ter existido.

A engenharia de desempenho pode remover ineficiências em programas, conhecidas como inchaço de software, decorrentes de estratégias tradicionais de desenvolvimento de software que visam minimizar o tempo de desenvolvimento de um aplicativo em vez do tempo necessário para execução. A engenharia de desempenho também pode adaptar o software ao hardware no qual ele é executado, por exemplo, para aproveitar os processadores paralelos e as unidades vetoriais.

Desafios

A refatoração requer a extração da estrutura do sistema de software, modelos de dados e dependências entre aplicativos para recuperar o conhecimento de um sistema de software existente. A rotatividade de equipes implica conhecimento ausente ou impreciso do estado atual de um sistema e sobre as decisões de design tomadas pelos desenvolvedores que estão saindo. Outras atividades de refatoração de código podem exigir esforço adicional para recuperar esse conhecimento. As atividades de refatoração geram modificações arquiteturais que deterioram a arquitetura estrutural de um sistema de software. Essa deterioração afeta as propriedades arquitetônicas, como manutenibilidade e compreensibilidade, o que pode levar a um redesenvolvimento completo dos sistemas de software.

As atividades de refatoração de código são protegidas com inteligência de software ao usar ferramentas e técnicas que fornecem dados sobre algoritmos e sequências de execução de código. Fornecer um formato compreensível para o estado interno da estrutura do sistema de software, modelos de dados e dependências intracomponentes é um elemento crítico para formar um entendimento de alto nível e, em seguida, visualizações refinadas do que precisa ser modificado e como.

Teste

Testes de unidade automáticos devem ser configurados antes da refatoração para garantir que as rotinas ainda se comportem conforme o esperado. Os testes de unidade podem trazer estabilidade até mesmo para refatorações grandes quando executados com um único commit atômico. Uma estratégia comum para permitir refatorações seguras e atômicas abrangendo vários projetos é armazenar todos os projetos em um único repositório, conhecido como monorepo.

Com o teste de unidade instalado, a refatoração é um ciclo iterativo de fazer uma pequena transformação de programa, testá-la para garantir a correção e fazer outra pequena transformação. Se em algum ponto um teste falhar, a última pequena alteração é desfeita e repetida de maneira diferente. Através de muitos pequenos passos, o programa se move de onde estava para onde você deseja que esteja. Para que esse processo muito iterativo seja prático, os testes devem ser executados muito rapidamente, ou o programador terá que gastar uma grande fração de seu tempo esperando que os testes terminem. Os defensores da programação extrema e de outros desenvolvimentos ágeis de software descrevem essa atividade como parte integrante do ciclo de desenvolvimento de software.

Técnicas

Aqui estão alguns exemplos de micro-refatorações; alguns deles podem se aplicar apenas a determinados idiomas ou tipos de idioma. Uma lista mais longa pode ser encontrada no livro e site de refatoração de Martin Fowler. Muitos ambientes de desenvolvimento fornecem suporte automatizado para essas micro refatorações. Por exemplo, um programador pode clicar no nome de uma variável e, em seguida, selecionar o campo "Encapsular" refatoração a partir de um menu de contexto. O IDE solicitaria detalhes adicionais, geralmente com padrões sensatos e uma visualização das alterações de código. Após confirmação por parte do programador realizaria as alterações necessárias em todo o código.

  • Técnicas que permitem mais compreensão
    • Gráfico de dependência do programa - representação explícita de dependências de dados e controle
    • Gráfico de dependência do sistema - representação de chamadas de procedimento entre PDG
    • Inteligência de software - engenharia reversa o estado inicial para entender dependências intra-aplicação existentes
  • Técnicas que permitem mais abstração
    • Campo encapsulado – código de força para acessar o campo com métodos getter e setter
    • Geralizar o tipo – criar tipos mais gerais para permitir mais compartilhamento de código
    • Substituir código de verificação de tipo com estado / estratégia
    • Substituir condicional com polimorfismo
  • Técnicas para separar código em peças mais lógicas
    • A componentização quebra o código em unidades semânticas reutilizáveis que apresentam interfaces claras, bem definidas e simples de usar.
    • Extrair classe move parte do código de uma classe existente para uma nova classe.
    • Extrair método, transformar parte de um método maior em um novo método. Ao quebrar o código em peças menores, é mais facilmente compreensível. Isso também é aplicável às funções.
  • Técnicas para melhorar nomes e localização de código
    • Mover método ou mover campo – mover para uma classe mais apropriada ou arquivo de origem
    • Renomear método ou renomear campo - mudando o nome em um novo que melhor revela seu propósito
    • Puxe para cima – em programação orientada a objetos (OOP), mova-se para uma superclasse
    • Empurre para baixo – em OOP, mova-se para uma subclasse
  • Detecção automática de clones

Refatoração de hardware

Embora o termo refatoração originalmente se referisse exclusivamente à refatoração de código de software, nos últimos anos o código escrito em linguagens de descrição de hardware também foi refatorado. O termo refatoração de hardware é usado como um termo abreviado para refatoração de código em linguagens de descrição de hardware. Como as linguagens de descrição de hardware não são consideradas linguagens de programação pela maioria dos engenheiros de hardware, a refatoração de hardware deve ser considerada um campo separado da refatoração de código tradicional.

A refatoração automatizada de descrições de hardware analógico (em VHDL-AMS) foi proposta por Zeng e Huss. Em sua abordagem, a refatoração preserva o comportamento simulado de um projeto de hardware. A medida não funcional que melhora é que o código refatorado pode ser processado por ferramentas de síntese padrão, enquanto o código original não pode. A refatoração de linguagens de descrição de hardware digital, embora refatoração manual, também foi investigada pelo colega da Synopsys, Mike Keating. Seu objetivo é tornar os sistemas complexos mais fáceis de entender, o que aumenta a capacidade dos projetistas. produtividade.

História

O primeiro uso conhecido do termo "refatoração" na literatura publicada estava em um artigo de setembro de 1990 de William Opdyke e Ralph Johnson. Ph.D. de Griswold tese, Opdyke's Ph.D. tese, publicada em 1992, também utilizou este termo. Embora a refatoração de código tenha sido feita informalmente por décadas, o Ph.D. de William Griswold em 1991. A dissertação é um dos primeiros grandes trabalhos acadêmicos sobre refatoração de programas funcionais e procedurais, seguido pela dissertação de William Opdyke de 1992 sobre a refatoração de programas orientados a objetos, embora toda a teoria e maquinário estejam disponíveis há muito tempo como sistemas de transformação de programas. Todos esses recursos fornecem um catálogo de métodos comuns para refatoração; um método de refatoração tem uma descrição de como aplicar o método e indicadores para quando você deve (ou não deve) aplicar o método.

O livro de Martin Fowler Refactoring: Improving the Design of Existing Code é a referência canônica.

Os termos "fatoração" e "fatorando" têm sido usados desta forma na comunidade Forth desde pelo menos o início dos anos 1980. O capítulo seis do livro de Leo Brodie Thinking Forth (1984) é dedicado ao assunto.

Na programação extrema, a técnica de refatoração Extract Method tem essencialmente o mesmo significado que a fatoração em Forth; para quebrar uma "palavra" (ou função) em funções menores e de manutenção mais fácil.

As refatorações também podem ser reconstruídas post hoc para produzir descrições concisas de alterações complexas de software registradas em repositórios de software como CVS ou SVN.

Refatoração automatizada de código

Muitos editores de software e IDEs têm suporte de refatoração automatizada. Aqui está uma lista de alguns desses editores, ou os chamados navegadores de refatoração.

  • DOM Software Reengineering Toolkit (Implementos de grande escala refactoring para C, C++, C#, COBOL, Java, PHP e outros idiomas)
  • Eclipse baseado:
    • Eclipse (para Java, e em menor grau, C++, PHP, Ruby e JavaScript)
    • PyDev (para Python)
    • Photran (um plugin Fortran para o Eclipse IDE)
  • Embarcação Delphi
  • Baseado em IntelliJ:
    • Resharper (para C#)
    • AppCode (para Objective-C, C e C++)
    • IntelliJ IDEA (para Java)
    • PyCharm (para Python)
    • WebStorm (para JavaScript)
    • PhpStorm (para PHP)
    • Android Studio (para Java e C++)
  • JDeveloper (para Java)
  • NetBeans (para Java)
  • Smalltalk: A maioria dos dialetos inclui ferramentas de refatoração poderosas. Muitos usam o navegador de refatoração original produzido no início dos anos 90 por Ralph Johnson.
  • Visual Studio baseado:
    • Visual Studio (para.NET e C++)
    • CodeRush (addon para Visual Studio)
    • Visual Assist (addon para Visual Studio com suporte para refatoração para C# e C++)
  • Wing IDE (para Python)
  • Xcode (para C, Objective-C e Swift)
  • Qt Creator (para C++, Objective-C e QML)

Contenido relacionado

Telecomunicações na Estônia

A Lei Nacional de Telecomunicações no segundo período da independência da Estônia concedeu o monopólio da telefonia fixa local e internacional à...

Dia (software)

Dia () é um software de diagramação de uso geral gratuito e de código aberto, desenvolvido originalmente por Alexander Larsson. Ele usa uma interface...

Telecomunicações em Antígua e Barbuda

As telecomunicações em Antígua e Barbuda são via mídia no setor de telecomunicações. Este artigo é sobre sistemas de comunicação em Antígua e...
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save