Reutilização de código, também chamada de reutilização de software, é o uso de software existente, ou do conhecimento de software, para a construção de um novo software.

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

Tipos de reutilização 
No que diz respeito a motivação e aos fatores de condução, a reutilização pode ser:
 Oportunista - Enquanto se prepara para iniciar um projeto, a equipe percebe que há componentes existentes que podem ser reutilizados.
 Planejada - A equipe estrategicamente projeta componentes de modo que eles possam ser reutilizáveis em projetos futuros.

A reutilização pode ser mais categorizada:
 Reutilização interna - Uma equipe reutiliza seus próprios componentes. Esta pode ser uma decisão de negócios, já 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 ao time de 1 a 20 por cento do que custaria para desenvolver internamente. A equipe deve considerar também o tempo necessário para encontrar, conhecer e integrar o componente.

Quanto à forma ou estrutura de reutilização, o código pode ser:
 Referenciada - 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 é muitas vezes desencorajada, porque é uma forma de duplicação de código, o que exige que cada erro seja corrigido em cada cópia, e melhorias feitas ao código reutilizado precisam ser mescladas manualmente em cada cópia, caso contrário tornam-se desatualizadas. No entanto, a reutilização bifurcada pode ter benefícios como o isolamento, a flexibilidade para alterar o código reutilizado, fácil empacotamento, gerenciamento de implantação e de versão.

Engenharia de software