You are on page 1of 24

Conceptos de Arquitectura.

Ingeniería de Software.
Ingeniería de Software. Conceptos de Arquitectura Página 0
El rol del Arquitecto de Software.
Mapa del Proceso.
Ingeniería de Software. Conceptos de Arquitectura Página 1
Justificación del Rol del Arquitecto.
• Durante años, el software se desarrolló sin contar con el
rol del Arquitecto.
• ¿Por qué existe actualmente?
Ingeniería de Software. Conceptos de Arquitectura Página 2
• Por dos cambios cruciales en los sistemas que han
ocurrido en el pasado reciente.
• Tamaño.
• Distribución.
Sistemas con Distribución Mínima y pocos Usuarios.
• En Sistemas no distribuidos no se justifica un rol de Arquitecto.
• En sistemas cliente-servidor, el rol del arquitecto se reduce a la
premisa conocida como: "Compute near the data, validate near the
user".
Ingeniería de Software. Conceptos de Arquitectura Página 3
Sistemas de Alta Distribución y muchos Usuarios.
• El rol crítico del arquitecto es llevar a cabo la planeación de
alto nivel para la localización de componentes de software y
su intercomunicación.
• Este rol distingue al arquitecto del diseñador, desarrollador,
programador, integrador, etc.
Ingeniería de Software. Conceptos de Arquitectura Página 4
Justificación del Rol del Arquitecto.
• Se requiere el arquitecto para asegurar que el sistema:
– Continúe trabajando si ocurren fallas parciales (robustez).
– Maneje la carga total.
Ingeniería de Software. Conceptos de Arquitectura Página 5
– Maneje la carga total.
– Pueda crecer si la demanda excede los parámetros originales
de diseño.
Responsabilidades del Arquitecto (1).
• Garantizar el éxito del Proyecto.
• Asegurar la Calidad del Servicio.
• Analizar los Requerimientos no funcionales:
Ingeniería de Software. Conceptos de Arquitectura Página 6
• Analizar los Requerimientos no funcionales:
– Cualidades del sistema como escalabilidad, rendimiento,
disponibilidad, etc.
– Límites a las decisiones que se pueden tomar durante el diseño.
Responsabilidades del Arquitecto (2).
• Evaluar y controlar riesgos.
– Evaluar los riesgos y las estrategias de mitigación.
– Comparar riesgos basados en costo y probabilidad de
ocurrencia.
• Analizar costos.
Ingeniería de Software. Conceptos de Arquitectura Página 7
• Analizar costos.
– Algunas opciones pueden costar poco, pero dejar riesgos
latentes.
– Otras opciones pueden ser caras, pero controlan el riesgo
completamente.
– Opción de no hacer nada. Asumir que el riesgo ocurre y
examinar el impacto en costo.
Actividades del Arquitecto.
• Técnicas.
– Determinar componentes de software y su distribución.
– Describir el ambiente de "deployment".
– Construir diagramas de interacción de componentes.
Ingeniería de Software. Conceptos de Arquitectura Página 8
– Construir diagramas de interacción de componentes.
– Identificar riesgos y construir planes de mitigación.
• Gerenciales.
– Convencer a los involucrados en cuanto a la validez de las
decisiones.
– Asesorar a otros miembros del equipo de desarrollo en el uso
adecuado de las tecnologías a utilizar.
Diferencias entre Arquitecto y Diseñador.
Arquitecto Diseñador
Nivel de
abstracción.
• Alto y amplio.
• Pocos detalles.
• Bajo y estrecho.
• Enfocado a muchos
detalles.
Entregables. • Planes de sistema y • Diseño de
Ingeniería de Software. Conceptos de Arquitectura Página 9
Entregables. • Planes de sistema y
subsistemas.
• Prototipo arquitectónico
(“Baseline”).
• Diseño de
componentes.
• Especificaciones de
codificación.
Énfasis. • Requerimientos no
funcionales.
• Manejo de riesgos.
• Requerimientos
funcionales.
Principios de Arquitectura.
• Axiomas o asunciones que sugieren buenas prácticas para la
construcción de un sistema.
• Forman la base para la mayoría de los patrones de
Ingeniería de Software. Conceptos de Arquitectura Página 10
• Forman la base para la mayoría de los patrones de
arquitectura.
• Contribuyen a las decisiones que debe hacer el arquitecto
para satisfacer los requerimientos no funcionales y la calidad
del servicio.
Algunos Principios de Arquitectura.
• Separación de Propósitos Funcionales. (Separation of
Concerns.)
• Inversión de Dependencia. ("Depend upon abstracions. Do not
depend upon concretions.")
• Separación de componentes estables y volátiles.
Ingeniería de Software. Conceptos de Arquitectura Página 11
• Separación de componentes estables y volátiles.
• Uso de contenedores ("frameworks") de componentes.
• Mantenimiento de interfaces simples y claras.
• Mantenimientos de interfaces remotas gruesas ("coarse-
grained interfaces")
Separación de Propósitos Funcionales.
• Conduce al patrón de diseño: Model-View-
Controller.
Model
• Expone la funcionalidad de la aplicación.
• Encapsula el estado de la aplicación
• Responde a consultas del estado.
Ingeniería de Software. Conceptos de Arquitectura Página 12
• Responde a consultas del estado.
• Notifica a la vista de cambios en el
estado.
View
• Expone el modelo.
• Solicita actualizaciones del modelo
• Acepta acciones del usuario.
• Permite al controlador seleccionar la
vista.
Controller
• Encapsula el flujo y comportamiento de la
aplicación.
• Mapea acciones del usuario al modelo.
• Responde a consultas del estado.
• Selecciona la vista.
Principio de Inversión de Dependencia.
Ingeniería de Software. Conceptos de Arquitectura Página 13
Separación de componentes estables y volátiles.
• Reducir los cambios a un pequeño número de
paquetes.
• Los componentes estables se deben poner en
Ingeniería de Software. Conceptos de Arquitectura Página 14
• Los componentes estables se deben poner en
paquetes separados de los componentes que pueden
cambiar con facilidad.
• Su utilidad se presenta en el mantenimiento.
Uso de contenedores ("frameworks") de
componentes.
• Un componente es un elemento de software manejado
por un contenedor. (e.g. un servlet)
• Un contenedor es un “framework” de software que
maneja componentes construidos para cierta
Ingeniería de Software. Conceptos de Arquitectura Página 15
maneja componentes construidos para cierta
especificación. (e.g. un web server que maneja HTTP
y servlets)
• Son herramientas muy poderosas para el arquitecto.
Permiten adquirir software que maneje la
infraestructura del sistema y permita a los diseñadores
concentrarse en la lógica de la aplicación.
Mantenimiento de interfaces simples y claras.
• Entre más compleja sea la interfaz entre componentes,
más difícil es para el desarrollador usar los
componentes.
Ingeniería de Software. Conceptos de Arquitectura Página 16
• Las interfaces deben ser altamente cohesivas.
Mantenimientos de interfaces remotas gruesas.
• Los componentes remotos requieren tráfico en la red.
• Hay que mantener el número de requests remotos al
Ingeniería de Software. Conceptos de Arquitectura Página 17
• Hay que mantener el número de requests remotos al
mínimo.
• “Coarse-grained” significa que se envíe en cada
request remoto el mayor número posible de
información
Patrones de Arquitectura y de Diseño.
• El arquitecto planea sistemas usando razonamiento basado
en patrones.
• El arquitecto debe estar familiarizado con una variedad de
patrones conocidos para ser efectivo.
• El arquitecto utiliza dos tipos de patrones:
Ingeniería de Software. Conceptos de Arquitectura Página 18
• El arquitecto utiliza dos tipos de patrones:
– Patrones de diseño que definen estructura y comportamiento
para construir componentes de software efectivos y reusables
que soporten requerimientos funcionales.
– Patrones de arquitectura que definen estructura y
comportamiento de sistemas y subsistemas que soporten los
requerimientos no funcionales.
Dimensiones de Arquitectura.
• Capas (Tiers), que separan las funciones lógicas de la
aplicación.
• Estratos (Layers), que organizan las relaciones entre
componentes y contenedores.
Ingeniería de Software. Conceptos de Arquitectura Página 19
componentes y contenedores.
• Cualidades Sistémicas (Systemic Qualities), que identifican
estrategias y patrones entre capas y estratos.
Capas (Tiers).
“A logical or physical organization of components into an ordered chain
of service providers and consumers.”
• Cliente. Consiste de un cliente delgado como un
navegador web.
• Presentación. Proporciona las páginas y formas HTML que
se envían al navegador Web y procesa los
Ingeniería de Software. Conceptos de Arquitectura Página 20
se envían al navegador Web y procesa los
requerimientos del usuario.
• Negocio. Proporciona los servicios de negocio y las
entidades.
• Integración. Proporciona componentes que integran la
capa de Negocio con la capa de Recursos.
• Recursos. Contiene los recursos de "backend" como el
Manejador de Base de Datos o el Sistema de
Información Empresarial.
Estratos (Layers).
“The hardware and software stack that hosts services within a given
tier. (layers represent component/container relationships)”
• Aplicación Proporciona una implementación
Application (App) concreta de componentes que
cumplen los requerimientos
funcionales.
• Plataforma Virtual Proporciona las APIs que
Virtual Platform (VP) implementan los componentes de la
Ingeniería de Software. Conceptos de Arquitectura Página 21
• Plataforma Virtual Proporciona las APIs que
Virtual Platform (VP) implementan los componentes de la
aplicación.
• Plataforma Superior Consiste de productos como
Upper Platform (UP) contenedores de componentes
(middleware).
• Plataforma Inferior Consiste principalmente del Sistema
Lower Platform (LP) Operativo.
• Plataforma de Hardware Incluye los componentes de hardware,
Hardware Platform (HP) como servidores, dispositivos de
almacenamiento y dispositivos de red.
Cualidades Sistémicas.
“The strategies, tools, and practices that will deliver the requisite
quality of service across the tiers and layers.”
• Manifiestas. Reflejadas en la experiencia
del usuario final: confiabilidad,
disponibilidad, accesabilidad.
Ingeniería de Software. Conceptos de Arquitectura Página 22
disponibilidad, accesabilidad.
• Operacionales. Reflejadas en la ejecución del sistema:
seguridad, "throughput", mantenibilidad.
• Evolucionales. Reflejadas a futuro: escalabilidad,
extensibilidad, flexibilidad.
• De desarrollo. Reflejadas durante el desarrollo:
planeación, costo, factibilidad.
Vista Tridimensional
Ingeniería de Software. Conceptos de Arquitectura Página 23
La arquitectura es un proceso de balanceo entre los
diferentes elementos para satisfacer a los involucrados.