¿Qué es?
Según Sommerville la
reingeniería del software se refiere a la re-implementación de los sistemas
heredados para hacerlos más mantenibles.
Puede implicar re-documentar,
organizar y reestructurar el sistema, traducirlo a un lenguaje de programación
más moderno, y modificar y actualizar la estructura y los valores de los datos.
La reingeniería comienza con un sistema existente y
el proceso de desarrollo para su reemplazo se basa en comprender y
transformar el sistema original.
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. Para llevar a cabo la
reingeniería del Software se puede realizar a través del modelo Cíclico y en algunas
ocasiones, estas actividades se producen de forma secuencial y lineal, pero
esto no siempre es así.
ETAPAS DE LA REINGENIERÍA
·
- Análisis de Inventarios
- Todas las organizaciones de software deberían tener
un inventario de todas sus aplicaciones. Aunque éste tal vez no sea más que un
modelo en una hoja de cálculo con una descripción detallada (tamaño, edad,
importancia para el negocio) de las aplicaciones activas. Los candidatos a la
reingeniería aparecen al ordenar esta información en función de su importancia
para el negocio. Es entonces cuando es posible asignar recursos a las
aplicaciones candidatas para la reingeniería.
·
- Reestructuración de
documentos
a.
La documentación débil es un problema de muchos
sistemas heredados. ¿Qué se hace con ellos? Documentar consume mucho tiempo, y
si el sistema funciona, vivirá con lo que tenga.
b.
La documentación debe actualizarse pero se tiene
recursos limitados.
c.
El sistema es crucial para el negocio y debe volver
a documentarse por completo; sin embargo, incluso en este caso un enfoque
inteligente es recortar la documentación a un mínimo.
·
- Ingeniería Inversa - Una
cierta compañía desensambla un producto de hardware competitivo en un esfuerzo
por comprender los “secretos” del diseño y fabricación de su competidor. Estos
secretos se podrían comprender más fácilmente si se obtuvieran las
especificaciones de diseño y fabricación del mismo. Pero estos documentos son
privados, y no están disponibles para la compañía que efectúa la ingeniería
inversa. En la mayoría de los casos, el programa del cual hay que hacer una
ingeniería inversa no es el de un rival, sino, más bien, el propio trabajo de
la compañía. Los “secretos” que hay que comprender resultan incomprensibles
porque nunca se llegó a desarrollar una especificación; por lo tanto, la
ingeniería inversa del software es el proceso de análisis de un programa con el
fin de crear una representación de programa con un nivel de abstracción más elevado
que el código fuente. Es un proceso de recuperación de diseño. Con las
herramientas de la ingeniería inversa se extraerá del programa existente
información del diseño arquitectónico y de proceso, e información de los datos.
·
- Reestructuración de
código – Es el tipo más común de reingeniería; se puede
hacer con módulos individuales que se codifican de una manera difícil de
comprender, probar y mantener. 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 se
reestructura el código. El código reestructurado resultante se revisa y
comprueba para asegurar que no se hayan introducido anomalías; después se
actualiza la documentación interna del código.
·
- Reestructuración de
datos – Esta es una
actividad de reingeniería a gran escala. En la mayoría de los casos, comienza
con una actividad de ingeniería inversa. La arquitectura de datos actual se
analiza con minuciosidad y se define los modelos de datos necesarios, se
identifican los objetos de datos y los atributos, y después se revisa la
calidad de las estructuras de datos existentes. Cuando la estructura de datos
es débil se aplica una reingeniería a los datos. Dado que la arquitectura de
datos tiene una gran influencia sobre la del programa y sobre los algoritmos
que lo pueblan, los cambios en datos darán lugar invariablemente a cambios o
bien de arquitectura o bien de código.
·
·
- Ingeniería directa - En un
mundo ideal, las aplicaciones se reconstruyen utilizando un “motor de
reingeniería” automatizado. En el motor se insertaría el programa viejo, que lo
analizaría, reestructuraría y después regeneraría la forma de exhibir los mejores
aspectos de la calidad del software. Después de un espacio de tiempo corto, es
probable que llegue a aparecer este “motor”. La ingeniería directa no solo se
encarga de recuperar la información de diseño a partir del software existente,
también utiliza esta información para alterar o reconstruir el sistema
existente con la finalidad de mejorar su calidad global. En la mayoría de los
casos el software sometido a reingeniería vuelve a implementar la función
sistema existente y también añade nuevas funciones o mejoras.
Referencias
Sommerville, I.(2005) Ingeniería del Software(459).
México: Pearson.
Pressman, R. (2005) Ingeniería del Software, un
enfoque práctico (902-922). México: McGraw-Hill Interamericana.