REINGENIERRIA DE SOFTWARE
La Re-ingeniería del software se puede definir como: “modificación de un producto software, o de ciertos componentes, usando para el análisis del sistema, de tal manera que se oriente este cambio hacia mayores niveles de facilidad en cuanto a mantenimiento, re-utilización, comprensión o evaluación.” a
Esta consiste en 6 pasos:

Análisis de inventarios: Las organizaciones de software deberían tener un inventario de todas sus aplicaciones. El inventario tal vez no sea más que un modelo en una hoja de cálculo que contenga información que proporcione una descripción detallada.
Re-estructuración de documentos: La documentación débil es la marca de muchos sistemas heredados.
1. Crear documentación consume mucho tiempo. Si el sistema funciona, vivirá con lo que se tenga. En algunos casos éste es el enfoque correcto. No es posible recrear documentación para cientos de programas de computadora.
2.- La documentación debe actualizarse, pero se tienen recursos limitados. Se utilizará un enfoque de "documentar cuando se toque". Se documentan completamente aquellas porciones del sistema que en la actualidad presentan cambios.
3.- El sistema es crucial para el negocio y debe volverse a documentarse por completo. Incluso en este caso un enfoque inteligente es recortar la documentación a un mínimo esencial.
Ingenieria Inversa. El termino ingeniería inversa tiene sus orígenes en el mundo del hardware. Una compañia desensambla un producto de hardware de un competidor con la finalidad de comprender sus "secretos" de diseño y fabricación. La ingenieria inversa del software es el proceso de analizar un programa con la finalidad de crear una representación del programa en un mayor grado de abstracción que el código fuente.
Re-estructuración de código. El tipo más común de reingeniería es la reestructuración de código. Llevar a cabo esta actividad requiere analizar el código fuente empleando una herramienta de reestructuración, Se indican las violaciones de las estructuras de programación estructurada y entonces el código se reestructura. El código resultante se revisa y prueba para garantizar que no se han introducido anormalidades.
Re-estructuración de datos. Un programa con arquitectura de datos débil será dificil de adaptar y mejorar. La re-estructuración de datos comienza con una actividad de ingeniería inversa. La arquitectura de datos actual se analiza con minusciosidad y se definen los modelos de datos necesarios.
Ingeniería Directa. El programa antiguo sería insertado en el motor, analizando, reestructurado, y luego regenerado en una forma que exhibiese los mejores aspectos de la calidad del software. A corto plazo es improbable que tal "motor" aparezca, pero las empresas han introducido herramientas que mejoran un limitado subconjunto de dichas capacidades que aborden dominios de aplicación específico.