¿Por qué?
|
|
|
Arquitectura
|
|
¿Qué?
La industria del software se complace en tomar palabras y estirarlas en un sin número de significados sutilmente contradictorios. Uno de los mayores afectados es la "arquitectura". Tiendo a ver la arquitectura como una de esas palabras que suenan impresionantes, usadas principalmente para indicar que estamos hablando de algo que es importante
Software Architecture
Arquitectura del Sistema
|
Arquitectura del Software
Analogía con la arquitectura de edificios, proponemos el siguiente modelo de arquitectura del software con tres clases de elementos arquitecturales: elementos de procesamiento, componentes que suministran la transformación de los elementos de datos; elementos de datos, contienen la información usada y transformada; y conexiones entre elementos, son el pegamento que une juntas las diferentes piezas de la arquitectura,los cuales pueden ser tanto de procesamiento, de datos o de ambos
— Perry y Wolf
|
La arquitectura de un sistema de software intensivo es la estructura o estructuras del sistema, que comprenden elementos de software, las propiedades visibles externamente de esos elementos y las relaciones entre ellos
— Carnigie-Mellon University
|
La organización fundamental de un sistema incorporado en sus componentes, sus relaciones con otros y su entorno y las principales guías de su diseño y evolución
— IEEE
|
Una arquitectura es el conjunto de decisiones significativas sobre la organización del un sistema software, la selección de los elementos estructurales y sus interfaces por los que el sistema está compuesto junto con su comportamiento como se especifica en sus colaboraciones entre estos elementos, la composición de estos elementos estructurales y de comportamiento en subsistemas progresivamente más grandes y el estilo de arquitectura que guían la organización – estos elementos, sus interfaces, sus colaboraciones y su composición
— Booch, Rumbaugh, and Jacobson
Rational Unified Process |
|
|
|
¿Para qué?
|
|
|
Objetivos | |||
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
¿Cómo?
Principios de Paquetes
Principios de Acoplamiento | Principios de Cohesión |
---|---|
|
|
|
|
|
|
Principios de Acoplamiento
Dependencia y Acoplamiento de Elementos
|
Acoplamiento de un elemento | Acoplamiento eferente de un elemento | Acoplamiento aferente de un elemento |
---|---|---|
es el conjunto de dependencias en las que el elemento es el elemento origen o destino |
es el conjunto de dependencias en las que el elemento es el elemento origen |
es el conjunto de dependencias en las que el elemento es el elemento destino |
elementos de los que depende el elemento dado o que dependen del elemento dado |
elementos de los que depende el elemento dado |
elementos que dependen del elemento dado |
los elementos relacionados desde arriba y hacia abajo, hacia afuera y hacia adentro, todos los elementos relacionados con el elemento dado |
los elementos relacionados hacia abajo y hacia afuera del elemento dado |
los elementos relacionados desde arriba y hacia adentro del elemento dado |
|A| >= 0 |
|Ae| >= 0 |
|Aa| >= 0 |
Dependencias y Acoplamiento de Clases
|
Acoplamiento de una clase | Acoplamiento eferente de una clase | Acoplamiento aferente de una clase |
---|---|---|
es el conjunto de dependencias en las que la clase es el elemento origen o destino |
es el conjunto de dependencias en las que la clase es el elemento origen |
es el conjunto de dependencias en las que la clase es el elemento destino |
clases de los que depende la clase dada o que dependen de la clase dada |
clases de los que depende la clase dada, |
clases que dependen de la clase dada |
clases base y derivadas, todo y partes, asociadas y usadas por y a la clase |
clases base, parte, asociadas y que son usadas por la clase dada |
clases derivadas, todo, asociadas y que usan a la clase dada |
|A| >= 0 |
|Ae| >= 0 |
|Aa| >= 0 |
Dependencia y Acoplamiento de Paquetes
|
Acoplamiento de un paquete | Acoplamiento eferente de un paquete | Acoplamiento aferente de un paquete |
---|---|---|
es el conjunto de dependencias en las que el paquete es el elemento origen o destino |
es el conjunto de dependencias en las que el paquete es el elemento origen |
es el conjunto de dependencias en las que el paquete es el elemento destino |
paquetes de los que depende el paquete dado o que dependen del paquete dado |
paquetes de los que depende el paquete dado |
paquetes que dependen del paquete dado |
los paquetes relacionados desde arriba y hacia abajo, hacia afuera y hacia adentro, todos los elementos relacionados con el paquete dado |
los paquetes relacionados hacia abajo y hacia afuera del paquete dado |
los paquetes relacionados desde arriba y hacia adentro del paquete dado |
|A| >= 0 |
|Ae| >= 0 |
|Aa| >= 0 |
Ejemplo sin ciclos | Ejemplo con ciclos |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Principio de Dependencias Acíclicas
|
La estructura de dependencias entre los paquetes debe ser un grafo dirigido acíclico. Es decir, no debe haber ciclos en la estructura de dependencias.
— Robert C. "Uncle Bob" Martin
Clean Architecture. A Craftman's Guide to Software Structured and Design |
Mecanismo para romper ciclos entre paquetes | Ggrafo dirigido acíclico de dependencias |
---|---|
|
|
|
Principio de Dependencias Estables
Volatilidad | Estabilidad |
---|---|
|
|
|
|
Estudio de valores extremos de la Inestabilidad |
|
|
|
|
|
|
|
Estable |
Intermedio |
Inestable |
|
|
|
Responsable |
Intermedio |
Irresponsable |
Independiente |
Intermedio |
Dependiente |
Hoja |
Intermedio |
Raíz |
Las dependencias entre paquetes en un diseño deben estar en la dirección de la estabilidad de los paquetes. Un paquete debe depender sólo de paquetes más estables
Clean Architecture. A Craftman's Guide to Software Structured and Design
Principio de Abstracciones Estables
-
Métrica de abstracción de un paquete:
-
A = |Ca| / |Ct|.
-
Donde
-
|Ca|>=0, siendo Ca el número de clases abstractas;
-
|Aa|>=0, siendo Aa el número total de clases;
-
0 ⇐ A ⇐ 1, siendo A la abstracción deL paquete
-
-
-
Mínima abstracción | Máxima abstracción |
---|---|
|
|
|
|
|
|
Relación entre Estabilidad y Abstracción
Análisis de combinaciones de valores extremos | Análisis de combinaciones de valores intermedios | |
---|---|---|
|
|
|
|
|
Malas: | Buenas: |
---|---|
|
|
Los paquetes con máxima estabilidad deben ser máximamente abstractos. Los paquetes inestables deberían ser concretos. La abstracción de un paquete debe estar en proporción a su estabilidad
Clean Architecture. A Craftman's Guide to Software Structured and Design
|
|
|
Principios de Cohesión
-
Determinan qué clases colocar dentro de los paquetes adecuados
Principio de Reusabilidad Común
|
Las clases de un paquete se reutilizan juntas. Si se reusa una de las clases de un paquete, se reusan todas
— Robert C. "Uncle Bob" Martin
Clean Architecture. A Craftman's Guide to Software Structured and Design |
Principio de Cierre Común
|
Las clases de un paquete deberían encerrarse juntas contra la misma clase de cambios. Un cambio que afecta a un paquete, afecta a todas las clases del paquete
— Robert C. "Uncle Bob" Martin
Clean Architecture. A Craftman's Guide to Software Structured and Design |
Principio de Equivalencia entre Reusabilidad y Entregable
|
La granularidad de la reusabilidad es la granularidad del entregable. Sólo los componentes que se entregan mediante un sistema de control de versiones pueden ser efectivamente reusados. Esta *granularidad es el paquete.
— Robert C. "Uncle Bob" Martin
Clean Architecture. A Craftman's Guide to Software Structured and Design |
Resumen
Principios de Acoplamiento | Principios de Cohesión |
---|---|
|
|
|
|
|
|
Actores y Atributos de la Arquitectura
Actor | Responsabilidad |
---|---|
Usuarios |
colaborando con UX y desarrolladores |
Desarrolladores |
implementan el producto, las pruebas funcionales y no funcionales (distribución, pruebas de carga, de estabilidad…) en diferentes entornos (testing, pre-producción, producción) |
Gestores de proyectos |
planifican el equipo, solicitan recursos , toman decisiones sobre el personal asignado al proyecto, funcionalidades del sistema y requisitos no funcionales |
Administradores |
preparan la infraestructura del entorno, despliegan el sistema, recogen los logs, monitorizan el sistema, escalan según necesidades y mantienen la infraestructura |
Analista de Negocios |
analiza los datos proporcionados por operaciones, buscan patrones en comportamientos y oportunidades de negocio y también son útiles para monitorizar (patrones en fallos) |
Tipo | Atributo | Capacidad |
---|---|---|
Atributos de Calidad |
Portabilidad |
de plataforma, SSOO, dispositivos, Cloud, … |
Adaptabilidad al cambio |
capacidad de añadir nueva funcionalidad |
|
Comprensible |
el software es entendible por quien debe efectuar los cambios |
|
Testabilidad |
pueden construirse tests para las nuevas funcionalidades |
|
Usabilidad (UX) |
los usuarios pueden usarlo de forma eficiente y satisfactoria |
|
Seguridad |
prevenir accesos no autorizados |
|
Integridad de datos |
evitar la corrupción de datos por su desactualización |
|
Atributos de Operación |
Disponibilidad |
porcentaje del tiempo que el sistema está disponible |
Actualización |
capacidad de actualizar el sistema en funcionamiento (en caliente) |
|
Fiabilidad |
capacidad del sistema de operar durante largos periodos de tiempo |
|
Recuperabilidad |
tiempo necesario para recuperar el sistema cuando se producen fallos |
|
Capacidad de gestión |
capacidad de gestionar e inspeccionar sus componentes |
|
Atributos de Rendimiento |
Tiempo de respuesta |
de los distintos casos de uso que ofrece el sistema |
Elasticidad |
capacidad del sistema para aumentar o disminuir su capacidad en función de la carga |
|
Capacidad (throughput) |
capacidad de soportar cargas extremas sin dejar de dar servicio |
Documentación de la Arquitectura
4+1 Vistas
|
Vistas | Contenidos | Diagramas | Arquitectura |
---|---|---|---|
Casos de Uso |
Incluye casos de uso que describe el comportamiento como es visto por los usuarios, analistas y probadores |
|
Requisitos de la Arquitectura del Sistema Informático |
Lógica o Diseño |
Incluye clases, interfaces y colaboraciones que forman el vocabulario del problema y su solución (tratando con los requisitos funcionales) |
|
Arquitectura del Software |
Desarrollo o Implementación |
Incluye componentes usados para ensamblar y hacer posible el sistema físico (la gestión de configuración de versiones consiste de los componentes que pueden ser ensamblados de varias formas para dar un ejecutable) |
|
Arquitectura del Sistema |
Física o Despliegue |
Incluye nodos que forman la topología hardware sobre la que el sistema se ejecuta (cubriendo distribución, entrega e instalación) |
|
Arquitectura de Sistema |
Procesos |
Incluye los hilos y/o procesos que forman los mecanismos de concurrencia y sincronización del sistema (operaciones, adaptabilidad y rendimiento del sistema) |
|
Arquitectura de Software y/o Sistema |
Estilos Arquitectónicos
|
Un estilo arquitectónico, con un nombre bien definido, es una colección de decisiones de diseño arquitectónico que (1) son aplicables en un contexto de desarrollo dado, (2) restringen decisiones de diseño arquitectónico que son específicas para un sistema particular dentro de ese contexto, y (3) obtienen cualidades beneficiosas en cada sistema resultante."
— Software Architecture Foundations
Theory and Practice |
Un estilo arquitectónico define una familia de sistemas en términos de un patrón de organización estructural. Un estilo arquitectónico define, un vocabulario de componentes y tipos de conectores, un conjunto de restricciones sobre cómo se pueden combinar, uno o más modelos semánticos que especifican cómo se pueden determinar las propiedades generales de un sistema a partir de las propiedades de sus partes
— Booch
|
|
|
Niveles de abstracción | Descripción |
---|---|
Estilo arquitectónico / Patrón arquitectónico |
|
Arquitectura de referencia / Dominio Específico |
|
Arquitectura de línea de producto |
|
Arquitectura de software |
|
Término |
Define los tipos de elementos y cómo interactúan. |
Define el mapeo de la funcionalidad a los elementos de la arquitectura. |
Define instancias de elementos de arquitectura |
Un estilo arquitectónico |
si |
a veces |
no |
Una arquitectura de referencia |
si |
si |
no |
Una arquitectura de línea de productos |
si |
si |
a veces |
Una arquitectura de software |
si |
si |
si |
Arquitecturas Estructurales
Arquitecturas de Capas
A menudo hay confusion entre los términos de capa lógica (layer) y física (tier), siendo usadas como sinónimos. La mayoría de la gente ve capa física implicando una separación física. Los sistemas cliente/servidor a menudo se describen como dos capas físicas y la separación es física: el cliente es un escritorio y el servidor es un servidor. Yo uso capa lógica para reforzar que tú no tienes que ejecutar las capas lógicas en diferentes máquinas. Una capa lógica de la lógica del dominio a menudo corre tanto en un escritorio como en un servidor de bases de datos. En esta situación tienes dos nodos pero tres capas lógicas. Con una base de datos local puedo ejecutar las tres capas lógicas en un solo portatil pero todavía serán tres capas lógicas distintas
Architectural Patterns
|
|
|
|
Tuberías y Filtros (Pipes and Filters)
|
|
|
|
Escenario | Diagrama |
---|---|
|
|
|
|
|
|
|
|
|
Arquitecturas de Persistencia
|
|
|
|
|
|
|
Arquitecturas Adaptables
Arquitectura de Micronúcleo (microkernel)
|
|
Componente | Responsabilidad |
---|---|
Microkernel |
|
Servidor interno |
|
Servidor externo |
|
Cliente |
|
Adaptador |
|
Arquitecturas de Interacción
|
|
Sintesis
Bibliografía
Obra, Autor y Edición | Portada | Obra, Autor y Edición | Portada |
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ponente
|
|
|