Engenharia reversa e reengenharia
A engenharia reversa de software é um processo de recuperação de projeto, consistindo em analisar um programa na tentativa de criar uma representação do mesmo em um nível de abstração mais alto que o código-fonte. A reengenharia recupera informações de projeto de um software existente e usa essas informações para alterar ou reconstituir o sistema, preservando as funções existentes, ao mesmo tempo em que adiciona novas funções ao software, num esforço para melhorar sua qualidade.
O objetivo da reengenharia é produzir um sistema novo com maior facilidade de manutenção ,e a engenharia reversa é usada como parte desse processo, pois fornece o entendimento do sistema a ser reconstruído. Aplicando-se a reengenharia de software, o sistema pode ser redocumentado ou reestruturado.
O processo de reengenharia de software é constituído de duas fases: * 1 - O software de reconstrução é “desmontado”, visando seu entendimento. * 2 - O software é reconstruído, na forma desejada, a partir do produto da primeira fase, sendo incluídos os ajustes que se fizerem necessários.
Considerações para um processo de reengenharia: * Deve ser executado somente se existir um argumento aceitável de custo/benefıcio; * Deve remover projetos ruins, mas reconhecer e manter projetos bons e simples; * Problemas necessitam ser identificados; * Ferramentas devem ser adequadas aos processos de reengenharia, e não os Processos adequados às ferramentas.
Para executar um processo de reengenharia de um sistema, é necessário: * A engenharia reversa: identificar como os componentes do sistema se relacionam e então criar uma descrição mais abstrata do sistema. * Decidir sobre alterações na funcionalidade: são as alterações nos requisitos que o usuário determina que sejam implementados no sistema * Reprojetar o sistema: parte-se das abstrações de alto nível, obtidas nos passos anteriores, para uma representação mais concreta, ou