domingo, 2 de marzo de 2014

Reingeniería de Software



¿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.