

REPÚBLICA BOLIVARIANA DE VENEZUELA
UNIVERSIDAD BICENTENARIA DE ARAGUA
VICERRECTORADO ACADÉMICO
FACULTAD DE INGENIERÍA
CÁTEDRA: INGENIERÍA DE SOFTWARE







Primera Edición (2024)
Editorial UBA

San Felix, Venezuela
A la memoria de mi padre.
Para mi madre y mi hermana, mujeres pilares en mi vida.
INTRODUCCIÓN
El proceso de la globalización dentro del marco empresarial ha ido evolucionando a pasos apresurados, a medida que el tiempo y los procesos de reingeniería transcurren y van apartando “las viejas reglas acerca de la forma en que se organizan y desarrollan los negocios, buscando reinventar la manera de hacer las cosas” (Estigarribia, s.f.)
Esto le ha generado a la mayoría de las empresaspuntos positivos, puesto que para hacer frente a los grandes desafíos de nuevos mercados altamente competitivos se han visto en la obligación de buscar o desarrollar nuevas formas para mantenerse en la vanguardia de su entorno. Es por ello, que estos procesos están enfocados en repensar de manera elemental como serán rediseñados y aplicados cada proceso productivo, cuyo fin le proporcione los mejores resultados.
En base a lo antes expuesto, cabe acotar que la creación de este E-book tiene como propósito exponer la importancia de aplicar los principios de reingeniería del Software en favor de mejorar la calidad, funcionabilidad y rendimiento de los sistemas de software existente. Para ello se disertarán los siguientes tópicos: procesos de reingeniería y principiosde reingeniería. Diseño y arquitectura. Modelos. Mantenimiento del software. Ingeniería inversa. Restructuración del software, para dar respuesta a la siguiente interrogante: ¿Qué impacto tiene la reingeniería de software
Tema 1.- Procesos de reingeniería y principios de reingeniería.
1.1.- Definición de Procesos de reingeniería
La reingeniería de software consiste en un proceso que se encarga de analizar, modificar y mejorar los sistemas de software existentes, con el propósito de aumentar su eficiencia, funcionalidad y sobretodo su seguridad.

El mismo se haconstituidoen unaprácticaque cada día es indispensable en cualquier entorno tecnológico, puesto que los sistemas cambian constantemente, por ende es una exigencia que obliga a las empresas a adaptarse a las nuevas demandas que surgen tanto en su área de mercado como en las necesidades de sus usuarios (Ver el siguiente enlace: Https://catedraalimentacioninstitucional2.wordpress.com/wpcontent/uploads/2018/05/reingenieria-grupo-5.pdf).
La reingeniería del software involucra diferentes actividades (ver figura 1), como son: reestructuración de documentos, programas y datos; ingeniería inversa e directa y análisis de inventarios, con el propósito de generar con mejor calidad versiones de programas ya existentes y que los mismos a su vez tengan una mayor facilidad de mantenimiento.

Los principio de la reingeniería con los que hoy se trabaja en esta área, fueron propuestos por Michael Hammer y James Champy. En estos, se establecen las reglas a través de las cuales un desarrollador puede realizar su trabajo. Estos principios son:

• Organizar el trabajo en torno a los resultados, no de las tareas.
• Identificar claramente cada uno de los procesos de la organización y priorizarlos de acuerdo al orden de urgencia de rediseño
• Integrar el trabajo de procesamiento de información con el trabajo real que genera la información.
• Tratar cada recurso geográficamente disperso como si estos estuvieran centralizados.
• Vincular las actividades paralelas en el flujo de trabajo en lugar de simplemente integrar sus resultados.
• Colocar los puntos de decisión donde se realiza el trabajo e incorporar control en el proceso.
• Capturar la información una vez y en la fuente.
El desarrolla de un nuevo diseño para los procesos dentro de la reingeniería se fundamenta principalmente en el análisis de los procesos actuales y las oportunidades de mejoras que se identifican en el sistema, los cualesincluyen laeliminación de tareas innecesarias o redundantes y
la automatización de actividades; así como también la reasignación de responsabilidadesyla implementación de nuevas tecnologías y enfoques innovadores, por lo tanto, el diseño se debe alinear con los objetivos y la visión de la organización.
En tal sentido, para proponer un rediseño exitoso es indispensable que se apliquen un conjunto de elementos a través de los cuales se puedan crear e implementar un nuevo proceso. Estos elementos serían:
• Las metas: estas deben comprometer a toda la empresa, por lo tanto, tienen que ser un reto para todos dentro de la organización.
• Tiempo: dedicar un tiempo determinado al desarrollo e implementación de los procesos es importantísimo, puesto que cada fase necesita su propio desarrollo, por lo tanto, es vital recordar que ningún proceso de rediseño se completa y triunfar si no se cambian las prioridades dentro de la empresa
• Examinar con profundidad las exigencias de los usuarios potenciales y de los clientes: de tal manera que se puedan cumplir cada uno de los objetivos de la reingeniería de procesos.
• El líder: debe ser una persona que posea una visión amplia del proyecto, sobre todo en la fase de implementación este debe estar bien empapado sobre los requerimientos que hizo el cliente
• Probar varias veces el producto: es fundamental que se conozca de antemano si el software rediseñado funciona correctamente antes de lanzarlo y establecerlo como vía principal de la empresa

1.3.2.- Arquitectura de la reingeniería.
La arquitectura de la reingeniería de un software está considerada como labase fundamental para realizar sistemas de software exitosos. De hecho, la arquitectura es la que permite en gran medida que un software posea o carezca de atributos de calidad, convirtiéndolo en un modelo reutilizable que puede ser transferido y utilizado en distintos procesos. Es por ello, que el desarrollador del software debe definir y documentar las vistas que considere importantes para el desarrollo y entendimiento del sistema.

Dentro de este marco de ideas, se puede mencionar las reglas para documentar una arquitectura del software planteadas por Clements et al., (citado por Avella, 2005). Estas consisten en que se deben:
• “Escribir la arquitectura desde el punto de vista de los lectores.
• Evitar repeticiones innecesarias.
• Evitar la ambigüedad.
• Usar un estándar para la organización.
• Consignar explicaciones.
• Mantener actualizada la documentación.
• Revisar que la documentación sea conveniente para su propósito”
1.4.- Modelos de la reingeniería.
Existen dos (2) modelos de reingeniería muy importantes. Uno fue propuesto por Hammer y Champy y el otro por Morris y Brandon.
• El modelo de Hammer y Champy: se concentra en la formación de equipos de trabajos que desarrollen modelos del deber ser, visualizandosolucioneshacia el cliente. Sus ventajas consisten en que define los roles de los miembros del equipo de reingeniería; el trabajo se enfoca en procesos, aunque no menciona las técnicas para efectuarlo; además usa los conceptos primarios sobre la utilización de la tecnología. Por otro lado, contempla ciertas limitaciones, tales como: no provee la metodología ni una lista de herramientas para desarrollar un proyecto de reingeniería; ni mucho menos menciona los procesos y sus tipos, pero si emplea términos de procesos estratégicos y de valor agregado, como iguales.
• El modelo Morris y Brandon: moderniza el proceso de la reingeniería, sugiriendo que esta debe ser más dinámica en los negocios y divide el proceso en dos vertientes definitivas como son el posicionamiento y el proceso, que no es otro que la aplicación del proyecto en sí mismo. Las ventajas de este modelo radican en que es necesario el uso de la tecnología como facilitadora del proyecto, así como también de técnicas modernas para el mapeo de los procesos; además que es vital la incorporación del elemento humano como parte clave del éxito de la empresa. Por otra parte; sus limitaciones residen en que los roles y las responsabilidades de los miembros del equipo de reingeniería no se desglosan con claridad; y que no habla de cambios radicales, todo lo contrario insisten en cambios continuos, por lo tanto los procesos son mejorados en vez de ser rediseñados.

1.5.- Mantenimiento del software.
El mantenimiento del software son actividades que se realizan con la intención dealargarla vida útil del sistema y al mismo tiempo de adecuarlo a las necesidades de la empresa. Estos se clasifican en cuatro tipos:

• Mantenimiento correctivo: a través de esta clase de mantenimiento se busca eliminar cualquier tipo de error que en un principio no fue detectado durante las pruebas realizadas al sistema, antes de que este entrara en funcionamiento definitivo.
Las actividades que se realizan en este tipo de mantenimiento consisten en: depurar códigos, corregir mensajes e interfaces, ajustar el software y hardware para adaptarla a un uso específico y corregir vulnerabilidades.
• Mantenimiento adaptativo: su objetivo consiste en adaptar el software a los cambios que ha experimentado la organización desde que fue desarrollado el sistema Las actividades que se realizan a través de este mantenimiento consisten en: agregar nuevosmódulosal sistema, nuevosreportes, nuevasfuncionesoel manejo de nuevos datos en la base de datos; además permite escalar las capacidades del sistema para el manejo de un mayor volumen de datos.
• Mantenimiento de perfeccionamiento o mejoras: este se encarga de hacer mejoras al sistemas, para evitar fallas críticas, por lo tanto, con él se realizan atajos y en algunas veces se agregan nuevasfunciones que no fueron solicitadas por el usuario pero que permiten generar una plusvalía al software.

• Mantenimiento preventivo: el mismo tiene como objetivo mantenerel funcionando del software en óptimas condiciones. Las actividades queusualmente se realizan a través de este tipo de mantenimiento son: compactación y respaldo de las bases de datos; eliminación de datos innecesarios u obsoletos o de claves y usuarios que ya no son parte de la organización; además ayudan en mejorar la seguridad para impedir ataques al sistema y/o robo de información.
1.6.- Ingeniería inversa.
La ingeniería inversa del software es un proceso de análisis de un programa con el propósito de generaruna representación del sistema con un nivel inconcreto mucho más elevado que el código fuente original Tanto es así, que a través de las herramientas de la ingeniería inversa se extrae del programa existente la mayor información de su diseño arquitectónico y de su proceso, e incluso la información de sus datos.
La ingeniería inversa se puede aplicar tanto al software, como a la base de datos. Cuando se aplica a un software, se busca profundizar en el estudio de su funcionamiento hasta el punto de llegar a entenderlo, modificarlo y por supuesto de mejorarlo En el caso de la aplicación de la ingeniería inversa a las bases de datos, esta acción trata de definir objetos de datos y de permitir establecer las relaciones existentes entre objetos, para formar uno nuevo a partir de este.
1.7.- Restructuración del software.
La reestructuración del software es un proceso a través del cual se modifica el código fuente y/o los datos en un intento de adecuarlo a futuros cambios. El mismo, se enfoca en los detalles que poseen los diseños de los módulos individuales y en las estructuras de los datos locales que están definidos dentro de los módulos. En otras palabras, la reestructuración deun software se gestiona cuando la arquitectura básica de la aplicación es robusta, a pesar de que sus partes técnicas internas necesiten un arreglo En tal caso, la reestructuración se puede hacer al código o a los datos.

Con respecto a la reestructuración del código, este se efectúa para obtener un diseño que realice la misma función pero con mejor calidad que el software original. Por otro lado, la reestructuración de datos, se lleva a cabo para extraer elementosy objetos quefaciliten brindarinformación del flujo de datos y a la vez ayuden a comprender su estructura.
En tal sentido, la reestructuración del software brindalos siguientes beneficios:
• Genera programas con mayor calidad, ya que su documentación y complejidad se ajustan a las prácticas y a los estándares de la ingeniería del software moderno.
• Minimiza el esfuerzo requerido que usualmente se utiliza para efectuar las actividades de mantenimiento.
• Ayuda a que el software sea más sencillo de comprobar y depurar.
CONCLUSIONES
Desde que fue creada la reingeniería de software hasta la actualidad, la misma se ha convertido en una herramienta fundamental para mantener a la vanguardia los sistemas de cualquier tipo de empresa. De hecho, este tipo de proceso se encarga de modificar un software, o en otras ocasiones pueden ser algunos de sus componentes, para lo cual emplea técnicas de análisis de ingeniería inversa, y para su etapa de reconstrucción puede utilizar herramientas de la ingeniería directa, con el propósito de encaminarloscambios quese generen,cuyofin le facilitaría un buen mantenimiento, la reutilización y la evaluación periódica del mismo. Para finalizar, es significativo mencionar que un proceso de reingenieríadesoftware necesariamente noimplicadesarrollar un sistema nuevo desde cero, todo lo contrario a través de este proceso se puede sustraer el conocimiento, las habilidades y las experiencias acumuladas en el sistema original, de tal manera que se pueda aplicar las mejores prácticas y metodologías para finalmente optimizarlo y adaptarlo a los requerimientos de la empresa Además, a través de este proceso se puede disminuir costos y tiempo; así como también se puede evitar riesgos que estén asociados al desarrollo de un sistema completo.
REFERENCIAS
Avella, C. (2005). Reingeniería de software aplicada a un sistema de información académico desarrollado sobre Oracle-Visual Basic, con análisis y diseño estructurado: UNIANDES. Disponible en: Https://repositorio.uniandes.edu.co/server/api/core/ bitstreams/ffbebee5-980b-430a-9e01-20460979c65a/content. Consultado 2024, Marzo 28.
Carranza, E. (2018). Reingeniería de procesos desde enfoque de arquitecturadeprocesos.pdf: UNAM. Disponible en: Http://www. ptolomeo.unam.mx:8080/jspui/bitstream/132.248.52.100/15286/1/R eingenier%C3%ADa%20de%20procesos%20desde%20enfoque% 20de%20arquitectura%20de%20procesos.pdf Consultado 2024, Marzo 28.
Castillo, L. (2020). Mantenimiento y reingeniería de software: Blogspot.com Disponible en: Https://leysimar20.blogspot.com/2020 /06/mantenimientos-y-reingenieria-de.html. Consultado 2024, Marzo 28
Estigarribia, R. (s.f.). ReingenieríadeSoftware: Medium.com. Disponible en: Https://medium.com/@ramiroec/reingenier%C3%ADa-de-softw are-41fa705276ac Consultado 2024, Marzo 28.
Gamas, R. (2011). Mantenimiento y reingeniería de software: Sistemasumma.com. Disponible en: Https://sistemasumma.com /2011/05/26/mantenimiento-y-reingenieria-de-software/.Consultado 2024, Marzo 28.
Guerra, G. et al. (2018). Reingeniería: Wordpress.com. Disponible en: Https://catedraalimentacioninstitucional2.wordpress.com/wp-conten t/uploads/2018/05/reingenieria-grupo-5.pdf Consultado 2024, Marzo 28.
Pérez, G., Gisbert, V. & Pérez, E. (2017). Reingeniería de procesos: Ciencias.com. Disponible en: Https://3ciencias.com/wp-content/ uploads/2018/01/art_10.pdf Consultado 2024, Marzo 28.
Vargas, A. (2010). Reingeniería del software: Blogspot.com. Disponible en: Https://arielvargasu.blogspot.com/2010/12/reingenieria-delsoftware.html Consultado 2024, Marzo 28.