Mario González Agenda Introducción histórica ¿Qué es la arquitectura de software? Arquitectura y sus efectos en los Stakeholders Estructuras arquitectónicas y y y y y Vista lógica Vista de código Vista de desarrollo Vista de coincidencia Vista física Escenarios Agenda (Cont.) Lenguajes de descripción arquitectónica (ADLs) Arquitectura como decisiones prematuras de diseño Estilos arquitectónicos Arquitecturas para líneas de producción Diseño y análisis de la arquitectura Diseño basado en arquitectura Agenda (Cont.) Análisis basado en arquitectura Analizando los Impactos en el negocio de las decisiones arquitectónicas Ingeniería en reversa de la arquitectura El futuro Introducción histórica Se comenzó a usar desde 1990 debido al tamaño y complejidad de los sistemas que comenzaron a surgir. Razones: y Comunicación entre stakeholders y Decisiones de diseño y Abstracción transferible de un sistema ¿Qué es la arquitectura de software La arquitectura de software de un programa o sistema de computación es la(s) estructura(s) del sistema que comprende los componentes del software, las propiedades visibles de esos componentes y las relaciones entre ellos. Arquitectura y sus efectos en los Stakeholders La arquitectura afecta a todos los relacionados con el proyecto, afecta a los clientes, al gerentes, al equipo de desarrollo, al equipo de pruebas, etc. Cada stakeholder se preocupa por partes especificas del sistema, y esto se ve reflejado en la arquitectura del sistema. La arquitectura provee un lenguaje mediante el cual los stakeholders comprenden el sistema y se comunican para tomar decisiones importantes. Estructuras arquitectónicas Existen diferentes tipos de vistas que permiten ver la arquitectura de un sistema más en detalle y Vista lógica y Vista de código y Vista de desarrollo y Vista de coincidencia y Vista física Vista lógica Abstracción de las funciones el sistema y sus relaciones. Vista de código Esta vista es la que ve el programador, los elementos que tiene este tipo de vista son clases, objetos, métodos y funciones y su composición para formar subsistemas, capas y módulos Vista de código (Cont.) Vista de desarrollo La vista de desarrollo la usan los desarrolladores, pero es diferente a la vista de código, esta es una vista de la estructura del código fuente, como un repositorio el cual varios usuarios (programadores y de mantenimiento) crean, modifican y administran Vista de desarrollo (Cont.) Vista de coincidencia Esta vista permite deducir los procesos e hilos que se van a crear y como se van a comunicar y a compartir recursos. Vista física La vista física describe los recursos de HW del sistema. En sistemas pequeños es trivial la vista física puesto que un solo computador es el que se encarga de manejar todos los procesos Vista física (Cont.) Escenarios Escenarios (Cont.) Los escenarios se usan para: y Entender y validar la arquitectura. y Establecer cierta comunicación entre la arquitectura y aquellos que no tuvieron mucho que ver con su creación. y Unir las diferentes vistas. y Entender los límites de la arquitectura. Lenguajes de descripción arquitectónica (ADLs) Debido a la gran importancia de la descripción arquitectónica, y a su uso como medio de comunicación entre los diferentes stakeholders, se han tratado de desarrollar diferentes lenguajes para soportar esta descripción, algunos han tenido éxito, y otros han fracasado. Decisiones tempranas de diseño El diseño de la arquitectura describe la forma en que el sistema está compuesto. Esto hace que se creen una serie de restricciones a la implementación como la forma de comunicación, y como se van a asignar los recursos. Estilos arquitectónicos Describen una clase de arquitecturas, o piezas significantes de una arquitectura. Son muy usados en la práctica. Es un paquete coherente de decisiones de diseño. Tienen propiedades identificadas que permiten el re-uso. Estilos arquitectónicos (Cont.) Algunos estilos arquitectónicos considerados por Shaw y Garlan: y Componentes independientes: procesos de y y y y comunicación, invocación explicita e invocación implícita. Flujo de datos: batch sequential, pipe and filter. Centralización de datos: repositorio, blackboard. Maquina virtual: Interpreter, sistema basado en reglas. Call/return: programa principal y subrutina, Orientado a objetos, por capas. Estilos arquitectónicos (Cont.) Deben tener por lo menos la siguiente información: y Un conjunto de tipos de componentes. y Un conjunto de tipos de mecanismos de conexión. y Una disposición topológica de los componentes. y Una serie de restricciones topológicas y de comportamiento. y Una descripción acerca de los costos y beneficios de cada uno de los estilos. Diseño y análisis de la arquitectura Asegurar que nuestras decisiones de diseño son coherentes con las metas de calidad establecidas. Predecir los atributos de calidad que el sistema tendrá. Asegurar que el sistema satisface las necesidades de su stakeholder. Asegurar que as decisiones de diseño traen el mayor beneficio a la organización. Diseño basado en arquitectura Propone un método de transformar un conjunto de requerimientos del cliente en una arquitectura para un sistema o para una línea de producción, a través de descomposiciones y refinamientos. Diseño basado en arquitectura (Cont.) Lista de requerimientos. Descomponer diseño arquitectónico. Se satisfacen los atributos de calidad asociando estilos arquitectónicos con los requerimientos. Diseño basado en arquitectura (Cont.) El diseño se concentra en tres vistas arquitectónicas: y la funcional y la de coincidencia y la física. Análisis basado en arquitectura Se hace un análisis al diseño con el fin de asegurar que las cualidades que el arquitecto ha planeado para la arquitectura se puedan realizar. Este análisis se hace basándose en escenarios, de los cuales se sacan los datos que se quieren medir. Ingeniería en reversa de la arquitectura Razones: y Las arquitecturas pueden no haber sido documentadas nunca, y los únicos que entienden la arquitectura son empleados que ya dejaron la organización. y Se adquieren nuevos productos sin documentación arquitectónica. y El trabajo de los programadores ha cambiado algunas de las restricciones previamente establecidas por el arquitecto. Futuro Referencias Rick Kazman, Software Architecture, Handbook of Software Engineering and Knowledge Engineering, 2001.