Reingeniería de Software es una forma de modernización para mejorar las capacidades y/o mantenibilidad de los sistemas de información heredados mediante la aplicación de tecnologías y prácticas modernas.El proceso aplica principios de ingeniería para un sistema existente para encontrar nuevos requerimientos.
Para Roger Pressman una definición completa de reingeniería implica:
“La reingeniería del software abarca una serie de actividades entre las que se incluye el análisis de inventario, la reestructuración de documentos, la ingeniería inversa, la reestructuración de programas y datos, y la ingeniería directa. El objetivo de esas actividades consiste en crear versiones de los programas existentes que muestren una mayor calidad, y una mejor mantenibilidad.”
Los objetivos de la Reingeniería de Software son:
- Proporcionar asistencia automatizada para el mantenimiento.
- Reducir los errores y costos del mantenimiento.
- Incrementar la intercambiabilidad del grupo de mantenimiento.
- Hacer sistemas fáciles de entender, cambiar y probar.
- Habilitar la conversión y migración de sistemas.
- Reforzar el apego a estándares.
- Mejorar la respuesta a peticiones de mantenimiento.
- Mejorar el estado de ánimo del grupo de mantenimiento.
- Proteger y extender la vida del sistema.
- Re-usar componentes de sistema existentes.
Ventajas y Desventajas
Hacer reingeniería de un sistema software, según Ian Sommerville, tiene dos ventajas
clave sobre aproximaciones más radicales a la evolución del sistema:
- Riesgo reducido. Existe un alto riesgo en volver a desarrollar software crítico para los negocios. Pueden cometerse errores en la especificación, o puede haber problemas en el desarrollo. Los retrasos en la introducción del nuevo software pueden significar pérdidas en el negocio e incurrir en costes adicionales.
- Coste reducido. El coste de hacer reingeniería es significativamente menor que el coste de desarrollar nuevo software.
La principal desventaja de la reingeniería del software es que existen límites prácticos a la
extensión del sistema que puede ser mejorada mediante reingeniería.
EL MODELO CÍCLICO
Este modelo define [Pressman] seis actividades las cuales se muestran en la figura. En
algunas ocasiones, estas actividades se producen de forma secuencial y lineal, pero esto no
siempre es así.
Análisis de inventario.
Todas las organizaciones de software deberán disponer de un inventario de todas sus aplicaciones. El inventario puede que no sea más que una hoja de calculo con la información que proporciona una descripción detallada (por ejemplo: tamaño, edad, importancia para el negocio) de todas las aplicaciones activas.
Los candidatos a la reingeniería aparecen cuando se ordena esta información en función de su importancia para el negocio, longevidad, mantenibilidad actual y otros criterios localmente importantes. Es entonces cuando es posible asignar recursos a las aplicaciones candidatas para el trabajo de reingeniería.
Reestructuración de documentos.
La documentación débil es la marca de muchos sistemas heredados. ¿Pero que se hace acerca de ellos? ¿Cuáles son las opciones? Crear documentación consume mucho tiempo, si el sistema funciona vivirá con lo que tenga. La documentación debe actualizarse pero se tiene recursos limitados. Se utiliza un enfoque de “documentar cuando se toque”. El sistema es crucial para el negocio y debe volver a documentarse por completo incluso en este caso un enfoque inteligente es recortar la documentación a un mínimo esencial. Cada una de estas opciones es viable. Una organización de software debe elegir la más apropiada para cada caso.
Ingeniería inversa
El término “ingeniería inversa” tiene sus orígines en el mundo del hardware. 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án 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.
El término “ingeniería inversa” tiene sus orígines en el mundo del hardware. 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án 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.
La ingeniería inversa del software es algo bastante similar. Sin embargo, 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 (con frecuencia efectuado hace muchos años). Los “secretos” que hay que comprender resultan incomprensibles porque nunca se llegó a desarrollar una especificación.
Reestructuración del código.
Para llevar a cabo esta actividad, se analiza el código fuente mediante una herramienta
de reestructuración, se indican las violaciones de las estructuras de programación
estructurada, y entonces se reestructura el código (esto se puede hacer automáticamente). El
código reestructurado resultante se revisa y se comprueba para asegurar que no se hayan
introducido anomalías. Se actualiza la documentación interna del código.
Reestructuración de datos.
A diferencia de la reestructuración de código, que se produce en un nivel relativamente
bajo de abstracción, la estructuración de datos es una actividad de reingeniería a gran escala. En la mayoria de los casos, la reestructuración de datos comienza por una actividad de ingeniería inversa. La arquitectura de datos actual se analiza minuciosamente y se
definen los modelos de datos necesarios.
Ingeniería directa (foward engineering).
La ingeniería directa, que se denomina también renovación o reclamación, no solamente recupera la información de diseño de un software ya existente, sino que, además, utiliza esta información en un esfuerzo por mejorar su calidad global. En la mayoría de los casos, el software procedente de una reingeniería vuelve a implementar la funcionalidad del sistema existente, y añade además nuevas funciones y/o mejora el rendimiento global.
___________________________________
Bibliografía
- INGENIERÍA DEL SOFTWARE. Séptima edición, lan Sommerville. PEARSON EDUCACIÓN, S.A., Madrid, 2005.
- INGENIERÍA DEL SOFTWARE. Séptima edición, lan Sommerville. PEARSON EDUCACIÓN, S.A., Madrid, 2005.