E-Book - Reingenia Plus - Diego Pellicer

Page 1

Reingenia Plus

Herramientas útiles para Abordar Problemas de Diseño de Software

Autor: Diego Pellicer

2024 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Reingenia Plus . . .Herramientas útiles para Abordar Problemas de Diseño de Software

Grupo Editorial EcoSmart

Derechos reservados (2023) Cagua, Edo. Aragua – Venezuela Somos experimentados en la recolección, interpretación, diseño, diagramación y análisis de fuentes de información de forma creativa.

• A todos los entusiastas del diseño de software, inteligencia artificial y las tecnologías emergentes.

• A los que quieren innovar tecnológicamente tomando en cuenta la calidad de los servicios y afectación social.

• A cualquier lector con ganas de aprender.

Dedicatoria Agradecimientos

• A Dios por el don de la vida, el entendimiento, sabiduría, las oportunidades y la familia que me otorgó.

• A mi madre, por su acompañamiento y siempre escucha activa de mis ideas y experiencias.

• A mi padre, por apoyarme con sus consejos y siempre ayudarme en lo que pueda en mis asuntos de la universidad.

• A mi hermana, por siempre ser inspiración creativa para mi, ayudarme en la revisión de trabajos y darme opiniones.

• A mis profesores y amigos de la universidad, que hacen mi camino de estudio mas ameno y único.

Acerca del autor

• Joven de 24 años de edad.

• Estudiante de Ingeniería de sistemas de la UBA.

• Experiencia avanzada en la enseñanza del idioma inglés.

• Entusiasta de la tecnología, la naturaleza, la ciencia y la innovación.

“ El diseño es el lienzo, la tecnología, el pincel ”

. . . . . . . . . . . . . . . . . . . .
Editorial

Sección de contexto Publicitario

E-Book: Reingenia Plus . . .

Herramientas útiles para Abordar

Problemas de Diseño de Software

. . . . . . . . . . . . . . . . . . . .

Preámbulo/ introducción

7

10 Ingeniería Inversa y Restructuración del software

11 Mantenimiento del software y tipos Expandiendo

Concepto de Reingenieria Tecnologías Modernas usadas 5

Principios de reingeniería Modelos en la Ing. del Software

14

12

13

Sumario de contenido
6 8 9
4
Horizontes Enfoques teóricos de la Inteligencia Artificial en la actualidad Sumario

Expandiendo

Introducción / Preámbulo

En la actualidad, la reingeniería de software es el proceso de analizar y modificar un sistema de software existente para recrearlo de una manera nueva (generalmente usando otra arquitectura). Para comprender adecuadamente la reingeniería y sus principios, es necesario analizar varios aspectos clave del desarrollo de software, como el diseño y la arquitectura, los modelos de desarrollo, el mantenimiento del software, la ingeniería inversa y la reestructuración del software. Los principios clave incluyen comprender completamente el sistema existente, identificar sus fortalezas y debilidades y luego rediseñarlo para mejorar su mantenibilidad, rendimiento, modularidad y escalabilidad. El diseño y la arquitectura del software son la base de la reingeniería; estos incluyen tomar decisiones sobre la estructura general del sistema, sus componentes, interfaces y patrones de diseño. Una buena arquitectura facilita el mantenimiento y el desarrollo futuro del software.

La reingeniería del software utiliza diferentes modelos para representar el sistema existente y el sistema rediseñado. Estos modelos pueden ser diagramas UML, modelos arquitectónicos, modelos de casos de uso, incluso alguna metodología de desarrollo. Los modelos ayudan a comprender, documentar y comunicar el diseño del sistema. El mantenimiento del software es una parte importante del ciclo de vida del software. Esto incluye cambios, correcciones de errores, actualizaciones y mejoras de los sistemas de software existentes.

También, la ingeniería inversa es el proceso de analizar un sistema de software existente para identificar sus componentes, arquitectura, diseño y principios de funcionamiento. Es un paso fundamental en la reingeniería, ya que permite comprender el sistema antes de reestructurarlo. Además, la restructuración del software, es el proceso de transformar la estructura interna de un sistema de software existente, preservando su comportamiento externo. Esto puede implicar cambios en la arquitectura, el diseño, la modularidad o la optimización del código, con el objetivo de mejorar la calidad, la mantenibilidad y la comprensibilidad del software. Cabe destacar que, estos temas están estrechamente relacionados y son esenciales en el campo de la reingeniería de software, cuyo objetivo es modernizar y mejorar los sistemas existentes para alargar su vida útil y adaptarlos a nuevos requisitos y tecnologías. Así, se irán desglosando estos temas a lo largo del libro para una mejor compresión.

Introducción
Horizontes Enfoques teóricos de la Inteligencia Artificial en la actualidad
4

Expandiendo Horizontes Enfoques teóricos de la Inteligencia Artificial en la actualidad Concepto de Reingeniería del Software y Tecnologías Modernas usadas

Concepto de Reingeniería del Software

La reingeniería del software es el proceso de analizar y modificar un sistema de software existente para reconstruirlo de una manera nueva, a menudo con una nueva arquitectura y diseño, con el objetivo de mejorar su mantenibilidad, rendimiento, modularidad y escalabilidad. Esto implica comprender completamente el sistema actual, identificar sus fortalezas y debilidades, y luego rediseñarlo y reimplementarlo utilizando tecnologías y enfoques más modernos.

Tecnologías Modernas usadas

Arquitecturas de software modernas:

• Arquitecturas de microservicios

• Arquitecturas basadas en eventos

• Arquitecturas sin servidor (Serverless)

Frameworks y librerías:

• Frameworks web modernos (React, Angular, Vue.js)

• Frameworks de back-end (Spring, .NET Core, Django, Flask, Express.js)

• Librerías de programación reactiva (RxJava, Reactor, Akka)

Infraestructura en la nube:

• Servicios en la nube (AWS, Azure, Google Cloud)

• Infraestructura como código (Terraform, CloudFormation)

Prácticas de desarrollo:

• Integración y entrega continuas (CI/CD)

• DevOps

• Metodologías ágiles

Lenguajes de programación modernos:

• Java (versiones recientes)

• C# (.NET Core)

• Python

• Rust

• Kotlin

• Swift

Bases de datos y almacenamiento:

• Bases de datos NoSQL (MongoDB, Cassandra, Couchbase)

• Bases de datos en memoria (Redis, Memcached)

• Servicios de almacenamiento en la nube (Amazon S3, Azure Blob Storage)

Contenedores y orquestación:

• Docker

• Kubernetes

• Apache Mesos

Inteligencia Artificial y Aprendizaje Automático:

• Procesamiento de lenguaje natural

• Visión por computadora

• Algoritmos de aprendizaje automático

5

1

Expandiendo Horizontes Enfoques teóricos de la Inteligencia Artificial en la actualidad Proceso de Reingeniería

Proceso de Reingeniería

2

Generalmente sigue los siguientes pasos:

Ingeniería inversa: El primer paso es analizar y comprender el sistema existente a través de técnicas de ingeniería inversa, como el análisis del código fuente, la documentación y la observación del comportamiento del sistema.

Recuperación de la arquitectura: A partir del análisis del sistema existente, se recupera su arquitectura y se identifican sus componentes, interfaces y patrones de diseño.

3

4

Evaluación y planificación: Se evalúa la calidad del sistema existente, se identifican los problemas y las oportunidades de mejora, y se planifica el proceso de reingeniería.

Restructuración y transformación: Se lleva a cabo la reestructuración del sistema, lo que puede implicar cambios en la arquitectura, el diseño, la modularidad y la optimización del código.

5

6

Pruebas y validación: Se realizan pruebas exhaustivas para asegurar que el sistema reestructurado funcione correctamente y cumpla con los requisitos esperados.

Implementación y mantenimiento: Finalmente, se implementa el sistema reestructurado y se establecen procesos para su mantenimiento continuo.

6

Expandiendo Horizontes Enfoques teóricos de la Inteligencia Artificial en la actualidad Principios de reingeniería

Principios de reingeniería

De acuerdo con Booch (1994) "Los principios de reingeniería, como la simplificación, la reutilización y la automatización, son fundamentales para mejorar la calidad y la eficiencia de los sistemas de software existentes" .

Comprender el sistema existente: Es crucial comprender completamente el sistema actual antes de intentar modificarlo.

Minimizar el riesgo: La reingeniería debe llevarse a cabo de manera controlada y gradual para minimizar los riesgos y el impacto en el sistema en funcionamiento.

Preservar el comportamiento externo: La reingeniería debe preservar el comportamiento externo del sistema, es decir, cómo interactúa con los usuarios y otros sistemas.

Mejorar la arquitectura y el diseño: El objetivo principal es mejorar la arquitectura y el diseño del sistema para facilitar su mantenimiento, escalabilidad y evolución futura.

Aprovechar tecnologías modernas: La reingeniería puede implicar la adopción de nuevas tecnologías, lenguajes de programación y frameworks más modernos y eficientes.

Separación de preocupaciones: Durante la reingeniería, se busca separar las diferentes preocupaciones (lógica de negocio, interfaz de usuario, acceso a datos, etc.) en componentes y capas bien definidos.

Documentación y pruebas: Es esencial documentar adecuadamente el proceso de reingeniería y realizar pruebas exhaustivas para garantizar la calidad del sistema resultante.

7

Expandiendo Horizontes Enfoques teóricos de la Inteligencia Artificial en la actualidad Diseño y arquitectura en la Ing. del Software

Diseño en la Ing. del Software

Se refiere al proceso de definir la estructura y el comportamiento del sistema de software para satisfacer los requisitos funcionales y no funcionales. Implica tomar decisiones sobre cómo se implementará el sistema, incluyendo la descomposición del sistema en módulos o componentes más pequeños, la especificación de las interfaces entre estos componentes y la definición de algoritmos y estructuras de datos.

Principios de Diseño de Software

• Cohesión y Acoplamiento: Los módulos deben ser cohesivos (centrados en una sola responsabilidad) y tener bajo acoplamiento (dependencias mínimas entre módulos).

• Abstracción: Ocultar los detalles innecesarios y exponer solo la información relevante para los usuarios o componentes.

• Encapsulamiento: Ocultar el estado interno de un objeto y exponer solo métodos para interactuar con él.

• Reutilización: Utilizar componentes y patrones de diseño existentes en lugar de reinventar la rueda.

Arquitectura en la Ing. del Software

Se centra en la estructura de alto nivel del sistema de software y en cómo sus componentes interactúan entre sí. Define la distribución de responsabilidades entre los diferentes componentes del sistema y proporciona una visión global de la solución.

Elementos

• Componentes: Los elementos del sistema de software, como módulos, clases o servicios.

• Conectores: Las formas en que los componentes se comunican entre sí, como llamadas a funciones, eventos o mensajes.

• Restricciones: Reglas o directrices impuestas en la arquitectura, como políticas de seguridad, restricciones de rendimiento o limitaciones tecnológicas.

Tipos

• Arquitectura Monolítica: Todos los componentes se integran en un único programa.

• Arquitectura de Microservicios: Los sistemas se dividen en servicios independientes que se pueden implementar y escalar de forma independiente.

• Arquitectura basada en eventos: Los componentes reaccionan a eventos generados por otros componentes.

8

Expandiendo Horizontes Enfoques teóricos de la Inteligencia Artificial en la actualidad Modelos en la Ing. del Software

Modelos en la Ing. del Software

Sommerville (2005) lo define como “Una representación simplificada de un proceso de software, desde una perspectiva específica”. Son enfoques sistemáticos para gestionar y desarrollar software. Cada modelo sigue un conjunto específico de pasos, procesos y prácticas que guían el ciclo de vida del desarrollo de software.

En Cascada

• Este modelo sigue un enfoque lineal y secuencial para el desarrollo de software

• Los pasos típicos incluyen análisis, diseño, implementación, pruebas, integración y mantenimiento, realizados en secuencia.

• Cada fase se lleva a cabo después de que la anterior esté completa y no hay retroceso.

• Es adecuado para proyectos donde los requisitos son claros y estables desde el principio.

Desarrollo Rápido de aplicaciones (RAD)

• RAD se centra en el desarrollo rápido y la entrega de prototipos funcionales.

• Se basa en la colaboración estrecha entre los desarrolladores y los usuarios finales.

• Utiliza técnicas como la reutilización de componentes, la generación automática de código y el desarrollo iterativo.

• Es adecuado para proyectos con plazos ajustados o donde la velocidad de entrega es prioritaria.

En Espiral

• El modelo combina elementos del modelo en cascada con iteraciones de prototipado.

• Se divide en ciclos donde cada uno incluye actividades de planificación, evaluación de riesgos, desarrollo y revisión.

• Cada ciclo avanza a través de las mismas fases del modelo en cascada, pero con un mayor nivel de detalle y refinamiento.

• Es útil para proyectos grandes y complejos donde los requisitos pueden cambiar o no están completamente definidos.

Desarrollo Orientado a Objetos (OOD)

• Se centra en el uso de la programación orientada a objetos para diseñar y construir sistemas de software.

• Se basa en conceptos como la encapsulación, la herencia y el polimorfismo para organizar y estructurar el código.

• Utiliza diagramas de clases, diagramas de secuencia y otros diagramas UML para modelar el sistema.

• Es adecuado para proyectos donde los requisitos son complejos y pueden beneficiarse de la modularidad y la reutilización.

• El desarrollo se divide en pequeñas entregas o incrementos funcionales.

• Los requisitos se dividen en conjuntos más pequeños y se implementan gradualmente en iteraciones

• Cada incremento agrega funcionalidad adicional al sistema.

• En proyectos donde los requisitos no son 100% conocidos desde el principio

9

Expandiendo Horizontes Enfoques teóricos de la Inteligencia Artificial en la actualidad Ingeniería Inversa y Restructuración del software

Ingeniería Inversa

De acuerdo con Sommerville (1996), "La ingeniería inversa es el proceso de analizar un producto existente para entender su diseño y funcionamiento interno. Es un componente esencial de la reingeniería de software". Por ello, implica desmontar, examinar y comprender la estructura de un producto.

Proceso

1) Adquisición de Datos: Se adquiere el producto o sistema que se va a analizar Implica la obtención de una copia del software, la compra de un producto físico o la adquisición de datos mediante pruebas o mediciones.

2)Análisis y Desmontaje: Una vez adquirido, se procede a desmontarlo y analizar sus componentes. Incluye el uso de herramientas de ingeniería inversa como descompiladores de software, desensambladores de hardware y técnicas de escaneo tridimensional.

3) Comprensión de la Funcionalidad: Durante el análisis, se estudia cómo funciona el producto o sistema y se identifican sus componentes clave, interfaces y relaciones. Incluye el estudio de diagramas de flujo, diagramas de clase, de secuencia, entre otros.

4)Reconstrucción del Diseño: Con base en la información recopilada, se intenta reconstruir o documentar el diseño original del producto o sistema. Incluye la creación de diagramas de diseño, modelos estructurales y especificaciones funcionales.

5)Modificación o Mejora: A menudo, se mejora un producto existente. Esto puede implicar corregir errores, agregar nuevas características o adaptar el producto para usos específicos

Restructuración del software

Es el proceso de cambiar la estructura interna de un sistema de software sin cambiar su comportamiento externo. Según Boehm (1976), “Es crucial para mejorar la mantenibilidad y la escalabilidad del software”. Su propósito es mejorar la calidad.

Objetivos

• Mejora de la Mantenibilidad: Simplificar el código.

• Optimización del Rendimiento: Identificar y corregir redundancias.

• Mejora de la Escalabilidad: Rediseño del software.

• Adopción de Nuevas Tecnologías.

• Reducción de la Complejidad: Simplificar la arquitectura.

Métodos

• Refactorización: Proceso de modificar el código existente sin cambiar su comportamiento externo. Implicar cambiar la estructura interna del código, renombrar variables, o dividir métodos grandes en más pequeños.

• Reingeniería: Implica modificar el software a un nivel más alto, como cambiar la arquitectura del sistema, reescribir partes críticas del código o migrar a una plataforma diferente.

• Modernización: Consiste en actualizar un sistema de software antiguo para que pueda funcionar en entornos modernos, como la nube o móviles.

• Consolidación de Funcionalidades: Agrupar funcionalidades relacionadas en módulos reusables.

• Descomposición: Dividir el software en módulos más pequeños y autónomos.

10

Expandiendo Horizontes Enfoques teóricos de la Inteligencia Artificial en la actualidad Mantenimiento del Software y tipos

Mantenimiento del Software

Es una fase crítica en el ciclo de vida del desarrollo de software que se encarga de gestionar y mejorar los sistemas de software ya implementados. Este proceso es esencial para garantizar que los sistemas continúen funcionando de manera eficiente y efectiva a lo largo del tiempo.

Se refiere a las actividades realizadas después de que un sistema de software finales. Estas actividades tienen como objetivo corregir errores, adaptar el requisitos, mejorar el rendimiento y la eficiencia, así como agregar nuevas carac

Tipos de Mantenimiento

Correctivo: Se centra en corregir errores o defectos identificados en el software después de su implementación. El objetivo es restaurar la funcionalidad perdida y garantizar que el sistema funcione correctamente.

Adaptativo: Implica realizar modificaciones en el software para adaptarse a cambios en el entorno operativo, como actualizaciones de hardware, sistemas operativos o requisitos externos. El objetivo es garantizar que el software siga siendo compatible y funcional en un entorno cambiante.

Preventivo: Tiene como objetivo evitar problemas futuros identificando y eliminando posibles fuentes de errores y problemas de rendimiento. Esto puede incluir la revisión de código, la realización de pruebas de rendimiento y la aplicación de actualizaciones de seguridad.

Perfectivo: Se enfoca en mejorar el rendimiento, la eficiencia y la usabilidad del software existente. Esto puede incluir optimizaciones de código, mejoras en la interfaz de usuario y la experiencia del usuario, así como la eliminación de características obsoletas o innecesarias.

11

Expandiendo Horizontes Enfoques teóricos de la Inteligencia Artificial en la actualidad Proceso de Mantenimiento del Software e importancia

Proceso de Mantenimiento del Software

Identificación del Problema: Identificar y registrar los problemas o cambios que deben abordarse.

ha sido entregado a los usuarios software a los cambios en los terísticas y funcionalidades.

Análisis del Problema: Sobre el impacto y los requisitos de los cambios propuestos.

Implementación del Cambio: Realizar las modificaciones necesarias en el software.

Pruebas: Verificar que los cambios funcionen según lo esperado y no introduzcan nuevos errores.

Documentación: Actualizar la documentación del software para reflejar los cambios realizados.

Implementación: Desplegar los cambios en el entorno de producción.

Importancia del Mantenimiento

Mejora la confiabilidad y la calidad del software. Asegura que el software sea compatible con los cambios en el entorno operativo. Permite a los sistemas de software evolucionar para satisfacer las necesidades cambiantes de los usuarios. Maximiza el retorno de la inversión (ROI) al prolongar la vida útil del software existente.

12

Conclusiones

La reingeniería de software es un proceso fundamental que busca mejorar la calidad, la eficiencia y la mantenibilidad de los sistemas existentes. Además, es un proceso integral que implica la revisión, análisis y mejora de sistemas existentes para adaptarlos a nuevas necesidades, mejorar su rendimiento o actualizar su tecnología. Hay que destacar que el diseño y la arquitectura del software son elementos fundamentales en el proceso de reingeniería, ya que proporcionan la base estructural del sistema; por un lado la arquitectura establece los fundamentos y los principios generales que guían el diseño detallado del sistema, y por otro el diseño de software se basa en la arquitectura para definir la estructura de los componentes y su interacción.

Durante la reingeniería, es crucial evaluar y, si es necesario, mejorar el diseño y la arquitectura existentes para garantizar la escalabilidad, la flexibilidad y la mantenibilidad del sistema. Ahora bien, en cuanto a los modelos de desarrollo de software, se tiene al modelo en cascada, el modelo en espiral y el desarrollo ágil, que proporcionan marcos estructurados para guiar el proceso de reingeniería. La selección del modelo adecuado depende de factores como la naturaleza del proyecto, los requisitos del cliente y las capacidades del equipo de desarrollo.

Aunado a esto, el mantenimiento del software es un componente esencial de la reingeniería, ya que implica realizar modificaciones en el software existente para mejorar su calidad, rendimiento y adaptabilidad. Los diferentes tipos de mantenimiento, como el correctivo, adaptativo y preventivo, se pueden aplicar durante el proceso de reingeniería para abordar diferentes aspectos del sistema.

Concretamente, la ingeniería inversa es esencial en la reingeniería para comprender la estructura y funcionamiento de sistemas sin acceso a su diseño original. Esta información se utiliza para identificar áreas de mejora y optimización durante el proceso de reingeniería. La reestructuración del software implica modificar la estructura interna para mejorarla, siendo necesaria durante la reingeniería para abordar deficiencias en el diseño y la arquitectura existentes. . Sintetizando, se puede decir que todos estos principios de reingeniería son fundamentales y útiles a la hora de enfrentar desafíos de diseño y mejora de sistemas software.

Expandiendo Horizontes Enfoques teóricos de la Inteligencia Artificial en la actualidad Conclusiones
13

Referencias

Adones, J., y Vega-Zepeda, V. (2020). Mantenibilidad del Software. Consideraciones para su especificación y validación Ingeniare: Revista chilena de ingeniería, vol 28, num 4, pp 654-667 Disponible en: https://www scielo cl/scielo php?script=sci_arttext&pid=S071833052020000400654. Consultado: 28/03/2024.

Belisario, J (2023) Arquitectura de software con programación orientada a objeto. Polo del Conocimiento, vol. 8, num. 12, ed. 85. Disponible en: https://dialnet.unirioja.es/descarga/articulo/9257807.pdf. Consultado: 28/03/2024.

Bustos, C. (2005). La Reingeniería: Herramienta controversial. Visión Gerencial, núm. 1, ed. enero-junio, pp. 3-10. Disponible en: https://www.redalyc.org/pdf/4655/465545872004.pdf. Consultado: 28/03/2024.

De la Morena, V. (2022). Técnicas de Mantenimiento de Software. Disponible en: https://archive.org/details/cnx-org-col10571/mode/2up. Consultado: 28/03/2024.

Delgado, L., y Díaz, L. (2021). Modelos de Desarrollo de Software. Revista Cubana de Ciencias Informáticas, vol. 15, num. 1, pp. 37-51. Disponible en: http://scielo sld cu/scielo php?script=sci_arttext&pid=S2227-18992021000100037 Consultado: 28/03/2024

Huet, P (2022) Arquitectura de software: Qué es y qué tipos existen. Disponible en:

https://openwebinars net/blog/arquitectura-de-software-que-es-y-que-tiposexisten/ Consultado: 28/03/2024

Imagar (2022) ¿Qué Es La Reingeniería De Software Y Cómo La Llevamos A Cabo?. Disponible en: https://www imagar com/blog-desarrollo-web/que-es-lareingenieria-de-software/. Consultado: 28/03/2024.

Motwani, J , y Otero, L (2001) La reingeniería en la empresa y la tecnología informática como uno de sus elementos fundamentales. Forum Empresarial, vol. 6 num. 1, pp. 70-91. Disponible en: https://www.redalyc.org/pdf/631/63160104.pdf. Consultado: 28/03/2024.

Pressman, R. (1993). Ingeniería de Software Un enfoque práctico. Editorial Mc Graw Hill.

Sharma, P. (2022). Los 9 mejores modelos de desarrollo de software para elegir: fases y aplicaciones. Disponible en: https://cynoteck.com/es/blog-post/topsoftware-development-models-to-choose-from/ Consultado: 28/03/2024

Sommerville, I. (2005). Ingeniería del software. 9na edición. Pearson Educación. Disponible en: https://shorturl at/bdvK5 Consultado: 28/03/2024

Thales. (s.f.). ¿Qué es el mantenimiento de software?. Disponible en: https://shorturl at/koS38 Consultado: 28/03/2024

14
Expandiendo Horizontes Enfoques teóricos de la Inteligencia Artificial en la actualidad Referencias

Autor: Diego Pellicer

“La tecnología hace posible lo que antes era imposible. El diseño hace que sea real”
Michael Gagliano

Reingenia Plus . . . Herramientas útiles para Abordar Problemas de Diseño de Software Grupo Editorial Ecosmart

Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.
E-Book - Reingenia Plus - Diego Pellicer by Diego Pellicer - Issuu