La reingeniería debe ser entendida como un proceso mediante el cual se mejora un software existente haciendo uso de técnicas de ingeniería inversa y reestructuración de código. En este proceso juega un papel importante el uso de repositorios para almacenar los resultados de la ingeniería inversa y las herramientas case, tal y como se ve en la figura siguiente:
Puesto que la reingeniería es una suma de tareas que requiere tiempo y esfuerzo, esta se puede dividir en una serie de procesos separados que se llevan a cabo secuencialmente. Los procesos fundamentales en la reingeniería son:
- Análisis de inventario: Esta proceso consiste en el estudio de la antigüedad, importancia de la aplicación en el negocio y la mantenibilidad actual, entre otros criterios, para estudiar la posible conveniencia de la reingeniería.
- Reestructuración de documentos: En este proceso se puede optar por una de tres opciones:
- Evitar la documentación de los módulo estáticos que no van a sufrir cambios.
- Documentar sólo lo que se va a modificar.
- Documentar toda la información del sistema, si es que este es fundamental para el negocio.
- Ingeniería inversa: En este proceso se extraen modelos de alto nivel de abstracción que ayuden a la comprensión de la aplicación para poder modificarla y que sirvan como punto de partida para el siguiente proceso. Estos datos se deben almacenar en un repositorio que permita que las personas o herramientas case que lleven a cabo los siguientes pasos lo encuentren disponible. De esta manera se conforma también la documentación de análisis y diseño de la aplicación que facilitará su posterior mantenimiento.
Reestructuración del código y de los datos y/o aplicación de técnicas de ingeniería directa. A la luz de los resultados de la ingeniería inversa, se reestructuran el código y los datos o se aplican técnicas de ingeniería directa para rehacer la aplicación.