jueves, 27 de diciembre de 2012

Reingeniería del Software

Autor:
PhD. Guillermo Choque Aspiazu
http://www.eldiario.net/
Publicado en:
Noviembre 24 de 2008

En la actualidad cualquier entidad ya sea educacional, gubernamental o empresarial dependen en total medida del rendimiento que tengan sus sistemas informáticos. Resulta limitado imaginar el funcionamiento de una empresa, sin la intervención de algún sistema computacional, pues estos están involucrados de algún modo en la organización, ventas, desarrollo, producción, manufactura, inventarios, publicidad, mercadotecnia, personal, costos; de manera resumida casi en todo. Una empresa, no es una entidad en sí misma, sino que está basada en programas computacionales, o más específicamente en productos software. La vida actual se encuentra en constante cambio y por lo tanto existe un desarrollo e innovación cada vez más rápido; y por supuesto las empresas no están excluidas de dicho cambio y se ven obligadas a actualizar constantemente sus sistemas computacionales, pues sin estos no podrían estar a la altura de las necesidades que exigen sus clientes. La gran competencia y demanda que existe en el mercado, exige que las empresas tengan lo último en tecnología, por lo que la actualización y el perfeccionamiento del software son absolutamente imprescindibles. Y es aquí precisamente donde entran en juego las estrategias para realizar cambios en el producto software.


Los sistemas de información heredados generalmente son la columna vertebral del flujo de información de las empresas y la principal forma de agruparla. Un sistema de información heredado puede ser definido como “cualquier sistema de información que significativamente se resiste a la modificación y evolución”. Tales sistemas de información pueden causar serios problemas a la organización, entre los cuales resaltan los siguientes: (1) Los sistemas de información heredados casi siempre son ejecutados sobre hardware obsoleto que son lentos y caros de mantener. (2) El mantenimiento del software puede ser caro, porque se carece de la documentación necesaria para el entendimiento de los detalles del sistema y su seguimiento es costoso de que además consume mucho tiempo. (3) Una falta de interfaces limpias hace que la integración de los sistemas de información heredados con otros sistemas sea difícil. (4) Los sistemas de información heredados son también difíciles mas no resulta imposible el ampliarlos. Por consiguiente la solución a estos problemas cae en las siguientes categorías: (1) Mantenimiento. Que consiste en un proceso incremental e iterativo en el cual se hacen pequeñas modificaciones al sistema. (2) Modernización. Implica cambios más extensos que el mantenimiento pero conserva partes considerables del sistema existente. (3) Remplazo. Que consiste en reconstruir el sistema desde sus inicios. Esta última solución consiste en aplicarle al sistema actividades de reingeniería.

La reingeniería se focaliza dentro de dos ámbitos muy importantes como son el negocio de la organización y el desarrollo del software. Por una parte se encarga del proceso de negocio con el fin de elevar la competitividad del mismo y por el otro, evalúa y examina los programas o aplicaciones con el objetivo de reestructurarlos o reconstruirlos, aportando de esta manera con un alto nivel de calidad. La reingeniería de procesos en los negocios se encuentra en función de las necesidades del cliente, rediseñándose radicalmente los procesos principales de negocios desde el inicio al fin con la finalidad de alcanzar mejoras en las medidas críticas de rendimiento tales como: costos, calidad, servicio y rapidez. La reingeniería regresa a la esencia del negocio, cuestionando principios fundamentales y su forma de operación. La reingeniería significa una revolución en la forma de administrar la empresa; su éxito no se basa en mejorar lo existente sino en olvidar cómo se hacían las cosas, diseñarlas de nuevo y analizar el proceso. La reingeniería implica borrar todo lo pasado y empezar de nuevo. Se determina primero qué debe hacerse y luego cómo debe hacerse. Se olvida de lo que es y se concentra en lo que debe ser.

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. En este proceso juega un papel importante el uso de repositorios para almacenar los resultados de la ingeniería inversa y las herramientas de asistencia de la ingeniería del software. Puesto que la reingeniería es una suma de tareas que requiere tiempo y esfuerzo, esta se puede dividir en una serie de procesos separados que se llevan a cabo secuencialmente. Los procesos fundamentales en la reingeniería son: (1) Análisis de inventario. Este proceso consiste en el estudio de la antigüedad, importancia de la aplicación en el negocio y el proceso de mantenimiento actual, entre otros criterios, para estudiar la posible conveniencia de la reingeniería. (2) Reestructuración de documentos. En este proceso se puede optar por una de tres opciones: Evitar la documentación de los módulo estáticos que no van a sufrir cambios, documentar sólo lo que se va a modificar y documentar toda la información del sistema, si es que este es fundamental para el negocio. (3) Ingeniería inversa. En este proceso se extraen modelos de alto nivel de abstracción que ayuden a la comprensión de la aplicación para poder modificarla y que sirvan como punto de partida para el siguiente proceso. Estos datos se deben almacenar en un repositorio que permita que las personas o herramientas que lleven a cabo los siguientes pasos lo encuentren disponible. De esta manera se conforma también la documentación de análisis y diseño de la aplicación que facilitará su posterior mantenimiento. (4) Reestructuración del código y de los datos o aplicación de técnicas de ingeniería directa. A la luz de los resultados de la ingeniería inversa, se reestructuran el código y los datos o se aplican técnicas de ingeniería directa para rehacer la aplicación.

La reingeniería del Software es una forma de modernización para mejorar las capacidades o la capacidad de mantenimiento de los sistemas de información heredados, mediante la aplicación de tecnologías y practicas modernas. La reingeniería del software ofrece una disciplina de preparación para migrar un sistema de información heredado hacia un sistema capaz de evolucionar. El proceso aplica principios de ingeniería aplicados a un sistema existente para encontrar nuevos requerimientos. El “Instituto de Ingeniería del Software” establece una definición de reingeniería como: “reingeniería es la transformación sistemática de un sistema existente dentro de una nueva forma de realizar el mejoramiento de la calidad en las operaciones, la capacidad del sistema, la funcionalidad, el rendimiento evolutivo a bajo costo y las agendas o riesgos para el cliente.”

El propósito de la reingeniería es que los sistemas existentes tomen ventajas de las nuevas tecnologías además de habilitar el nuevo esfuerzo de desarrollo para que se aproveche las ventajas de reutilizar sistemas existentes. La reingeniería tiene el potencial de mejorar la productividad y calidad del software a través de todo el ciclo de vida. La reingeniería casi siempre implica cambiar la forma de un programa y mejorar su documentación. En este caso, la funcionalidad del programa no es modificada; sólo su forma se presta a modificaciones. En otros casos, la reingeniería va más allá de la forma e incluye rediseñar la funcionalidad del programa para buscar mejores requerimientos de usuario.

Los objetivos de la reingeniería son: (1) Proporcionar asistencia automatizada para el mantenimiento. (2) Reducir los errores y costos del mantenimiento. (3) Incrementar el intercambio del grupo de mantenimiento. (4) Hacer sistemas fáciles de entender, cambiar y probar. (5) Habilitar la conversión y migración de sistemas. (6) Reforzar el apego a estándares. (7) Mejorar la respuesta a peticiones de mantenimiento. (8) Mejorar el estado de ánimo del grupo de mantenimiento. (9) Proteger y extender la vida del sistema. (10) Usar ayudas de la ingeniería del software para apoyar sistemas existentes. (11) Reusar componentes de sistema existentes.

La reingeniería se aplica en las siguientes situaciones: (1) Cuando una aplicación de cierto sistema ha funcionado durante varios años y, con el paso del tiempo, se ha vuelto inestable debido a las correcciones, adaptaciones y mejoras realizadas. (2) Cuando alguna de las partes de un gran sistema requiere un mantenimiento frecuente. (3) Cuando los cambios en el sistema se hacen mayormente sobre una parte de un sistema, entonces dicha parte puede ser objeto de reingeniería. (4) Cuando el soporte hardware o software se queda obsoleto. (5) Cuando se dispone de herramientas automáticas para reestructurar el sistema. Entre las ventajas que proporciona la reingeniería se anotan las siguientes: (1) Se reduce el riesgo en la actualización del software. (2) Se reduce el costo en la actualización del software. (3) Se aumenta la calidad y confiabilidad del software.

Para conocer más acerca del Doctor Choque y sus publicaciones, haz clic en el siguiente vínculo: