

REINGENIERIA DE SOFTWARE

Importancia de Aplicar los Principios de Reingeniería de Software en favor de mejorar la Calidad, Funcionalidad y Rendimiento de los Sistemas de Software existentes.


EDITORIAL

Este e-book es un espacio diseñado para permitir al lector conocer todo lo referente a sistemas informáticos, con un tema muy interesante en esta edición, como lo es: La reingeniería de software, con el fin de modelar los principios y procesos de la misma, así como sus modelos de aplicación, para que así, estas permitan optimizar los softwares existentes y cuya fundamentación permite dar solución a problemas de usuarios y clientes simplificando lo complejo.




DIRECTORIO
EDITORIAL
Diseño de portada
Deyvi Ruiz
Diseño de e-book
Deyvi Ruiz
Dirección
Deyvi Ruiz
Redacción
Deyvi Ruiz
AUTORIDADAES GENERALES
Dr. Basilio Sanchez
Rector
Dr. Manuel Piñate
Vicerrector Académico
Abog. MSc. Gustavo Sanchez
Vicerrector Administrativo
Edilia Papa
Secretaria
AUTORIDADES DE LA FACULTAD
Ing. MSc. Cristina Rojas
Decana
Ing. Esp. William Jimenez
Director de Escuela
MSc. Yeisy Guillen
Tutor Académico



DEDICATORIA

Se dedica este e-book primeramente a Dios quien es el que hace posible todas las cosas, y a todos aquellos lectores que están llenos de preguntas y cuyos saberes se ampliaran gracias a esta obra.
INTRODUCCIÓN
En un mundo que se mueve cada vez más rápido, las empresas deben transformarse constantemente para conseguir seguirle el ritmo y poder estar vigentes para sus clientes. Por lo tanto, deben modificar y actualizar ciertos aspectos para estar a la par del mercado actual y mantener un ritmo de trabajo adecuado.
Uno de los aspectos con más relevancia, que deben transformarse o actualizarse dentro de las compañías son sus sistemas, como sus páginas web, software y aplicaciones, pues con el tiempo pueden volverse obsoletos y traerle consecuencias a la empresa, sin embargo, además de la actualización existen otros procesos como la reingeniería de software, la cual es capaz de reformar un software para mejorarlo.
La reingeniería de software es un proceso capaz de modificar un software o alguno de sus componentes por medio de ciertas técnicas como la ingeniería inversa (comprensión del funcionamiento de un programa), reestructuración de código, restructuración de datos o ingeniería directa; esto con el fin de mejorar o agregar nuevas funcionalidades.
Para este proceso se utiliza un modelo el cual puede ser cíclico o de herradura y que se compone por diversas etapas o actividades, las cuales pueden ser aplicadas tanto de forma secuencial como de forma lineal
En este e-book se estudiará: los principios y aplicaciones de la reingeniería de software, así como sus modelos y fases. También sanalizará que es la ingeniería inversa, el mantenimiento del software y restructuración del mismo con el fin de aclarar todas las dudas que puedan surgir referente al tema en mención.


PRINCIPIO Y PROCESOS DE LA REINGENIERIA
Son muchas y variadas las referencias que se pueden encontrar del concepto de reingeniería. Algunos, como Arnold. (1993), la definen como una actividad que mejora la comprensión del software, o bien, lo prepara o mejora para incrementar su facilidad de mantenimiento, reutilización o evolución. Chaikovski y Cross. (1990), es el examen y alteración de un sistema para reconstruirloenuna nuevaforma yla subsiguiente implementación de esa forma. Otros lo ven como el proceso de ingeniería inversa seguida de una ingeniería directa. Biggerstoff. (1990) se refiere a la reutilización como la Re-aplicación de una variedad de tipos de conocimientos de un sistema a otro para reducir el esfuerzo de desarrollo y mantenimiento de ese otro sistema; es decir, la reutilización está enfocada a mejorar la calidad yreducir el esfuerzo haciendouso de parte de un sistema en un nuevo contexto.
Endefinitiva,elconceptodereingenieríadesoftwarese refiere a la reutilización de sistemas heredados, pero transformándolos para hacerlos más mantenibles. Se trata pues de cualquier procedimiento que produce un sistemamediantelareutilizacióndealgoprocedentede algún esfuerzo anterior. Estos sistemas suelen tener algunosproblemas debido a que normalmentehan sido desarrollados y mantenidos por muchas personas, y en muchas ocasiones, utilizando técnicas y estilos de programación propios; además, con el tiempo normalmente las especificaciones han cambiado y el diseño (si es que lo había) se ha perdido.


FASES DE LA REINGENIERIA DE SOFTWARE
En el proceso de reingeniería se podrían distinguir las siguientes fases:
Traducción del código fuente: El programa se convierte a una versión más moderna del lenguaje en que estaba codificado o a un lenguaje diferente. Los motivos que llevan a una traducción pueden ser muy diversos: falta de conocimientos del personal en ese lenguaje, falta de soporte en los compiladores, actualización de la plataforma de hardware o de software, políticas de empresa, necesidad de cambio en las interfaces de usuario, etc. El proceso será económicamente rentable, si se dispone de alguna herramienta que realice el gruesodelatraducción.Enmuchoscasos,elcódigo que se obtiene tiene que ser modificado de forma manual.
Ingeniería inversa: Se analiza el programa y se extrae información de él, la cual ayuda a documentar su organizaciónyfuncionalidad.Eselprocesodeanalizarel software con el objetivo de recuperar su diseño y especificación. Lo normal es que la entrada a este proceso sea el código fuente si se dispone de él. Se alterna el análisis utilizando herramientas automatizadas con el trabajo manual en el código fuente para obtener el diseño del sistema. La información obtenida suele almacenarse como grafo dirigido, que se va modificando y completando. A partir del grafo se generarán otros documentos como diagramas de estructura de programas, diagramas de estructura de datos y matrices de trazabilidad. Las herramientas que se utilizan para comprender el programasuelenserdetiponavegadores,quepermiten moverse por el código, definir unos datos y rastrearlos por el programa. Se hacen anotaciones manuales



Para ampliar la información con respecto a la ingeniería inversa. Ver el siguiente video
FASES DE LA REINGENIERIA DE SOFTWARE
Mejora de la estructura del programa: Se analiza y modifica la estructura de control del programa para hacerlo más fácil de leer y comprender. Los programas pueden presentar lógica de control no intuitiva lo que puede hacer que no se entiendan fácilmente. El principal factor para tener en cuenta es que el control sea estructurado.
Modularización del programa: Es el proceso de reorganizar un programa de forma que partes relacionadasseintegrendeformaconjunta.Estofacilita eliminar componentes y mejorar la comprensión. Se pueden considerar diferentes tipos de módulos: abstracciones dedatos,módulos dehardware,módulos funcionales,módulos deapoyo al proceso, etc.
Reingeniería de datos: Setratadeanalizaryreorganizar lasestructuras,einclusoaveces,losvaloresdelosdatos de un sistema para hacerlos más comprensibles. Si la funcionalidad del sistema no cambia, la reingeniería de datos no es necesaria.


FASES DE LA REINGENIERIA DE SOFTWARE
Estas, no son fases que tengan que desarrollarse todas necesariamente, sino que dependiendo de los casos podrán figurar unas u otras. También se desarrolla un modelo de reingeniería del Software que sitúa al usuario como colaborador principal en la tarea de especificar los requisitos del sistema. Las fases, en este caso serían:
Definición del problema: Se identifican objetivos, límites, beneficios, riesgos, estimaciones de tiempos, etc., estableciendo una imagen real de lo que existe realmente ahora y lo que se quiere obtener en el futuro.
Estudio del código antiguo: Partiendo del código fuente en un lenguaje de tercera generación, se obtiene un conjunto de documentos que ayudan a posteriores fases de la metodología.
Viabilidad del proyecto: Consiste en detectar posibles errores en las especificaciones.
Rediseño de especificaciones. Se busca conseguir, que las especificaciones representen de forma real la visión futura deseada del sistema.
Creación de prototipos. De aquellas partes que puedan dar problemas, o solamente de aquellas que vayan a cambiar sustancialmente de la original.
Planificación de la implementación. Consiste en diseñar la forma y modo en que se va a migrar de una herramienta a otra.
Perfeccionamiento. Realizar cambios en la nueva aplicación que aumenten la calidad del sistema.
No en todos los sistemas es adecuado realizar un proceso de reingeniería. Antes de tomar esa decisión se puede valorar utilizando, por ejemplo, la matriz de decisión de Jacobson. (1991), para determinar si el sistema tiene un gran valor de negocio y por tanto es conveniente que se aplique reingeniería. Según Jones. (1994), se pueden definir diez elementos del software que pueden reutilizarse: planes de proyecto, estimaciones de coste, arquitectura, especificaciones y modelos de requisitos, diseños, código fuente, documentación de usuario y técnica, interfaces humanas, datos, y casos de prueba.
Ver el Siguiente Video


ARQUITECTURA Y DISEÑO
Transformaciones a nivel funcional o de diseño.
Transformaciones a nivel funcional o de diseño tiene que ver con el reempaquetado de funcionalidad (por ejemplo, migrar desde un diseño funcionala un diseñoorientadoaobjeto). La encapsulación de un módulo de funcionalidad por un diferente ambiente es un ejemplo de transformación a nivel funcional.Las transformacionesa nivelfuncionalvanmásallá de simples transformaciones a la estructura del código, pero no va más allá que una transformación de arquitectura. Ellos son elegidos cuando grandes unidades de funcionalidad pueden ser salvados poniéndolos dentro de un nuevo contexto.
Transformaciones a nivel de arquitectura.
Las transformaciones a nivel de arquitectura involucran cambios a los bloques básicos de la arquitectura. Estos incluyen los modelos básicos de interacción incluyendo los tipos de componentes, los conectores usados, la asignación de funcionalidad y el modelo en tiempo de ejecución de control y datos. El nivel de arquitectura es el más abstracto y lejos del alcance de las transformaciones. Las transformaciones a nivel de arquitectura son hechas cuando es necesario un cambio a la estructura principal debido a las principales modificaciones o deficiencias en los sistemas de información heredados. Las transformaciones generalmente traen mayores compromisos de tiempo y recursos, pero también trae consigo grandes beneficios.


MODELOS DE REINGENIERIA DE SOFTWARE
Modelo de Herradura
Los tres procesos básicos – análisis de un sistema existente, transformación lógica y desarrollo de un nuevo sistema –forman la base del modelo de herradura. El primer proceso sube el extremo izquierdo de la herradura, el segundo cruza la parte superior y el tercero baja por el extremo derecho de la herradura. En su más pura y completa forma, el primer proceso recupera la arquitectura por medio de la extracción de artefactos desde el código fuente. Esta estructura recuperada es analizada para determinar si esta se adapta a la arquitectura antes diseñada. La arquitectura descubierta también es evaluada con respecto a un número de calidad de atributos tales como rendimiento,modificabilidad, seguridad o confiabilidad.
El segundo proceso es la transformación de arquitectura. En estecaso, laarquitectura antes construidaes recuperada yes reingenierada para hacerla una nueva arquitectura deseable. Esta es reevaluada contra las metas de calidad del sistema y sujetas a otras restricciones organizacionales y económicas. El tercer proceso del modelo de herradura usa el "Architecture-Based Development (ABD)" Bass, (1999) para ejemplificar la arquitectura deseable. En este proceso, ya empaquetados los tópicos son decididas e interconectadas las estrategias elegidas.


Losartefactosanivel decódigodelsistema de información heredado son normalmente tapadosoreescritos para adaptarlos dentro de la nueva arquitectura.

MODELOS DE REINGENIERIA DE SOFTWARE
Modelo Cíclico
Este modelo define seis actividades que son: Análisis de inventario, Reestructuración de documentos, Ingeniería inversa, Reestructuración de código, Reestructuración de datos e Ingeniería directa. En algunas ocasiones, estas actividades se producen de forma secuencial y lineal, pero esto no siempre es así. Por ejemplo, puede ser que la ingeniería inversa (la comprensión del funcionamiento interno de un programa) tenga que producirse antes de que pueda comenzar la reestructuración de documentos.
Esto significa que cada una de las actividades presentadas como parte del paradigma pueden repetirse en otras ocasiones. Para un ciclo en particular, el proceso puede terminar después de cualquiera de estas actividades.


VER EL SIGUIENTE VIDEO

MANTENIMIENTO DEL SOFTWARE
Mantenimiento:
La reingeniería y la fase de mantenimiento del ciclo de vida de un sistema están muy relacionados. El mantenimiento se llevará a cabo una vez que la implementación del sistema software ha concluido y se ha entregado al cliente, y puede ser provocado por nuevas necesidades del usuario o bien por la detección de errores. Según ANSI-IEEE, el mantenimiento software es la modificación de un producto software, después de su entrega al cliente, para corregir defectos, para mejorarelrendimientouotraspropiedadesdeseables,opara adaptarlo a un cambio de entorno. Por lo tanto, el mantenimiento software se puede definir como el conjunto de medidas que hay que tomar para que el sistema siga trabajando correctamente.Existen 4 tipos de mantenimiento Piattini. (2000).: Correctivo, el cual tiene como objetivo localizar y eliminar los posibles defectos de los programas. Adaptativo, cuyo objetivo es modificar un programa para adaptarlo a los cambios hardware o software en el entorno en el que se ejecuta. Puede ser, desde un pequeño cambio, hasta una reescritura de todo el código, y es cada vez más habitual debido a la actualización frecuente los sistemas operativos. Perfectivo, consistente en el conjunto de actividades para mejorar o añadir nuevas funcionalidades requeridas por el cliente. Preventivo o reingeniería, que consiste en la modificación del software para mejorarlo en cuanto a la calidad y mantenibilidad, sin alterar sus especificaciones funcionales. Algunas tareas de este mantenimiento serían: incluir sentencias que comprueben la validez de los datos de entrada, reestructuración de los programas para aumentar su legibilidad o incluir nuevos comentarios, etc. Utilizará técnicas de reingeniería e ingenieríainversa.Tambiénpuedeserelmantenimientopara la reutilización especializado en mejorar la reusabilidad.

Los recursos necesarios para el mantenimiento se incrementan a medida que se genera más software, debido a la gran cantidadde software antiguo cuya creación se produjo con restricciones de tamaño y espacio de almacenamiento y con herramientas desfasadas, migraciones continuas de plataformas o SSOO, o las modificaciones, correcciones, mejorasyadaptacionesqueel software experimenta con el tiempo, debido a las nuevas necesidades de los usuarios. Además, estos cambios, generalmente se han realizado sin técnicas de reingeniería o ingeniería inversa, dando como resultado sistemas con las estructuras de datos mal diseñadas, mala codificación, lógica defectuosa y escasa documentación.
INGENIERIA INVERSA Y REESTRUCTURACION DEL SOFTWARE
Es el proceso de analizar el software con el objetivo de recuperar su diseño y especificación. Lo normal es que la entrada a este proceso sea el código fuente si se dispone de él. No hay que confundirla con la reingeniería. El objetivo de la ingeniería inversa es obtener el diseño o la especificación de un sistema a partir del código fuente, mientras que el objetivo de la reingeniería es obtener un nuevo sistema más mantenible. A menudo la ingeniería inversa es una parte de la reingeniería. Estopermite que el diseño recuperado sirva para comprender un programa antes de reorganizar su estructura. Para llevar a cabo la ingeniería inversa se sigue el proceso que aparece en la figura 3.

Reestructuración de software: consiste en la modificación del software para hacerlo más fácil de entender y cambiar o menos susceptible de incluir errores en cambios posteriores.
Reestructuración del código: El tipo más común de reingeniería es la reestructuración del código. Algunos sistemas heredados tienen una arquitectura de programa relativamente sólida, pero los módulos individuales han sido codificados de una forma que hace difícil comprenderlos, comprobarlos y mantenerlos. En estos casos, se puede reestructurar el código ubicado dentro de los módulos sospechosos.
Reestructuración de datos: Un programa que posea una estructura de datos débil será difícil de adaptar y de mejorar. De hecho, para muchas aplicaciones, la arquitectura de datos tiene más que ver con la viabilidad a largo plazo del programa que el propio código fuente.

CONCLUSIÓN



Lo presentado en este e-book permite concluir que la reingeniería de software tiene como principal función reestructurar o rediseñar aplicaciones de software viejo y funcional en operación dentro de las empresas, que con los avances de tecnologías tanto de hardware y software se vuelven obsoletas, para lo cual es necesaria su operación sobre nuevas plataformas. Además, proporciona a las organizaciones una alternativa viable para el desarrollo de aplicaciones software a partir de sus aplicaciones existentes en operación (software heredado) las cuales ya cumplieron su ciclo de vida. Así como también se proporciona una alternativa menos costosa tanto en la parte económica, tiempos de desarrolloyenresistenciaalcambioporpartedelosusuarios,yaquesusnuevasaplicaciones contarán con las funciones originales para las cuales fueron desarrolladas, más nuevas opciones, producto de sus recomendaciones.
Por otro lado, se puede decir que la reingeniería de software se desarrolla generalmente en varias fases como: traducción del código fuente, ingeniería inversa, mejora de la estructura del programa, modularización del programa y reingeniería de datos Y se pueden distinguir dos modelos comunes de reingeniería de software como son: el modelo de herradura y el modelo cíclico, ambos con ciertas características que le permiten ser aplicados a uno u otro proceso de reingeniería de software, satisfaciendo las necesidades de quien lleva a cabo el proyecto y de quien recibe el producto
Finalmente,esimportantequelasempresasantesdedecidirseaimplementarlareingeniería de software estudien y evalúen que tan viable es para ella, puesto que en ocasiones puede ser tan grave el daño del software actual que el costo se puede ver incrementado, dando como mejor opción la adquisición de uno nuevo. Aunque definitivamente la reingeniería es una opción muy atractiva, no solo por sus ventajas sino por la posibilidad que brinda de conservar los sistemas que han acompañado a las empresas por largos años.

CRÉDITOS

ELABORADA POR:
E-Book Académico
Edición 01
UNIVERSIDAD BICENTENARIA DE ARAGUA

DEYVI MAYKOL RUIZ ROMAN
Estudiante de la escuela de Ing. de sistemas.

REFERENCIAS
1.-Comunicaciones.(9demarzode2020). La reingeniería de software y su importancia para las comunicaciones. Globalbit.co. Recuperado el 26 de marzo de 2024 en: https://www.globalbit.co/2020/03/09/la-reingenieria-de-software-y-su-importancia-para-lasorganizaciones/
2.-Alvarez,J,Mateos.M.yMoreno.M.(2004). Metodología de Reingeniería del software para la remodelación de aplicaciones científicas heredadas. UniversidaddeSalamanca.Recuperadoel26 de marzo de 2024 en: chromeextension://efaidnbmnnnibpcajpcglclefindmkaj/https://gredos.usal.es/bitstream/handle/10366/21762/DP TOIA-IT-2004-003.pdf?sequence=1&isAllowed=y
3.- Vidaña, F. (2015). Reingeniería de Software aplicada a sistemas heredados. Pistas Educativas.celaya.tecnm.mex. Recuperado el 26 de marzo de 2024 en: https://pistaseducativas.celaya.tecnm.mx/index.php/pistas/article/view/296
4.-Aroní,P(2017). Propuesta de Reingeniería del software orientada a objetos para mejorar la calidad del sistema informático en la empresa de joyas DESIGNS QUALITY EXPORTS S.A.C., 2016 Recuperado el 26 de marzo de 2024 en: https://alicia.concytec.gob.pe/vufind/Record/UWIE_6d86e87d1f569f14b63df8441eaecaa3
5.-Rivas,C.(2015). Metodologías actuales de desarrollo de software. Revistatecnologíae innovación. Recuperado el 26 de marzo de 2024 en: chromeextension://efaidnbmnnnibpcajpcglclefindmkaj/https://www.ecorfan.org/bolivia/researchjournals/Tecnol ogia_e_innovacion/vol2num5/Tecnologia_e_Innovacion_Vol2_Num5_6.pdf
6.-Juan.A.(2019). Reingeniería del software. juanantoniomb.wordpress.com.Recuperadoel26de marzode2024en:https://juanantoniomb.wordpress.com/reingenieria-del-software-2/
7.-Avella,C.(2005). Reingeniería de software aplicada a un sistema de información Universidad de los Andes. Recuperado el 26 de marzo de 2024 en: chromeextension://efaidnbmnnnibpcajpcglclefindmkaj/https://repositorio.uniandes.edu.co/server/api/core/bitstr eams/ffbebee5-980b-430a-9e01-20460979c65a/content
8.-Gonzalez,D.(2010). Reingeniería o sustitución: etapa en la metodología de sistemas. UTNRegional Buenos Aires. Recuperado el 26 de marzo de 2024 en: Chrome extension://efaidnbmnnnibpcajpcglclefindmkaj/https://epetushuaia.files.wordpress.com/2011/06/reingen ieria-de-soft.pdf
9.-Monografías. Reingeniería del software. Monografias.com.Recuperadoel26demarzode2024 en:https://www.monografias.com/trabajos105/reingenieria-del-software/reingenieria-del-software
10.-Anónimo.(2020-2021). Modelos de reingeniería de software. Studocu.com.Recuperadoel26de marzo de 2024 en: https://www.studocu.com/pe/document/universidad-politecnica-desinaloa/informatica/modelos-de-reingenieria-de-software/25857641
11.-Estigarribia,R.(2023). Reingeniería de Software. Medium.com.Recuperadoel26demarzode 2024en:https://medium.com/@ramiroec/reingenier%C3%ADa-de-software-41fa705276ac