SC - Unidad 2 Arquitectura de Software de SC
SC - Unidad 2 Arquitectura de Software de SC
SC
ll/2024
Unidad 2. Fundamentos de la arquitectura 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
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:
1. ¿Qué se le viene a la mente cuando escucha, Cliente-Servidor, Publicador/Suscriptor, REST, SOA, MVC,
orientación a objetos?,
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
(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
8
Unidad 2. Fundamentos de la arquitectura de software
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
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
● 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:
12
Unidad 2. Fundamentos de la arquitectura 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
● 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
17
Unidad 2. Fundamentos de la arquitectura de software
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
20
Unidad 2. Fundamentos de la arquitectura de software
21
Unidad 2. Fundamentos de la arquitectura de software
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
25
Unidad 2. Fundamentos de la arquitectura de software
26
Unidad 2. Fundamentos de la arquitectura de software
1.9.1. Vista
28
Unidad 2. Fundamentos de la arquitectura de software
29
Unidad 2. Fundamentos de la arquitectura de software
30
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:
32
Unidad 2. Fundamentos de la arquitectura de software
33
Unidad 2. Fundamentos de la arquitectura de software
34
Unidad 2. Fundamentos de la arquitectura de software
El modelo C4 es...
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
¡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
40
Unidad 2. Fundamentos de la arquitectura de software
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
42
Unidad 1. Fundamentos de la arquitectura de software
43
Unidad 1. Fundamentos de la arquitectura de software
● https://c4model.com/
44