Vimos anteriormente a importância da manutenção do software e agora aprofundaremos mais no assunto focando na engenharia reversa de software, que alguns autores entendem como sendo técnicas de manutenção de software.
A engenharia reversa é uma atividade que trabalha com um produto pronto tentando entender como este produto funciona, o que ele faz exatamente e como ele se comporta em todas as circunstâncias. No caso da TI, fazemos engenharia reversa quando queremos trocar, modificar um software por outro, com as mesmas características ou entender como este funciona, muitas das vezes não temos acesso a sua documentação ou a documentação está incompleta e desatualizada.
A engenharia reversa também pode ser usada na criação de novos sistemas a partir de sistemas antigos, utilizando as informações recuperadas para alterar ou reconstituir o sistema existente, num esforço para melhorar sua qualidade global, reimplementando a função do sistema, adicionando novas funções ou melhora de desempenho global.
Por exemplo, imagine um sistema, o qual precisa ser modificado devido a regulamentações que evoluíram. O sistema foi feito há 20 anos, em uma linguagem de programação antiga. O analista que o desenvolveu já saiu da empresa há muitos anos, e não se sabe onde ele reside. A empresa pode ser multada e até ser impedida de continuar atendendo o mercado se não realizar essa mudança. Caso a empresa fique impedida de atuar, trará prejuízos e poderá até causar demissões, visto que o sistema representa cerca de 20% de retorno financeiro. A empresa precisa urgentemente realizar a manutenção ou substituir o sistema por outro. Pelas características do problema, muito dificilmente conseguiremos outro técnico com esse conhecimento. A engenharia reversa permite que a documentação seja elaborada e a tecnologia velha seja especificada.