REINGENIERÍA DEL SOFTWARE

04. Introducción
05. Procesos y Principios de reingeniería
06. Diseño y Arquitectura
07. Modelos
08. Mantenimiento del software
09. Ingeniería Inversa
10. Reestructuración del software
11. Conclusión
12. Referencias Bibliográficas
La reingeniería del software viene siendo proceso crucial en el ámbito de la ingeniería de software el cual va enfocado a la transformación y revitalización de sistemas existentes. Dicho enfoque no se limita solamente a la corrección de errores o mejoras incrementales/optimizaciones del mismo, sino que busca reformular radicalmente dicho software con la finalidad de mejorar su estructura, funcionalidad o rendimiento, utilizando en el proceso métodos sistemáticos y técnicas avanzadas para ello. Se trata de una disciplina que involucra análisis profundo, diseño meticuloso y una ejecución cuidadosa para optimizar el valor del software y adaptarlo así a nuevas necesidades o tecnologías emergentes.
La Reingeniería del software viene siendo la modificación de un producto de software o de diversos componentes del mismo mediante un análisis al sistema llevando a cabo técnicas de ingeniería inversa y en la etapa de reconstrucción se utilizan herramientas de ingeniería directa para que los cambios sean óptimos en la mayoría de sentidos.
En la reingeniería del software existen diversos procesos y principios de gran importancia a tener en cuenta durante la realización de esta, los cuales deberían tener por objetivo la optimización y correcta revisión del sistema con el que se trabaja, estos vendrían siendo:
Proceso de negocios: Se trata de un conjunto de tareas que se encuentran relacionadas de forma lógica y se realizan con la finalidad de obtener un resultado determinado en el negocio
Evaluación de procesos: Los procesos existentes son medidos y analizados de forma meticulosa, de modo que todos aquellos que se lleven a cabo son identificados y registrados correctamente, así como los costes y el tiempo que consumen llevarlos a cabo. Gracias a esto es posible crear casos prácticos que darán resultados al cliente con los cuales se puede trabajar a partir de estos.
Refinamiento e instanciación: Teniendo en cuenta la retroalimentación que el cliente brinda visto el prototipo del sistema, se refina el proceso de negocio y con ello se instancia en el sistema del mismo, de modo que se acabe teniendo un modelo funcional del flujo de trabajo existente.
La arquitectura refiriendose al software viene siendo la planificación del mismo basandose en modelos, patrones y abstracciones teóricas al momento de elaborar una pieza de software compleja, sirviendo así como guia de las piezas del producto/sistema.
Tiempo de desarrollo
Número de usuarios
Nivel de aislamiento
Patrón Cliente-Servidor: Usado principalmente en diseño de webs y servicios online, se basa en la existencia de un servidor y una serie de clientes los cuales piden servicio al servidor y reciben una respuesta de este.
Patrón de Capas: La estructura del programa es subdividida en capas que representan una subtarea cada una, cada capa está diseñada para proporcionar un servicio a la siguiente capa de mayor nivel
Patrón Master Slave: Se divide en dos grupos, maestro y esclavos, estos ultimos realizan la tarea que el maestro ordena, obtienen el resultado y lo envian al maestro para presentarlos y almacenarlos
Patrón Modelo-Vista-Controlador (MVC): Divide una aplicación en tres partes, el modelo que contiene la funcionalidad y los datos, la vista que muestra la información al usuario y el controlador que maneja la entrada del usuario.
Patrón Broker: Es utilizado para estructurar sistemas cuyos componentes están desacoplados, dichos componentes pueden interactuar entre sí mediante servicios remotos los cuales publicitan sus capacidades, y el componente broker comunica los componentes entre sí
Llamado en inglés Options Analysis For Reingeneering, se trata de un método sistematico de arquitectura central que identifica componentes de la arquitectura y analiza los cambios requeridos para usarlos en la creación de un nuevo software.
Tiene como base tres procesos básicos: análisis del sistema, transformación lógica y desarrollo de un nuevo sistema. El primer proceso retoma la arquitectura mediante la extracción de código fuente, el segundo proceso transforma la arquitectura del sistema y en el tercero se juntan las estrategias seleccionadas mediante Architecture-Based Development (ABD)
Este posee cuatro puntos fundamentales que definen el funcionamiento de la misma:
Análisis de inventario: Contiene información detallada que brinda una descripción acorde de las aplicaciones activas con las que se está trabajando
Reestructuración de código: Algunos sistemas heredados poseen una arquitectura de programa sólida, pero los módulos individuales han sido codificados de una forma dificil de comprender, por lo que se vuelve necesario reestructurar el código de los módulos sospechosos.
Reestructuración de datos: Esta viene a ser una actividad de reingeniería a gran escala, la arquitectura de datos es analizada de forma minuciosa y los modelos de datos que sean necesarios acaban siendo definidos
Ingeniería directa: Existen herramientas que proporcionan un subconjunto limitado de capacidades que además se enfrentan con dominios de aplicaciones específicas
Se trata del proceso en el que el software es actualizado o modificado para satisfacer las necesidades del cliente y se lleva a cabo una vez que el producto o software en cuestión es lanzado con la finalidad de poder corregir errores o mejorar el rendimiento del mismo. Esta es una parte fundamental del ciclo del desarrollo de software
Se necesitan de bastantes recursos y factores de lanzar un producto o software al mercado, desde la construcción y codificación del mismo, hasta modelos de licencias y marketing para que sea exitoso, además de poder adaptarse con el tiempo al mercado actual De manera que el mismo debe ser monitoreado de forma constante e ir recibiendo actualizaciones para no quedarse atrás con respecto a los demás.
Mantenimiento correctivo de software: Forma clásica y típica del mantenimiento, es necesario principalmente para cuando se da un error o falla en alguna de las piezas del software utilizadas para que el funcionamiento del software se vea afectado en lo mínimo
Mantenimiento preventivo de software: Este busca que el software se mantenga funcionando como es deseado por el mayor tiempo posible mediante actualizaciones, cambios y adaptaciones de ser necesarios
Mantenimiento perfectivo de software: Tiene por objetivo agregar nuevas funciones al software de ser necesario y eliminar aquellas que ya no sean requeridas o utilizadas, manteniendo así relevante al software con el que se trabaja.
Mantenimiento adaptable de software: Se relaciona con las tecnologías cambiantes y la política y reglas del software a trabajar, estos cambios incluyen el sistema operativo, el hardware, el almacenamiento en la nube, entre otros
Es la que define la reconstrucción de un producto ya existente desmontandolo para entender la configuración, estructura y funcionamiento del mismo
Tiene entonces por objetivo reconstruir el código de un programa existente.
Algo a tener en cuenta
Permite a los programadores invertir los procesos de desarrollo y producción de forma tal que es posible estudiar el código fuente del software
Reconstruir el código fuente de un software
Entender las reglas de un protocolo de comunicación
Crear el modelo de un software con posterioridad
Control de calidad de las funciones del software
Perfeccionamiento del software propio.
Análisis de protocolos de comunicación de red.
Detección de virus, troyanos, software de extorsión y otros programas maliciosos.
Búsqueda de fallos de software
Mejora de las compatibilidades de software con plataformas y software de terceros
Modifica el código fuente y/o los datos con la finalidad de adaptarlos a futuros cambios, centrándose usualmente en detalles de diseño de los módulos individuales y en estructuras de datos locales definidas dentro de los modulos
Beneficios
Reducción de esfuerzo requerido.
Software sencillo de comprobar
Reestructuración del código: Se lleva a cabo para conseguir un diseño capaz de producir la misma función pero con una calidad mayor que la que podía producir el original, El objetivo es tomar el código anterior y acomodarle de una forma estructurada y optima.
Reestructuración de datos: En este caso se evaluaran todas las sentencias del lenguaje de programación con definiciones de datos, descripciones de archivos, etc. Luego del análisis de datos se lleva a cabo una estandarización de rediseño de los datos para clarificar las definiciones de los mismos
La reingeniería del software entonces representa una estrategia esencial que sirve para mantener la relevancia y eficiencia de los sistemas con los que se trabaja en un entorno tecnológico dinámico. De modo que al mejorar, optimizar y transformar sistemas existentes, no solo se mejora su rendimiento y funcionalidad, sino que también es posible prolongar su vida útil y se optimiza así su adaptación a nuevos requerimientos y tecnologías actuales. Dicho proceso, aunque venga siendo uno bastante complejo y exigente, ofrece beneficios significativos ya que permite a las organizaciones maximizar el valor de sus inversiones en software y mantener su competitividad en el mercado actual.
Inesdi (2023) Reingeniería: concepto y etapas. Recuperado 11 de junio de 2024. https://www.inesdi.com/blog/reingenie ria-concepto-y-etapas/ Juan A. (2024) Reingeniería del Software. Recuperado 11 de junio de 2024. https://juanantoniomb.wordpress.com/ reingenieria-del-software-2/ Pablo H. (2022) Arquitectura de software: Qué es y qué tipos existen. Recuperado 11 de junio de 2024. https://openwebinars.net/blog/arquitec tura-de-software-que-es-y-que-tiposexisten/
Anónimo (2021) Modelos de Reingeniería del software. Recuperado 11 de junio de 2024. https://www.studocu.com/esmx/document/universidad-politecnicade-sinaloa/informatica/modelos-dereingenieria-de-software/25857641
Verónica M (2022) Técnicas de Mantenimiento de Software. Recuperado 11 de junio de 2024. https://archive.org/details/cnx-orgcol10571/page/n51/mode/2up Thales (2024) Los 4 tipos de mantenimiento de software. Recuperado 11 de junio de 2024. https://cpl.thalesgroup.com/es/softwar e-monetization/four-types-ofsoftwaremaintenance#:~:text=El%20mantenimie nto%20del%20software%20se,vida%20 del%20desarrollo%20de%20software IONOS (2020) La ingeniería inversa de software. Recuperado 11 de junio de 2024. https://www.ionos.es/digitalguide/pagi nas-web/desarrollo-web/ingenieriainversa-de-software/