Reutilização de código - Code reuse

Reutilização de código , também chamada de reutilização de software , é a utilização de software existente , ou conhecimento de software, para construir um novo software, seguindo os princípios de reutilização .

Visão geral

A reutilização de código ad hoc foi praticada desde os primeiros dias da programação . Os programadores sempre reutilizaram seções de código, modelos, funções e procedimentos. A reutilização de software como uma área de estudo reconhecida em engenharia de software, entretanto, data apenas de 1968, quando Douglas McIlroy, da Bell Laboratories, propôs basear a indústria de software em componentes reutilizáveis.

A reutilização de código visa economizar tempo e recursos e reduzir a redundância, aproveitando os ativos que já foram criados de alguma forma no processo de desenvolvimento do produto de software. A ideia principal na reutilização é que partes de um programa de computador escrito em um momento podem ser ou devem ser usadas na construção de outros programas escritos em um momento posterior.

A reutilização do código pode implicar na criação de uma versão mantida separadamente dos ativos reutilizáveis. Embora o código seja o recurso mais comum selecionado para reutilização, outros ativos gerados durante o ciclo de desenvolvimento podem oferecer oportunidades de reutilização: componentes de software, suítes de teste, designs, documentação e assim por diante.

A biblioteca de software é um bom exemplo de reutilização de código. Os programadores podem decidir criar abstrações internas para que certas partes de seu programa possam ser reutilizadas ou podem criar bibliotecas personalizadas para seu próprio uso. Algumas características que tornam o software mais facilmente reutilizável são modularidade , acoplamento fraco , alta coesão , ocultação de informações e separação de interesses .

Para que o código recém-escrito use uma parte do código existente, algum tipo de interface ou meio de comunicação deve ser definido. Isso geralmente inclui uma "chamada" ou uso de uma sub - rotina , objeto , classe ou protótipo . Nas organizações, tais práticas são formalizadas e padronizadas pela engenharia de domínio , também conhecida como engenharia de linha de produto de software .

A prática geral de usar uma versão anterior de um programa existente como ponto de partida para a próxima versão também é uma forma de reutilização de código.

Alguns dos chamados códigos de "reutilização" envolvem simplesmente copiar parte ou todo o código de um programa existente para um novo. Embora as organizações possam obter benefícios de tempo para o mercado de um novo produto com essa abordagem, elas podem subsequentemente ser sobrecarregadas com muitos dos mesmos problemas de duplicação de código causados ​​pela programação de recortar e colar .

Muitos pesquisadores trabalharam para tornar a reutilização mais rápida, fácil, sistemática e parte integrante do processo normal de programação. Esses são alguns dos principais objetivos por trás da invenção da programação orientada a objetos , que se tornou uma das formas mais comuns de reutilização formalizada. Uma invenção um pouco posterior é a programação genérica .

Outro meio mais recente é usar " geradores " de software , programas que podem criar novos programas de um determinado tipo, com base em um conjunto de parâmetros escolhidos pelo usuário. Os campos de estudo sobre tais sistemas são programação generativa e metaprogramação .

Tipos de reutilização

Com relação aos fatores motivacionais e motivadores, a reutilização pode ser:

  • Oportunista - ao se preparar para iniciar um projeto, a equipe percebe que existem componentes que podem ser reutilizados.
  • Planejado - uma equipe projeta componentes estrategicamente para que sejam reutilizáveis ​​em projetos futuros.

A reutilização pode ser categorizada ainda mais:

  • Reutilização interna - uma equipe reutiliza seus próprios componentes. Esta pode ser uma decisão de negócios, uma vez que a equipe pode querer controlar um componente crítico para o projeto.
  • Reutilização externa - uma equipe pode optar por licenciar um componente de terceiros. Licenciar um componente de terceiros normalmente custa à equipe de 1 a 20 por cento do que custaria para desenvolver internamente. A equipe também deve considerar o tempo que leva para encontrar, aprender e integrar o componente.

Com relação à forma ou estrutura de reutilização, o código pode ser:

  • Referenciado - o código do cliente contém uma referência ao código reutilizado e, portanto, eles têm ciclos de vida distintos e podem ter versões distintas.
  • Bifurcada - O código do cliente contém uma cópia local ou privada do código reutilizado e, portanto, eles compartilham um único ciclo de vida e uma única versão.

A reutilização bifurcada é freqüentemente desencorajada porque é uma forma de duplicação de código, que requer que todos os bugs sejam corrigidos em cada cópia, e os aprimoramentos feitos no código reutilizado precisam ser mesclados manualmente em cada cópia ou eles se tornam desatualizados. No entanto, a reutilização em bifurcação pode ter benefícios como isolamento, flexibilidade para alterar o código reutilizado, empacotamento mais fácil, implantação e gerenciamento de versão.

Sistemático

A reutilização sistemática de software é uma estratégia para aumentar a produtividade e melhorar a qualidade da indústria de software. Embora o conceito seja simples, a implementação bem-sucedida da reutilização de software é difícil na prática. Uma razão apresentada para isso é a dependência da reutilização de software no contexto em que é implementado. Algumas questões problemáticas que precisam ser abordadas relacionadas à reutilização sistemática de software são:

  • uma visão de produto clara e bem definida é uma base essencial para uma linha de produtos de software (SPL).
  • uma estratégia de implementação evolutiva seria uma estratégia mais pragmática para a empresa.
  • existe uma necessidade de apoio administrativo e liderança contínuos para garantir o sucesso.
  • uma estrutura organizacional apropriada é necessária para apoiar a engenharia SPL.
  • a mudança de mentalidade de uma empresa centrada em projetos para uma empresa orientada para o produto é essencial.

Exemplos

Bibliotecas de software

Um exemplo muito comum de reutilização de código é a técnica de usar uma biblioteca de software . Muitas operações comuns, como a conversão de informações entre diferentes formatos conhecidos, acesso a armazenamento externo, interface com programas externos ou manipulação de informações (números, palavras, nomes, locais, datas, etc.) de maneiras comuns, são necessárias para muitos diferentes programas. Os autores de novos programas podem usar o código em uma biblioteca de software para realizar essas tarefas, em vez de "reinventar a roda", escrevendo um código totalmente novo diretamente em um programa para realizar uma operação. As implementações de bibliotecas muitas vezes têm o benefício de serem bem testadas e cobrir casos incomuns ou misteriosos. As desvantagens incluem a incapacidade de ajustar os detalhes que podem afetar o desempenho ou a saída desejada e o tempo e custo de aquisição, aprendizado e configuração da biblioteca.

Padrões de design

Um padrão de projeto é uma solução geral para um problema recorrente. Os padrões de design são mais conceituais do que tangíveis e podem ser modificados para atender à necessidade exata. No entanto, classes abstratas e interfaces podem ser reutilizadas para implementar certos padrões.

Frameworks

Os desenvolvedores geralmente reutilizam grandes partes de software por meio de aplicativos e estruturas de terceiros. Embora as estruturas sejam geralmente específicas do domínio e aplicáveis ​​apenas a famílias de aplicativos.

Função de ordem superior

Na programação funcional , as funções de ordem superior podem ser usadas em muitos casos em que padrões de design ou estruturas foram usados ​​anteriormente.

Retrocomputação

Retrocomputação envolve a reutilização de código, simplesmente porque programas retro estão sendo executados em computadores mais antigos ou emuladores para eles.

Segurança informática

Na segurança de computador, a reutilização de código é empregada como um método de exploração de software. Quando um invasor não é capaz de inserir código diretamente para modificar o fluxo de controle de um programa, por exemplo, na presença de defesas de injeção de código como W ^ X , ele pode redirecionar o fluxo de controle para sequências de código existentes na memória.

Exemplos de ataques de reutilização de código são ataque de retorno à libc , programação orientada a retorno e programação orientada a salto.

Componentes

Um componente, em uma extensão orientada a objetos, representa um conjunto de classes colaborativas (ou apenas uma classe) e suas interfaces. As interfaces são responsáveis ​​por possibilitar a substituição de componentes. Os componentes reutilizáveis ​​também podem ser isolados e sincronizados entre os repositórios SCM usando tecnologias de gerenciamento de código-fonte de componentes ( CSCM ).

Computadores externos

Todo o conceito de "reutilização de código" também pode abranger aplicativos de engenharia fora do software. Por exemplo, a modelagem paramétrica em projetos auxiliados por computador permite a criação de projetos reutilizáveis. A padronização resulta na criação de partes interoperáveis ​​que podem ser reutilizadas em muitos contextos.

Crítica

A reutilização de código resulta na dependência do componente que está sendo reutilizado. Rob Pike opinou que "um pouco de cópia é melhor do que um pouco de dependência". Quando ele entrou para o Google , a empresa estava colocando grande ênfase na reutilização de código. Ele acredita que a base de código do Google ainda sofre com os resultados daquela política anterior em termos de velocidade de compilação e facilidade de manutenção.

Veja também

Referências

links externos