Reingeniería del Software
Reingeniería del
software se puede definir como: “modificación de un producto software, o de
ciertos componentes, usando para el análisis del sistema existente técnicas de
Ingeniería Inversa y, para la etapa de reconstrucción, herramientas de
Ingeniería Directa, de tal manera que se oriente este cambio hacia mayores
niveles de facilidad en cuanto a mantenimiento, reutilización, comprensión o
evaluación.”
Cuando una aplicación
lleva siendo usada años, es fácil que esta aplicación se vuelva inestable como
fruto de las múltiples correcciones, adaptaciones o mejoras que han podido
surgir a lo largo del tiempo. Esto deriva en que cada vez que se pretende
realizar un cambio se producen efectos colaterales inesperados y hasta de
gravedad, por lo que se hace necesario, si se prevé que la aplicación seguirá
siendo de utilidad, aplicar reingeniería a la misma.
Entre los beneficios
de aplicar reingeniería a un producto existente se puede incluir:
·
Pueden reducir los riegos evolutivos de una organización.
·
Puede ayudar a las organizaciones a recuperar sus inversiones en
software.
·
Puede hacer el software más fácilmente modificable
·
Amplía las capacidades de las herramientas CASE
·
Es un catalizador para la automatización del mantenimiento del software
·
Puede actuar como catalizador para la aplicación de técnicas de
inteligencia artificial para resolver problemas de reingeniería
La reingeniería del
software involucra diferentes actividades como son:
·
análisis de inventarios
·
reestructuración de documentos
·
ingeniería inversa
·
reestructuración de programas y datos
·
ingeniería directa
con la finalidad de
crear versiones de programas ya existentes que sean de mejor calidad y los
mismos tengan una mayor facilidad de mantenimiento.
Figura 1. Pasos de la
Reingeniería del Software
Análisis de Inventarios
Todas 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
(tamaño, edad, importancia para el negocio) de 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.
Es importante señalar
que el inventario deberá visitarse con regularidad, el estado de las
aplicaciones puede cambiar en función del tiempo y, como resultado, cambiarán
las prioridades para la 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
Este término tiene
sus orígenes 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. En esencia, una ingeniería inversa
con éxito precede de una o más especificaciones de diseño y fabricación para el
producto, mediante el examen de ejemplos reales de ese producto.
La ingeniería inversa
del software es algo similar. 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.
Consiguientemente, 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.
La Ingeniería inversa
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
El tipo más común de
reingeniería es la reestructuración de código, se puede hacer con módulos
individuales que se codifican de una manera que dificultan comprenderlos,
probarlos y mantenerlos.
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 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
La reestructuración
de datos es una actividad de reingeniería a gran escala. En la mayoría de los
casos, la reestructuración de datos 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 objetivos 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 (por ejemplo, actualmente se implementan archivos planos, cuando
un enfoque relacional simplificaría muchísimo el procesamiento), se aplica una
reingeniería a los datos.
Dado que la
arquitectura de datos tiene una gran influencia sobre la arquitectura del
programa, y también 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”, pero los fabricantes de CASE han presentado
herramientas que proporcionan un subconjunto limitado de estas capacidades y
que se enfrentan con dominios de aplicaciones específicos. Lo que es más
importante, estas herramientas de reingeniería cada vez son más sofisticadas.
La ingeniería directa
no solo recupera 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 del
sistema existente y también añade nuevas funciones o mejoras.
No hay comentarios:
Publicar un comentario