0% encontró este documento útil (0 votos)
18 vistas44 páginas

SC - Unidad 2 Arquitectura de Software de SC

Cargado por

202103819
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
18 vistas44 páginas

SC - Unidad 2 Arquitectura de Software de SC

Cargado por

202103819
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 44

Arquitectura de Software de

SC
ll/2024
Unidad 2. Fundamentos de la arquitectura de software

1.1. Arquitectura de software y su relación con la Ingeniería de Software

Esta relación que busca el SWEBOK (Software Engineering Body of Knowledge, Cuerpo de Conocimiento de
Ingeniería de Software), el cual es un documento promovido por la IEEE Computer Society y creado por la
Software Engineering Coordinating Committee, para desarrollar el área de conocimiento propio de la Ingeniería
del Software.

2
Unidad 2. Fundamentos de la arquitectura de software

La ingeniería de software propone 10 áreas

Estudiaremos las áreas etiquetadas como: 1. Requisitos de Software, 2. Diseño de Software, 3.Construcción de
Software, 4. Pruebas de Software y 10. Calidad de Software, estos apoyan en el análisis, diseño, construcción,
pruebas e implementación de una arquitectura de software.

3
Unidad 2. Fundamentos de la arquitectura de software

En lo que respecta a la arquitectura de software, esta desempeña un papel esencial durante el ciclo de vida de
desarrollo de software, sirviendo como puente entre los requisitos (derivados de la fase de análisis) y la
implementación para proponer un diseño. Fases del CVDS para definir, diseñar e implementar una arquitectura:

4
Unidad 2. Fundamentos de la arquitectura de software

Existen tres fundamentos que permiten comprender la arquitectura de software dentro del contexto de la
ingeniería de software:

● Cada sistema de software tiene una arquitectura.


● Cada sistema de software tiene al menos una arquitectura.
● La arquitectura de software no es una fase del desarrollo.

Asociados a estos tres fundamentos, respondamos las siguientes preguntas:

1. ¿Qué se le viene a la mente cuando escucha, Cliente-Servidor, Publicador/Suscriptor, REST, SOA, MVC,
orientación a objetos?,

2. ¿escalabilidad, mantenibilidad, disponibilidad?,

3. ¿vistas arquitectónicas, elementos arquitectónicos?

5
Unidad 2. Fundamentos de la arquitectura de software

Antes de iniciar con el estudio de los conceptos relacionados con arquitectura de software, es importante que
conozcamos las fases del CVDS, su importancia, beneficios y roles que intervienen en cada una de ellas.

6
Unidad 2. Fundamentos de la arquitectura de software

1.2. Definiciones de arquitectura de software

(Richard N. Taylor, Nenad Medvidovic, 2012) definen a la arquitectura software como el “conjunto de decisiones
de diseño que gobiernan un sistema”.

Para (Garlan David, 2000) la “arquitectura de software se define como la descripción del sistema en términos de
componentes funcionales, reutilizables e independientes que están interconectados y permiten la abstracción del
sistema”.

En otra definición dada por el Instituto de Ingeniería de Software (Software Engineering Institute, 2014) se afirma
que la “arquitectura de un sistema intensivo en software, es la estructura o estructuras del sistema, que
comprenden elementos de software, las propiedades visibles externas de esos elementos y las relaciones entre
ellos”

7
Unidad 2. Fundamentos de la arquitectura de software

En la última definición se identifican dos elementos claves:


● Estructuras internas del sistema, existen dos tipos: estructuras estáticas y estructuras dinámicas
● Propiedades visibles externas, se manifiestan de dos maneras: comportamiento externo visible (lo que
hace el sistema UI/UX) y las propiedades de calidad (cómo lo hace el sistema - no funcional visible
externamente - Ej: seguridad, el rendimiento, la escalabilidad, entre otros)

8
Unidad 2. Fundamentos de la arquitectura de software

● Pensemos como caso de estudio el Websiss: UI vs UX y Despliegue local vs Cloud

9
Unidad 2. Fundamentos de la arquitectura de software

La estructura estática del sistema se representa de forma semi formal usando UML (Unified Modeling Language)
donde se especifica las clases que serán usadas para implementar el estilo o patrón arquitectónico y la estructura
dinámica permitirá visualizar a través de los diagramas de secuencia, actividades y comunicación, etc.

10
Unidad 2. Fundamentos de la arquitectura de software

1.3. Importancia de la arquitectura de software

El diseñar y construir distintos tipos de software a pequeña, mediana y gran escala, nos conduce primeramente a
entender las necesidades de los clientes, de las empresas y, al mismo tiempo, nos sugiere gestionar
cuidadosamente las limitaciones presupuestarias, de recursos económicos y tecnológicos y de tiempo.

11
Unidad 2. Fundamentos de la arquitectura de software

1.4. Beneficios de la arquitectura de software

● El objetivo de una arquitectura es identificar los requisitos que afectan la estructura y al comportamiento
del software. Por lo tanto, una arquitectura debe verse como el resultado de un conjunto de decisiones de
diseño.
● Poder construir aplicaciones que aborden todas las inquietudes o necesidades relevantes dadas por los
clientes, que se puedan implementar en la infraestructura de TI elegida (despliegue local o cloud) y que
proporcione resultados que cumplan con las metas y objetivos del negocio.
● Permite visibilizar y garantizar Atributos de calidad:

○ Mantenibilidad, Extensibilidad, Simplicidad, Rendimiento, Escalabilidad, Evolución, Fiabilidad,


Seguridad, Tasa de entrega, Testeabilidad

12
Unidad 2. Fundamentos de la arquitectura de software

1.5. El rol del arquitecto de software

La línea entre ser un desarrollador de software y ser un arquitecto de software es un poco compleja, ya que por lo
general el arquitecto de software crea y ejecuta planes de diseño y desarrollo de software, incluido características
de calidad, restricciones y limitaciones arquitectónicas, reglas de negocio, el presupuesto y los plazos de
entregas del software, mientras que el desarrollador de software sigue el plan de desarrollo de software e
implementa los módulos a través de un lenguaje de programación realizando las pruebas unitarias del módulo
desarrollado.

El arquitecto de software tiene el rol de liderar el desarrollo de la arquitectura de software del sistema, que incluye
promover y crear soporte para las decisiones técnicas clave que limitan el diseño y la implementación general del
proyecto. A diferencia de otros roles, la visión del arquitecto de software es de amplitud y no de profundidad.

13
Unidad 2. Fundamentos de la arquitectura de software

14
Unidad 2. Fundamentos de la arquitectura de software

● Dentro el rol del Arquitecto es de identificar e involucrar a las diferentes partes interesadas, con el objetivo
de conocer estratégicamente a las personas que le brindarán los insumos necesarios y apoyarán en la
definición y diseño de una arquitectura candidata.
● Comprender y captar los concerns (intereses, inquietudes o necesidades) dadas por las partes interesadas.
● Definir y diseñar una arquitectura que cubra todas o gran parte de los concerns dados por las partes
interesadas.
● Asumir con liderazgo la definición y diseño de la arquitectura de un producto o sistema de software.

15
Unidad 2. Fundamentos de la arquitectura de software

Lecturas en bibliografía básica, complementaria y recursos educativos abiertos:

● Libro de Somerville – (Capítulo 2 - Procesos de software. Subtemas 2.1 Modelos de proceso de software,
2.1.2 Desarrollo incremental, 2.2.1 Especificación del software, 2.2.2 Diseño e implementación del
software, 2.2.3 Validación del software, 2.2.4 Evolución del software)
● Libro de Presman – (Capítulo 9 – Diseño de la arquitectura. subtemas 9.1.1 ¿Qué es la arquitectura?, 9.1.2
¿Por qué es importante la arquitectura?)
● Libro Arquitectura de Software, conceptos y ciclo de desarrollo – (Capítulo 1 - La arquitectura y el desarrollo
de software – subtemas 1.1 Visión general del desarrollo de los sistemas de software, 1.2 Definición de
arquitectura de software, 1.5 Beneficios de la arquitectura, 1.6 El rol del arquitecto).

16
Unidad 2. Fundamentos de la arquitectura de software

1.6. Arquitectura vs Diseño

La arquitectura de un software es el nivel más


alto de abstracción (estructura,comportamiento,
interacción, atributos de calidad).

La arquitectura debería poder responder lo


siguiente: ¿qué tipo de almacenamiento de datos
está presente?, ¿cómo interactúan los
componentes entre sí o con otros
componentes?, ¿qué sistemas de recuperación
existen?, ¿cuál es la mejor opción para el
despliegue de los componentes?, entre otras.

17
Unidad 2. Fundamentos de la arquitectura de software

Por otra parte, el diseño de software, consiste en


diseñar los módulos / componentes / elementos
individuales, es decir las estructuras estaticas y
dinamicas, responder preguntas tales como: ¿cuáles
son las responsabilidades o funciones del módulo
x?, ¿cuáles son las responsabilidades de la clase
Y?, ¿cómo interactúa una interfaz con una o varias
clases? ¿qué puede hacer el módulo y qué no?
¿qué patrones de diseño se pueden utilizar?, entre
otras.

18
Unidad 2. Fundamentos de la arquitectura de software

En resumen, podríamos mencionar que, la arquitectura de software se enfoca más en las decisiones de
diseño que dan forma a todo el sistema, mientras que el diseño de software hace énfasis a nivel de módulo /
componente / clase que permite la implementación del sistema.

Con esto se podría afirmar que, toda arquitectura es un diseño, pero no todo diseño es una arquitectura.

19
Unidad 2. Fundamentos de la arquitectura de software

Modelos de Referencia: son esquemas de arquitectura organizacionales que plantean arquitecturas de


referencia según el área o necesidad, se pueden definir como Frameworks. (TOGAF, BIM y COBIT a modo de
ejemplos)
Arquitecturas de Referencia: son diseños software de alto nivel que describen las partes fundamentales
de un conjunto de sistemas en un dominio particular.

20
Unidad 2. Fundamentos de la arquitectura de software

21
Unidad 2. Fundamentos de la arquitectura de software

1.7. Elementos arquitectónicos

Elemento arquitectónico hace referencia a las piezas fundamentales a partir de las cuales se construyen los
sistemas de software. La naturaleza de un elemento arquitectónico depende mucho del contexto y tipo de
sistema.

(Perry & Wolf, 1992) mencionan que “los elementos arquitectónicos incluyen elementos de procesamiento,
elementos de datos y elementos de conexión. Los elementos de procesamiento son aquellos que realizan
transformaciones en los datos, los elementos de datos son aquellos que contienen la información que se utiliza y
transforma, y los elementos de conexión que mantiene unidas las diferentes piezas de la arquitectura”

Los elementos arquitectónicos se identifican a nivel de diseño, por ejemplo, cuando se representa el diagrama de
componentes, donde deben existir conectores como interfaces provistas e interfaces requeridas, las cuales a
través de su configuración permiten conectar a dichos componentes

22
Unidad 2. Fundamentos de la arquitectura de software

Elementos arquitectónicos – Componentes:

● Un componente es un elemento computacional que


tiene un alto nivel de encapsulación y solo es posible
interactuar con él a través de sus interfaces.
● En otra definición se considera a los componentes
como los bloques de construcción los cuales
conforman las partes de un sistema.
● En términos de Component-Based Software
Development (CBSD por sus siglas en inglés) un
componente se puede definir desde el punto de vista
de implementación como un paquete de código.
● Desde un punto de vista más general una
componente es un artefacto de software que se ha Entre los principios que se debe tener en cuenta
desarrollado para ser reutilizable, lo que implica que al momento de definir y diseñar un componente
la podría utilizar en otro sistema, subsistema o constan: Encapsulación, Abstracción y
servicio. Modularidad. 23
Unidad 2. Fundamentos de la arquitectura de software

Elementos arquitectónicos – Conectores:

● Los conectores surgen de la necesidad de


separar la interacción del cálculo, con ello se
logra que los componentes sean más
reutilizables y modulares.
● El uso de conectores permite mejorar el nivel
de abstracción de la descripción de la
arquitectura de software.
● Los conectores ofrecen los servicios de:
comunicación para transferir datos,
coordinación para transferir el control,
facilitación para habilitar y optimizar la
interacción entre componentes y de
conversión para ajustar la interacción entre
interfaces incompatibles.
24
Unidad 2. Fundamentos de la arquitectura de software

Elementos arquitectónicos – Puertos:

● A los puertos se los considera como puntos


de interacción de elementos arquitectónicos
(componentes y conectores)
● Por lo general, los puertos a nivel de
implementación son de tipo Interface +
Played_Role (Rol que juega).
● A nivel de implementación, una Interface es
un conjunto de servicios publicados y
también describe la firma de los servicios
que se pueden invocar o solicitar a través de
esa interface.

25
Unidad 2. Fundamentos de la arquitectura de software

1.8. Partes interesadas (Stakeholders)

Acorde al estándar IEEE 1471-2000 (Hilliard,


2000), un interesado, en el contexto de la
arquitectura de software, se define como una
persona, grupo o entidad con un interés, inquietud
o responsabilidad (concerns) sobre la realización
de la arquitectura.

26
Unidad 2. Fundamentos de la arquitectura de software

1.9. Descripción Arquitectónica – Modelo


conceptual ISO/IEC/ IEEE 42010

El arquitecto puede utilizar como base una


descripción arquitectónica (AD, Architecture
Description por sus siglas en inglés) a la cual se la
define como un conjunto de productos que
documentan una arquitectura de manera que sus
partes interesadas (Stakeholders) pueden entender
y visualizar que la arquitectura ha respondido a sus
intereses o inquietudes (concerns).
En el metamodelo se visualiza que las
correspondencias (Correspondence) describen las
dependencias entre los elementos de la
arquitectura (partes interesadas, necesidades,
vistas, etc.), así como entre las descripciones de
toda la arquitectura. 27
Unidad 2. Fundamentos de la arquitectura de software

1.9.1. Vista

Acorde a su definición las vistas son consideradas


como una representación de un sistema completo
desde la perspectiva de un conjunto de intereses o
necesidades relacionadas (Hilliard, 2000)

28
Unidad 2. Fundamentos de la arquitectura de software

1.9.2. Punto de Vista

Los puntos de vista son requeridos por las partes


interesadas, por ejemplo, ingenieros de software,
dueños de producto, arquitectos de software,
desarrolladores, quienes a través del uso y
comprensión de conjunto de diagramas permitirán
entender acorde a su punto de vista cómo será la
arquitectura del software.

29
Unidad 2. Fundamentos de la arquitectura de software

1.9.3. Vistas arquitectónicas

Las vistas arquitectónicas son una representación


visual que se utilizan para organizar y presentar
los conceptos en uno o varios tipos de diagramas
UML con el fin de proporcionar una notación visual
como lo exponen (Li, Liang, &
Avgeriou, 2016)

30
Unidad 2. Fundamentos de la arquitectura de software

1.10. Arquitectura lógica vs arquitectura física


● La arquitectura lógica (logical architecture),
describe el sistema en términos de su
organización conceptual, de funcionamiento
interno o interacción. Esta arquitectura se soporta
en diagramas ya conocidos tales como casos de
uso, clases, paquetes, componentes,
subsistemas.
● Por otro lado, la arquitectura de despliegue o
física (physical architecture), describe el sistema
en términos de la asignación de procesos a las
unidades hardware de procesamiento (servidores)
que funcionan despliegue local o en cloud, y la
configuración de la red (componentes, nodos,
dispositivos, protocolos o interfaces de
comunicación interna y externa del sistema) 31
Unidad 2. Fundamentos de la arquitectura de software

Recuerde que la arquitectura es una abstracción que se centra en las principales decisiones de diseño
entre las que constan:

● Estructura: componentes y conexiones (relaciones).


● Comportamiento: responsabilidades de cada componente, algoritmos de alto nivel.
● Interacción: reglas que gobiernan y definen cómo se comunican los componentes.
● Atributos de calidad: estrategia para lograr la calidad a nivel estructural y de comportamiento.
● Implementación: lenguajes de programación, plataformas, bibliotecas, etc.

32
Unidad 2. Fundamentos de la arquitectura de software

Lecturas en bibliografía básica, complementaria y recursos educativos abiertos:

● Revise la bibliografía complementaria para analizar el estándar ISO/IEC/IEEE 42010 y relacionarlos


con conceptos que se usan en la descripción, diseño e implementación de una arquitectura de
software. Libro de Somerville – (Capítulo 6 - Diseño arquitectónico – subtemas 6.2 Vistas
arquitectónicas).
● Libro de Presman – (Capítulo 8 – Conceptos de diseño. subtemas 8.1 Diseño en el contexto de la
ingeniería de software. Capítulo 9 – Diseño de la arquitectura. subtemas 9.1.3 Descripciones
arquitectónicas).
● Libro Arquitectura de Software, conceptos y ciclo de desarrollo – (Capítulo 4 – Vistas – subtemas
4.4.1 Vistas lógicas, 4.4.2 Vistas de comportamiento, 4.4.3 Vistas físicas).

33
Unidad 2. Fundamentos de la arquitectura de software

El modelo C4 para visualizar la


arquitectura de software.
Contexto, contenedores, componentes y código

34
Unidad 2. Fundamentos de la arquitectura de software

El modelo C4 es...

1. Un conjunto de abstracciones jerárquicas (sistemas de software, contenedores, componentes y código).


2. Un conjunto de diagramas jerárquicos (contexto del sistema, contenedores, componentes y código).
3. Notación independiente.
4. Herramientas independientes.
Usos y beneficios
El modelo C4 es un enfoque fácil de aprender y amigable para los desarrolladores para la diagramación
de arquitectura de software. Los buenos diagramas de arquitectura de software ayudan con la
comunicación dentro y fuera de los equipos de desarrollo/productos de software, la incorporación eficiente
de nuevo personal, revisiones/evaluaciones de arquitectura, identificación de riesgos, modelado de
amenazas, etc.

35
Unidad 2. Fundamentos de la arquitectura de software

36
Unidad 2. Fundamentos de la arquitectura de software

Un sistema de software está formado por uno o más contenedores (aplicaciones y almacenes de datos),
cada uno de los cuales contiene uno o más componentes , que a su vez son implementados por uno o más
elementos de código (clases, interfaces, objetos, funciones, etc). Y la gente puede utilizar los sistemas de
software que construimos.

37
Unidad 2. Fundamentos de la arquitectura de software

Contenedor (aplicaciones y almacenes de datos)

¡No Docker! En el modelo C4, un contenedor representa una aplicación o un almacén de datos . Un contenedor es
algo que debe estar ejecutándose para que funcione todo el sistema de software. En términos reales, un contenedor es
algo como:
● Aplicación web del lado del servidor : una aplicación web Java EE que se ejecuta en Apache Tomcat, una aplicación ASP.NET MVC que se
ejecuta en Microsoft IIS, una aplicación Ruby on Rails que se ejecuta en WEBrick, una aplicación Node.js, etc.
● Aplicación web del lado del cliente : una aplicación JavaScript que se ejecuta en un navegador web usando Angular, Backbone.JS, jQuery, etc.
● Aplicación de escritorio del lado del cliente : una aplicación de escritorio de Windows escrita con WPF, una aplicación de escritorio de OS X
escrita con Objective-C, una aplicación de escritorio multiplataforma escrita con JavaFX, etc.
● Aplicación móvil : una aplicación de Apple iOS, una aplicación de Android, una aplicación de Microsoft Windows Phone, etc.
● Aplicación de consola del lado del servidor : una aplicación independiente (por ejemplo, "principal pública estática vacía"), un proceso por lotes,
etc.
● Función sin servidor : una única función sin servidor (por ejemplo, Amazon Lambda, función Azure, etc.).
● Base de datos : un esquema o base de datos en un sistema de gestión de bases de datos relacionales, almacén de documentos, base de datos de
gráficos, etc., como MySQL, Microsoft SQL Server, Oracle Database, MongoDB, Riak, Cassandra, Neo4j, etc.
● Blob o almacén de contenidos : un almacén de blobs (por ejemplo, Amazon S3, Microsoft Azure Blob Storage, etc.) o una red de entrega de
contenidos (por ejemplo, Akamai, Amazon CloudFront, etc.).
● Sistema de archivos : un sistema de archivos local completo o una parte de un sistema de archivos en red más grande (por ejemplo, SAN, NAS,
etc.).
● Script de Shell : un único script de Shell escrito en Bash, etc. 38
Unidad 2. Fundamentos de la arquitectura de software

39
Unidad 2. Fundamentos de la arquitectura de software

C1. Diagrama de Contexto del sistema

Nos permite ver a alto nivel un panorama general.


Dibuje un diagrama que muestre su sistema como
una caja en el centro, rodeado por sus usuarios y
los otros sistemas con los que interactúa.

La atención debe centrarse en las personas


(actores, roles, personas, etc.) y los sistemas de
software en lugar de tecnologías, protocolos y
otros detalles de bajo nivel.

40
Unidad 2. Fundamentos de la arquitectura de software

C2. Diagrama Contenedor

El diagrama de contenedor
muestra la forma de alto nivel de
la arquitectura de software y
cómo se distribuyen las
responsabilidades en ella.
También muestra las principales
opciones tecnológicas y cómo
los contenedores se comunican
entre sí. Es un diagrama sencillo,
centrado en la tecnología de alto
nivel, que resulta útil tanto para
los desarrolladores de software
como para el personal de
soporte / operaciones.

41
Unidad 2. Fundamentos de la arquitectura de software

C3. Diagrama Componentes

A continuación, puede ampliar y


descomponer aún más cada
contenedor para identificar los
principales bloques
estructurales y sus
interacciones.
El diagrama de componentes
muestra cómo un contenedor se
compone de una serie de
"componentes", cuáles son cada
uno de esos componentes, sus
responsabilidades y los detalles
de tecnología / implementación.

42
Unidad 1. Fundamentos de la arquitectura de software

C4. Diagrama Código

Finalmente, puede ampliar cada


componente para mostrar cómo se
implementa como código; utilizando
diagramas de clases UML, diagramas de
entidades-relación o similares.
Este es un nivel de detalle opcional. Este
nivel de detalle no se recomienda para nada
excepto para los componentes más
importantes o complejos, debería considerar
mostrar sólo aquellos atributos y métodos
que le permitan contar la historia que desea
contar.

43
Unidad 1. Fundamentos de la arquitectura de software

Lecturas en bibliografía básica, complementaria y recursos educativos abiertos:

● https://c4model.com/

44

También podría gustarte