Está en la página 1de 19

1

Diseño Arquitectónico en la Ingeniería del Software

Santiago Lopez Rodriguez


Alex Jovan Ceballos Bedoya

Anteproyecto presentado para optar al título de Tecnólogo en Gestión de Sistemas

Tutor
Julián Andres Ruiz Jaramillo, Profesión

Fundación Universitaria Comfamiliar


Facultad de Ingeniería
Técnico Profesional en Sistemas de Computo
Pereira, Risaralda, Colombia
2023
2

Tabla de contenido

Resumen ........................................................................................................................................... 3

Abstract ............................................................................................................................................ 4

Introducción ..................................................................................................................................... 5

Justificación ...................................................................................................................................... 7

Objetivos .......................................................................................................................................... 9

6.1 Objetivo general ..................................................................................................................... 9

6.2 Objetivos específicos .............................................................................................................. 9

Importancia de la arquitectura de software ................................................................................ 10

Patrones de arquitectura de software .......................................................................................... 11

Patrón Cliente-Servidor .............................................................................................................. 11

Patrón de Capas .......................................................................................................................... 12

Patrón Maestro-Esclavo ............................................................................................................. 13

Patrón Modelo-Vista-Controlador (MVC) ................................................................................. 14

Patrón Broker ............................................................................................................................. 15

Patrones de Diseño ..................................................................................................................... 16

PATRONES DE CREACION ................................................................................................ 16

PATRÓNES ESTRUCTURALES.......................................................................................... 16

PATRÓNES DE COMPORTAMIENTO ............................................................................... 17

MODELADO ARQUITECTONICO ..................................................................................... 17

Conclusiones .................................................................................................................................. 18

Bibliografía..................................................................................................................................... 19
3

Resumen

En este documento abordamos la importancia crítica de la arquitectura de software en el


desarrollo de sistemas informáticos. Explora cómo la arquitectura influye en aspectos como el
costo, el tiempo de desarrollo y la calidad del producto, brindando una base sólida para la toma de
decisiones informadas en la ingeniería de software. El documento presenta cuatro patrones
arquitectónicos clave (Cliente-Servidor, Capas, Maestro-Esclavo y Modelo-Vista-Controlador)
junto con el patrón Broker para sistemas distribuidos, analizando sus ventajas y desventajas
específicas. Además, promueve una mejor colaboración y eficiencia en equipos de desarrollo y
prepara a los profesionales para enfrentar los desafíos en constante evolución del mundo digital.
En resumen, este documento se convierte en una herramienta esencial para ingenieros y arquitectos
de software en la toma de decisiones fundamentales en el diseño de arquitecturas de software
efectivas y eficientes.

Palabras Clave: Arquitectura de software, Ingeniería del software, Patrones arquitectónicos


Cliente-Servidor, Capas, Maestro-Esclavo, Modelo-Vista-Controlador (MVC), Broker, Sistemas
distribuidos.
4

Abstract

In this paper we address the critical importance of software architecture in computer


systems development. It explores how architecture influences aspects such as cost, development
time and product quality, providing a solid foundation for informed decision-making in software
engineering. The paper presents four key architectural patterns (Client-Server, Layers, Master-
Slave, and Model-View-Controller) along with the Broker pattern for distributed systems,
analyzing their specific advantages and disadvantages. In addition, it promotes better collaboration
and efficiency in development teams and prepares professionals to face the constantly evolving
challenges of the digital world. In summary, this document becomes an essential tool for software
engineers and architects in making fundamental decisions in the design of effective and efficient
software architectures.

Keywords: Software architecture, Software engineering, Client-Server architectural patterns,


Layers, Master-Slave, Model-View-Controller (MVC), Broker, Distributed systems. (DeepL,
2023)
5

Introducción

En el siempre evolucionante campo de la ingeniería de software, la arquitectura desempeña


un papel fundamental en la creación de sistemas robustos y eficientes. Al igual que en la
construcción de edificios y estructuras, el diseño arquitectónico en la ingeniería del software
establece los cimientos sobre los cuales se erige un producto digital exitoso. Sin embargo, a
diferencia de las estructuras físicas, la arquitectura de software se basa en conceptos abstractos,
modelos y patrones que influyen directamente en la calidad, el costo y el tiempo de desarrollo de
un proyecto.

Este documento se sumerge en el mundo del "Diseño Arquitectónico en la Ingeniería del


Software", explorando la importancia crítica de la arquitectura de software y su impacto en la toma
de decisiones a lo largo del ciclo de vida del desarrollo. Desde la década de 1960, los patrones
arquitectónicos han servido como guías teóricas que permiten a los ingenieros de software
visualizar y planificar la estructura de sistemas complejos antes de que se escriba una sola línea de
código.

A lo largo de estas páginas, analizaremos los factores clave que influyen en la elección de
un patrón arquitectónico, como el costo, el tiempo de desarrollo, el alcance del proyecto y la
interoperabilidad. Además, presentaremos cuatro patrones arquitectónicos esenciales: Cliente-
Servidor, Capas, Maestro-Esclavo y Modelo-Vista-Controlador, cada uno con sus ventajas y
desventajas específicas.

Finalmente, exploraremos el patrón Broker y su aplicación en sistemas distribuidos,


destacando su capacidad para escalar y mantener un alto rendimiento en entornos complejos y
descentralizados.

Este documento pretende servir como un recurso valioso para ingenieros de software,
arquitectos de sistemas, profesionales relacionados o bien estudiantes como nosotros,
proporcionando una base sólida para la toma de decisiones informadas en el diseño de arquitecturas
de software efectivas y eficientes. A través de la comprensión de estos conceptos y patrones, los
6

equipos de desarrollo estarán mejor preparados para enfrentar los desafíos de un mundo digital en
constante evolución.
7

Justificación

La ingeniería del software es un campo en constante evolución, donde la toma de decisiones


informadas y la aplicación de mejores prácticas son esenciales para el éxito de los proyectos de
desarrollo de software. En este contexto, la arquitectura de software juega un papel crucial, ya que
define la estructura y los fundamentos de un sistema, lo que influye directamente en su calidad,
eficiencia y mantenibilidad.

Este documento, titulado "Diseño Arquitectónico en la Ingeniería del Software", se justifica


por varias razones fundamentales:

Importancia Crítica de la Arquitectura de Software: La arquitectura de software no es un


mero detalle técnico, sino un aspecto esencial que impacta en la viabilidad y el éxito de los
proyectos de desarrollo. Comprender cómo diseñar una arquitectura adecuada es crucial para
garantizar que los sistemas sean robustos, escalables y fáciles de mantener.

Guía para la Toma de Decisiones: Este documento proporciona una guía sólida para la toma
de decisiones en el proceso de diseño de software. Ayuda a los ingenieros y arquitectos de software
a considerar factores clave, como el costo, el tiempo de desarrollo, el alcance y la interoperabilidad,
al elegir el patrón arquitectónico más adecuado para un proyecto específico.

Exploración de Patrones Arquitectónicos Clave: El documento analiza en detalle cuatro


patrones arquitectónicos esenciales: Cliente-Servidor, Capas, Maestro-Esclavo y Modelo-Vista-
Controlador, junto con el patrón Broker para sistemas distribuidos. Estos patrones son ampliamente
utilizados en la industria y comprender sus ventajas y desventajas es fundamental para tomar
decisiones informadas en el diseño de sistemas.

Mejora de la Colaboración y la Eficiencia: Al proporcionar una comprensión más profunda


de la arquitectura de software y los patrones arquitectónicos, este documento fomenta una mejor
colaboración entre los miembros del equipo de desarrollo. Facilita la comunicación y la
8

comprensión de los roles y responsabilidades de cada componente del sistema, lo que mejora la
eficiencia y la calidad del trabajo en equipo.

Preparación para Desafíos Futuros: En un entorno digital en constante cambio, es


fundamental que los profesionales de la ingeniería de software estén preparados para enfrentar
nuevos desafíos. Este documento proporciona una base sólida que les permite adaptarse a nuevas
tecnologías y enfoques arquitectónicos a medida que surgen en la industria.
9

Objetivos

6.1 Objetivo general

El objetivo principal es proporcionar una comprensión clara de la importancia de la


arquitectura de software y los patrones arquitectónicos, así como guiar a los profesionales y
estudiantes de la ingeniería del software en la selección de patrones arquitectónicos adecuados para
sus proyectos.

6.2 Objetivos específicos

• Explicar la importancia de la arquitectura de software en el desarrollo de sistemas informáticos


y cómo influye en aspectos como el costo, el tiempo de desarrollo y la calidad del producto.
• Describir los factores a considerar al elegir un patrón arquitectónico, incluyendo el costo, el
tiempo de desarrollo, el número de usuarios y el nivel de aislamiento.
• Presentar y analizar cuatro patrones arquitectónicos clave: Cliente-Servidor, Capas, Maestro-
Esclavo y Modelo-Vista-Controlador, destacando sus ventajas y desventajas.
• Explorar el patrón Broker como una opción para sistemas distribuidos y comprender sus
ventajas y desventajas, especialmente en términos de escalabilidad y rendimiento.
• Sugerir pautas y recomendaciones para la selección y aplicación efectiva de patrones
arquitectónicos en proyectos de ingeniería de software.
10

Diseño Arquitectónico en la Ingeniería del Software

Cada vez que se menciona la arquitectura, comúnmente se evoca una representación mental
relacionada con la disciplina encargada de la planificación y diseño de edificaciones y áreas de
recreación, como parques o monumentos. Sin embargo, la arquitectura adquiere un significado
diferente cuando se aplica al ámbito del software. En este contexto, se refiere a una estrategia de
planificación que se basa en modelos, patrones y abstracciones teóricas, y que precede a la fase de
implementación en la creación de software complejo.

Este enfoque arquitectónico en el desarrollo de software se originó en la década de 1960 y


se utiliza para establecer una guía detallada en términos teóricos. Esto permite comprender cómo
encajarán todas las partes de un producto o servicio de software.

En este contexto, el término "patrón" se utiliza para describir cualquier solución general y
reutilizable para problemas recurrentes en la ingeniería del software en un contexto particular.
Aunque se asemejan a los patrones utilizados en la programación, estos patrones arquitectónicos
están diseñados específicamente para abordar la estructura en un nivel superior y de manera más
genérica.

Importancia de la arquitectura de software

La arquitectura desempeña un papel esencial al permitirnos anticipar y seleccionar la


combinación óptima de herramientas para nuestros proyectos. De hecho, constituye un paso crítico
que precede a la programación, dado que ejerce una influencia significativa en el ritmo de
desarrollo, así como en los aspectos económicos y humanos a lo largo del proceso. Por lo tanto, al
optar por un patrón arquitectónico, siempre es fundamental considerar una serie de cuestiones que
determinarán la utilidad final de nuestro software:

Costo: Debemos definir cuánto estamos dispuestos a invertir en el desarrollo y


mantenimiento de nuestro sistema. Algunos patrones, como hemos observado, pueden ser más
11

complejos y requerir una infraestructura más extensa, lo que puede influir en la inversión inicial
para el desarrollo de nuestra aplicación.

Tiempo de desarrollo: Asimismo, es esencial evaluar el plazo disponible para crear el


producto y la proximidad de la fecha de entrega o lanzamiento al mercado. Estos factores están
estrechamente relacionados con el costo y la planificación del proyecto.

Número de usuarios: Uno de los elementos críticos al desarrollar el producto es


comprender su naturaleza y cuántos usuarios debe admitir. ¿Funciona a través de la web, es
independiente o debe manejar cargas de alta demanda por diseño? Estas consideraciones pueden
inclinarnos hacia patrones arquitectónicos más o menos distribuidos, pasando de opciones menos
distribuidas, como el patrón de capas, a alternativas más distribuidas, como el enfoque basado en
brokers.

Nivel de aislamiento: Otro factor importante es determinar si nuestro producto debe


funcionar de manera aislada respecto a otros productos del usuario o si debe integrarse con ellos o
permitir integraciones con aplicaciones de terceros. Algunas arquitecturas, como la de capas, son
más cerradas y pueden dificultar estas integraciones si se eligen sobre otras alternativas.

En ocasiones, una vez que hemos reflexionado y fundamentado estos aspectos, la elección
de un patrón arquitectónico también puede depender de la familiaridad, comodidad o preferencia
personal. Por esta razón, es recomendable realizar pruebas para familiarizarse con los patrones y
los flujos de trabajo que proponen.

Patrones de arquitectura de software

Patrón Cliente-Servidor

El patrón cliente-servidor es ampliamente utilizado, especialmente en el diseño de sitios


web y servicios en línea. Se basa en la idea de tener un servidor que proporciona un servicio y una
serie de clientes que solicitan dicho servicio y reciben una respuesta a sus solicitudes.
12

Ventajas

Centralización: Todos los recursos se concentran en un único punto, lo que facilita su


administración y dificulta que los clientes realicen acciones perjudiciales.
Escalabilidad: Como cada componente funciona de manera independiente, es más sencillo
mejorar o agregar nuevos nodos a la red de manera individual.
Mantenimiento simplificado: Debido a la independencia funcional y a la clara separación
de responsabilidades, es más fácil mantener cada componente y, en caso necesario, trasladar el
servidor a nuevo hardware o software.

Desventajas

Disponibilidad: El funcionamiento del servicio depende de la disponibilidad constante del


servidor. Cualquier fallo en el servidor o una congestión debida a una alta demanda de clientes
puede resultar en una pérdida total de funcionalidad del servicio.
Requisitos: Dado que el servidor debe manejar un gran número de solicitudes, la calidad
del software y hardware del servidor es crítica. El uso de recursos deficientes puede tener un
impacto negativo en el funcionamiento del sistema.
Distribución: El cliente no tiene posesión física del producto ni acceso directo a los recursos
utilizados. Por lo tanto, cualquier interrupción en el servidor implica que el cliente no puede
acceder a su trabajo en curso.

Patrón de Capas

El patrón de capas implica la subdivisión de la estructura de un programa en varias capas,


cada una representando una tarea específica y perteneciendo a un nivel de abstracción diferente.
Cada capa está diseñada para proporcionar un servicio a la siguiente capa de un nivel superior. Por
lo general, se utilizan las siguientes capas:
13

Ventajas

Facilidad de Pruebas: Dado que cada capa funciona de manera independiente, este patrón
facilita la implementación de pruebas, ya que es posible realizar pruebas separadas para cada capa.
Facilidad de Desarrollo: La alta distribución de responsabilidades simplifica la
coordinación de equipos de desarrollo, ya que cada miembro o equipo comprende claramente el
propósito de cada capa. Solo se necesita crear una interfaz de comunicación clara entre ellas.

Desventajas

Rendimiento: Dado que cada funcionalidad se encuentra en capas diferentes, este patrón a
menudo sufre de un rendimiento inferior en comparación con otros, ya que cada solicitud debe
atravesar individualmente cada capa de diseño.
Escalabilidad: Modificar un software que utiliza este patrón puede ser complicado y
costoso, ya que cada capa depende de las anteriores y de sus interfaces. Realizar cambios en una
capa implica modificar todas las capas anteriores. Aunque esto puede abordarse subdividiendo las
capas en módulos, sigue requiriendo más esfuerzo en comparación con otros patrones.

Patrón Maestro-Esclavo

El patrón Maestro-Esclavo involucra dos grupos: el primero es denominado el maestro


(master) y el otro es el grupo de esclavos (slaves). Los esclavos ejecutan las tareas definidas por el
maestro, calculan los resultados y los envían de vuelta a este último, quien los presenta, almacena
o procesa. Esta estructura se emplea para separar la autorización y dirección de cálculos de las
partes que los procesan de manera independiente.

Ventajas

Gestión Centralizada: Este patrón es eficaz en el diseño de tareas multitarea, ya que permite
dividir las tareas en módulos que pueden ejecutarse de manera independiente.
14

Control: Al iniciar todas las tareas desde un nodo orquestador único, se mantiene un mayor
control, ya que las tareas se ejecutan de manera autónoma y reciben contexto y procesamiento final
desde un solo punto de ejecución.
Escalabilidad: Dado que las tareas son independientes entre sí, es fácil escalar el sistema al
agregar nuevos nodos esclavos, lo que suele traducirse en un aumento significativo del
rendimiento.

Desventajas

Implementación: La estructura independiente de las tareas puede limitar la aplicabilidad de


este patrón a ciertos proyectos, ya que requiere que las tareas puedan dividirse en módulos que
funcionen de manera aislada con respecto a la ejecución principal del programa.
Dependencia: En muchas ocasiones, la implementación de este patrón conlleva una fuerte
dependencia con el sistema en el que se ha implementado, lo que a menudo dificulta la portabilidad
a otras máquinas.

Patrón Modelo-Vista-Controlador (MVC)

El patrón Modelo-Vista-Controlador (MVC) divide una aplicación interactiva en tres


componentes distintos:

Modelo: Contiene la lógica principal y los datos fundamentales.


Vista: Presenta información al usuario y permite definir una o más vistas para una misma
aplicación.
Controlador: Maneja la entrada del usuario y separa las representaciones internas de la
información de cómo se presenta y se recibe la información del usuario. Esto permite desacoplar
los componentes y facilita la reutilización del código.

Este patrón es ampliamente utilizado en el desarrollo de aplicaciones web, tanto en la parte


trasera (back-end) como en la parte frontal (front-end), y sirve como base para muchos frameworks
conocidos, como Angular en el caso de JavaScript y Spring en el caso de Java.
15

Ventajas

Colaboración Sencilla: La clara separación de responsabilidades facilita la colaboración


entre diferentes desarrolladores, ya que muchas veces es posible desarrollar nuevas características
sin tener que modificar todas las partes del sistema.
Aplicaciones Multi-Vista: Al aislar las vistas del resto de la lógica de la aplicación, es
posible presentar las mismas funcionalidades en diferentes vistas dirigidas a diversos dispositivos.

Desventajas

Complejidad: Este patrón es complejo y requiere que los desarrolladores comprendan


claramente las responsabilidades asignadas a cada una de las tres partes involucradas.
Posible Lentitud: En comparación con otros patrones, desarrollar bajo el patrón MVC puede
requerir la modificación de muchas piezas y seguir un flujo de trabajo cerrado, lo que a veces
dificulta la incorporación de cambios que serían sencillos en otros enfoques de desarrollo.

Patrón Broker

El patrón Broker se utiliza para estructurar sistemas distribuidos con componentes


desacoplados. Estos componentes pueden interactuar entre sí mediante la invocación de servicios
remotos, y publicitan sus capacidades, solicitan servicios y un componente denominado "broker"
se encarga de coordinar la comunicación entre los componentes. Este patrón guarda similitudes
con el patrón Maestro-Esclavo.

Ventajas

Escalabilidad: Al igual que el patrón Maestro-Esclavo, este patrón permite escalar


fácilmente el sistema, ya que todas las tareas se ejecutan de forma independiente, y solo se requiere
agregar nuevos servidores para procesar las solicitudes del broker. (Pablo Huet, 2022)
16

Rendimiento: Al conectar un gran número de nodos con lo que funciona esencialmente


como un puente hacia el cliente, el rendimiento puede mantenerse alto, ya que es posible
redistribuir y procesar grandes cargas de solicitudes en momentos de saturación.

Desventajas

Costos: Implementar este sistema requiere una gran cantidad de servidores, que deben ser
mantenidos de forma independiente, con diversas piezas de software distribuidas entre ellos, lo que
conlleva costos significativos.
Mantenimiento: A diferencia de un sistema centralizado, este sistema distribuido implica
que cualquier fallo puede deberse a cualquier componente, y realizar tareas de mantenimiento en
la máquina broker, por ejemplo, puede provocar periodos de indisponibilidad del servicio.

Patrones de Diseño

PATRONES DE CREACION

Los patrones de creación son una forma de crear objetos de forma flexible y reutilizable.
Pueden ayudar a los desarrolladores a crear código más fácil de mantener y adaptar a los cambios.

PATRÓNES ESTRUCTURALES

Los patrones estructurales son un tipo de patrón de diseño de software que se utilizan para
describir cómo se combinan los objetos y las clases para formar estructuras más grandes. Estos
patrones proporcionan un enfoque estructurado y reutilizable para diseñar sistemas de software.
17

PATRÓNES DE COMPORTAMIENTO

Los patrones de comportamiento son un tipo de patrón de diseño de software que se utilizan
para describir cómo los objetos interactúan entre sí. Estos patrones proporcionan un enfoque
estructurado y reutilizable para diseñar sistemas de software.

MODELADO ARQUITECTONICO

DIAGRAMAS UML

los diagramas UML son herramientas gráficas estándar utilizadas en ingeniería de software
para visualizar, especificar y documentar sistemas. Permiten representar el diseño y la estructura
de un sistema de manera clara y comprensible, facilitando la comunicación entre los diferentes
involucrados en un proyecto de desarrollo de software.

DIAGRAMAS DE FLUJO DE DATOS

Los diagramas de flujo de datos (DFD) son representaciones visuales que muestran cómo
fluyen los datos en un sistema. Ayudan a entender y mejorar procesos, mostrando cómo los datos
se mueven desde las entradas hasta las salidas en un sistema.

MODELO ENTIDAD RELACIÓN

Los modelos entidad-relación (ER) son herramientas para diseñar bases de datos.
Representan entidades, relaciones y atributos de un sistema, ayudando a visualizar cómo se
organizan y relacionan los datos. Esencial para el diseño de bases de datos.
18

Conclusiones

La fase de planificación conocida como arquitectura de software desempeña un papel


crucial en cualquier proyecto de desarrollo de software. Esta etapa proporciona una guía clara para
definir los componentes del producto, su distribución y la forma en que interactuarán entre sí.

La elección de un patrón arquitectónico específico entre varios disponibles es de suma


importancia. Esto determina factores clave como el tiempo de desarrollo, los costos y la capacidad
para satisfacer las necesidades de los usuarios. Cambiar de patrón durante el desarrollo, si es
posible, puede resultar costoso y poner en peligro la viabilidad del proyecto.

Un analista de software competente invertirá tiempo en entrevistar a los clientes, evaluar


los recursos disponibles y estimar el tiempo de desarrollo. Aunque puede parecer un proceso largo
y aparentemente innecesario, esta inversión acelera el desarrollo y evita problemas futuros que
pueden ser difíciles de resolver si se basan en decisiones arquitectónicas erróneas.
19

Bibliografía

DeepL. (2 de 10 de 2023). Obtenido de


https://www.deepl.com/es/translator#es/en/En%20este%20documento%20abordamos%20
la%20importancia%20crítica%20de%20la%20arquitectura%20de%20software%20en%2
0el%20desarrollo%20de%20sistemas%20informáticos.%20Explora%20cómo%20la%20a
rquitectura%20influye%20en%20
Pablo Huet. (24 de Agosto de 2022). OpenWebinars. Obtenido de Arquitectura de software: Qué
es y qué tipos existen: https://openwebinars.net/blog/arquitectura-de-software-que-es-y-
que-tipos-existen/

También podría gustarte