Está en la página 1de 88

Introducción a la arquitectura de

software

Profesor: Xavier Bustamanet


Facultad de Ingeniería
Ingeniería en Tecnologías de la Información.
Universidad Nacional de Chimborazo
Objetivos de la materia
Al finalizar esta materia se espera que los alumnos:

• Tengan un entendimiento de la Arquitectura de Software


y su relevancia en el desarrollo de software, además de
comprender la evolución histórica, estado actual y
tendencias (posibilidades de negocio).
• Comprendan terminología y herramientas comunes a la
práctica de la arquitectura de SW.
• Comprendan objetivos, tareas, problemáticas y funciones
del rol del arquitecto en los proyectos tecnológicos.
Aspectos administrativos
• Clases: Martes de 19 a 21 hs
• Dinámica: teórica-práctica
• Lectura, análisis y discusión de material
• 1 trabajo práctico individual o grupal de 2
personas
• Análisis de material de lectura & ejercicios
“take home”: Individual
• Examen final integral: Individual
Bibliografía básica
• Software Architecture in Practice - Bass,
Clements, Kazman
• Documenting Software Architectures -
Clements, Bachmann, Bass, Garlan.
• Software Architecture Foundation, Theory and
Practice - Taylor, Medvidovic, Dashofy
Bibliografía extra
• 97 Things Every Software Architect Should
Know - Richard Monson-Haefel
• Software Systems Architecture: Working With
Stakeholders Using Viewpoints and
Perspectives - Nick Rozanski,E. Woods
Bibliografía extra
• Microsoft Application Architecture Guide,
2nd Edition (
http://msdn.microsoft.com/en-us/library/ff65
0706.aspx
)
Posibles temas
• Análisis de una solución / caso de éxito Ej: Facebook
• Herramienta de SW aplicando conceptos de arquitectura. Ej:
Frameworks (Spring, JBoss, Java, .NET, RoR).
• Productos de integración de aplicaciones. Ej: Oracle Service
Bus, Tibco Cloud Integration, Lumen.
• Herramientas para la evaluación de arquitecturas de software
Ej: SAAM / ATAM.
• Comparación de estilos arquitectónicos, REST, Cloud, Multi-
tenancy, etc.
• Arquitectura de SW dentro de las metodologías ágiles.
• Comparación de ADLs
Temas a tratar
Estilos arquitectónicos - Tendencias de
mercado - Arquitecto – Web - Mobile –
Cloud – Desktop – Integración - Web
Services – SOAP - REST – SOA - ESB –
Patrones - UML – Herramientas –
Calidad – Testing - Buenas prácticas -
Recomendaciones
Caso Práctico
Introducción
Discusión
¿Qué es la arquitectura tradicional?
"Arquitectura es todo lo
que necesitas conocer
acerca de un sistema que
no está en el código"
(G. Booch)
Arquitectura: algunas definiciones
Según la IEEE: Es la organización
estructural de un sistema, representada
por sus componentes, las relaciones entre
los mismos, el ambiente y los principios
que gobiernan el diseño y su evolución.
El nivel conceptual más alto de un
sistema.
Arquitectura: algunas definiciones
Según Booch, Rumbaugh, Jacobson:
Una arquitectura es el conjunto de
decisiones significativas acerca de la
organización de un sistema de SW, la
selección de los elementos
estructurales y sus interfaces con las
que el sistema se compone.
Arquitectura: algunas definiciones
Según Fowler:
• La partición de más alto nivel de un
sistema en sus partes.
• Las decisiones que son difíciles de
cambiar (que son clave).
Arquitectura: algunas definiciones
• Al final, la arquitectura resume lo
que es importante en un sistema.
Discusión
Definir la arquitectura en un proyecto
es crítico... ¿Por qué?
Factores
• Varios factores primarios en la ingeniería de
software han incrementado la importancia de
la arquitectura:

+Escala
+Complejidad
+Riesgo
+Costos
-Tiempo
-Recursos
-Infraestructura
El caso Twitter

Arquitectura de Software -
Introducción
¿Para qué es útil la Arquitectura de
Software?

• Las personas necesitan pensar,


diseñar, codificar, y comunicarse en
términos de grandes bloques
conceptuales (Abstracción).

Arquitectura de Software -
Introducción
¿Para qué es útil la Arquitectura de
Software?

• Es necesario escapar de los


desarrollos excesivamente
personalizados y estandarizar el
diseño. (Reutilización de patrones
de arquitectura).

Arquitectura de Software -
Introducción
¿Para qué es útil la Arquitectura de
Software?

• Es necesario diseñar sistemas de


larga vida. (Reutilización de
componentes particulares).

Arquitectura de Software -
Introducción
¿Para qué más?

• Productividad en el desarrollo:
actualmente solamente se reutiliza
el código y las estructuras de datos.

Arquitectura de Software -
Introducción
¿Para qué más?

• Atacar otros problemas del ciclo de


vida del software: Cambios,
portabilidad, escalabilidad, seguridad,
tolerancia a fallas (A medida que el
tamaño del sistema crece, las
soluciones a estos problemas radican
más en la arquitectura).
Arquitectura de Software -
Introducción
¿Para qué más?

• Tener un lenguaje común para


diseñadores, desarrolladores y
usuarios.

Arquitectura de Software -
Introducción
Ejemplos de arquitecturas

Arquitectura de Software -
Introducción
Ejemplos de arquitecturas

Arquitectura de Software -
Introducción
Ejemplos de arquitecturas

Arquitectura de Software -
Introducción
Ejemplos de arquitecturas

Arquitectura de Software -
Introducción
Ejemplos de arquitecturas

Arquitectura de Software -
Introducción
Discusión
¿Qué es una mala arquitectura?
¿Cómo es una buena arquitectura?
• Los módulos deben diseñarse con
el principio de separación de
intereses (distintos grupos de
trabajo pueden desarrollarlos
independientemente).

Arquitectura de Software -
Introducción
¿Cómo es una buena arquitectura?
• Cada módulo tendrá una interfaz
definida que oculta a los otros
módulos los aspectos cambiables.

Arquitectura de Software -
Introducción
¿Cómo es una buena arquitectura?
• La arquitectura no debe depender
de una versión particular de un
producto comercial. De ser así,
éste debe estar estructurado de
modo que sea fácil y barato
cambiarlo.
Arquitectura de Software -
Introducción
¿Cómo se hace una buena arquitectura?

Arquitectura de Software -
Introducción
¿Cómo se hace una buena arquitectura?

• La arquitectura debe ser producida


por un solo arquitecto o un grupo
pequeño.

Arquitectura de Software -
Introducción
¿Cómo se hace una buena arquitectura?

• El arquitecto debe disponer de los


requisitos técnicos del sistema y
una lista priorizada de propiedades
cualitativas (portabilidad,
escalabilidad, seguridad, etc) que se
espera que el software satisfaga.
Arquitectura de Software -
Introducción
¿Cómo se hace una buena arquitectura?

• La arquitectura debe estar bien


documentada usando una notación
acordada que todos los interesados
puedan comprender. Ej: UML

Arquitectura de Software -
Introducción
¿Cómo se hace una buena arquitectura?

• Se debe facilitar la arquitectura a los


interesados, los cuales deben estar
involucrados activamente en su
revisión.

Arquitectura de Software -
Introducción
Etilos arquitectónicos
¿Qué son los estilos?
• Son soluciones probadas y entendibles
aplicadas a la organización de un sistema
(partes, componentes, capas, conectores, etc).

• Al basar la arquitectura en estilos que son


conocidos las personas entienden más
fácilmente las características importantes de
un sistema.

41
Evolución de Arquitecturas: Aplicaciones
monolíticas
Evolución de Arquitecturas:
Cliente Servidor
Evolución de Arquitecturas:
Cliente Servidor Mejorada
Evolución de Arquitecturas: 3 Capas
Evolución de Arquitecturas: 3 Capas
Evolución de Arquitecturas: N Capas
Evolución de Arquitecturas:
Message Oriented
Evolución de Arquitecturas: SOA
Portal de
Servicios Integrados
Sistema
Batch Cluster de
Servidores de
Aplicaciones

Base de
Datos
Servidor de
Procesos
(BPM) Aplicaciones
Legadas
Evolución de Arquitecturas: Otros…
• Peer-to-peer
• Event-driven architecture
• Filtros
• …..
Lecturas
• When Good Architecture Goes Bad:
http://www.methodsandtools.com/archive/ar
chive.php?id=85
• The Golden Age of Software Architecture
La arquitectura y el proceso de
desarrollo de software
Discusión
¿Cuáles son los pasos para desarrollar
un software?
Arquitectura en el proceso de desarrollo

Requisitos

Arquitectura Reducir los costos de


Diseño mantenimiento directa e
Diseño indirectamente.
Detallado

Programación
– Hacer explícitas las decisiones.
Test
– Permitir análisis a nivel de sistemas.
Mantenimiento

Arquitectura de Software - 54
Introducción
¿Cómo se plantea una arquitectura
y un diseño?
• Hay decisiones CLAVE que deben
ser atacadas/resueltas en
cualquier arquitectura,
independientemente de enfoque
arquitectónico que se elija.

Arquitectura de Software -
Introducción
¿Cómo se plantea una arquitectura
y un diseño?
• Como mínimo, se debe determinar
el tipo de aplicación que se está
construyendo, los estilos
arquitectónicos que serán
utilizados y como se manejarán los
temas transversales (cross-cutting
concerns). Arquitectura de Software -
Introducción
Tipos de aplicaciones donde
impacta la arquitectura
• Web application
• Rich Internet Client application
• Mobile application
• Rich Client application (Desktop)
• Service application
• Embedded application
• entre otros...
Discusión
¿Existe alguna diferencia entre
arquitectura y diseño de software?
Arquitectura Vs. Diseño

Arquitectura Diseño
Nivel de Alto nivel Bajo nivel. Enfoque
Abstracción específico en detalles
Entregables Planear subsistemas, interfaces Diseño detallado
con sistemas externos, componentes.
servicios horizontales,
frameworks, componentes Especificaciones de
reutilizables, prototipo codificación
arquitectónico

Áreas de Selección de tecnologías, Requerimientos


Enfoque Requerimientos no funcionales funcionales
(QoS),
Manejo de riesgos
Arquitectura Vs. Diseño
• La arquitectura envuelve un conjunto de
decisiones estratégicas de diseño, lineamientos,
reglas y patrones que restringen el diseño y la
implementación de un software.

Código
Las decisiones
Implementación
de arquitectura
Diseño causan un alto
impacto en los
Arquitectura proyectos de IT
Discusión
¿Qué relación hay entre las técnicas de
desarrollo formales de SW y la
arquitectura?
Arquitectura y Procesos de Desarrollo
Principios Fundamentales de los procesos modernos:
– Desarrollo iterativo e incremental.
– Centrado en la arquitectura.
– Mejores prácticas de diseño.
– Dirigido por los casos de uso.
– Basada en Modelos.
– Testing…
Definición de Arquitectura en RUP
Etapas de Desarrollo Basado en Arquitectura (RUP)

1. Realizar una descripción general del sistema


2. Comprender los requisitos (Casos de uso)
3. Crear o seleccionar una arquitectura
4. Representar y comunicar la arquitectura
5. Analizar o evaluar la arquitectura (Pruebas)
6. Implementar el sistema basado en la arquitectura
7. Asegurar que la implementación se ajusta a la
arquitectura

Arquitectura de Software -
Introducción
Etapas en la definición de una Arquitectura
en RUP
Definir arquitectura
candidata

Evaluar Req.
No Funcionales (NFR)

Refinar y Seleccionar
la Arquitectura

Prototipar la
Arquitectura

Valorar Calidades Ajustar


Sistémicas Arquitectura
Definición de Arquitectura en RUP
• Modelo de Vista 4+1
• Framework para Descripción de Arquitectura, basado en vistas
lógicas y físicas UML y una vista funcional de casos de uso.

Logical View Implementation View

Analysts/Designers End-user Programmers


Structure Functionality Software management

Use-Case View

Process View Deployment View


System integrators System engineering
Performance System topology
Scalability Delivery, installation
Throughput communication
UML y el modelo 4+1
• Diagrama de casos de uso
• Diagrama de clases
• Diagrama de paquetes
• Diagrama de secuencia
• Diagrama de actividades
• Diagrama de estados
• Diagrama de colaboración
• Diagrama de componentes
• Diagrama de despliegue
Vista lógica
• Muestra los requisitos funcionales del sistema
(dominio de la aplicación).
• Diagramas de secuencia, colaboración, clases,
paquetes y de transición de estados.
Vista proceso
• Representa los flujos de trabajo (paso a paso)
del negocio.
• También permite mostrar algunos de los
requisitos no funciónales, como son ejecución,
disponibilidad, tolerancia a fallas, integridad,
seguridad, confiabilidad entre otros.
• Diagrama de actividades
Vista implementación
• Muestra como está dividido nuestro sistema
de software en componentes y las
dependencias entre los mismos.
• Diagrama de componentes y de paquetes.
Vista deployment
• Representa cómo están distribuidos los componentes
entre los distintos equipos que conforman la solución
• Diagrama de despliegue.
• Trata aspectos de:
– Rendimiento
– Producción
– Tolerancia a fallas
– Disponibilidad
– Instalación
– Mantenimiento
Vista use case
• Describe la interacción entre los actores y el
sistema.
• Permite unir el resto de las vistas para
comprender el sistema.
• Incluye descripciones y diagramas de casos de
uso.
Discusión
¿Qué ocurre con las metodologías ágiles y
la arquitectura?
La Arquitectura y las metodologías ágiles
Lecturas
• The software architecture role in agile
methodologies.
¿Cómo describimos una Arquitectura de SW?

1. blueprints (planos) de un sistema de SW


a. Componentes
b. Conexiones
c. Interacciones
2. Descripciones informales
a. Cajas y líneas
b. Prosa
3. Vocabulario semánticamente rico
– Ejemplos: Remote procedure calls (RPCs), Client-Server,
Pipe and Filter, Layered, Distributed, Object-Oriented
Ejemplo de Definición de Arquitectura formal

• Dado un conjunto de requerimientos


primarios
Ejemplo de Definición de Arquitectura formal

• Identificación de requerimientos funcionales y


de calidad de servicio (QoS)
Ejemplo de Definición de Arquitectura formal

• Identificación de supuestos, riesgos y


restricciones
Ejemplo de Definición de Arquitectura formal

• Identificación de Actores y Casos de Uso


primarios
Ejemplo de Definición de Arquitectura formal

• Arquitectura Lógica. Identificación de tiers


lógicos, subsistemas y paquetes
Ejemplo de Definición de Arquitectura formal

• Diseño de Arquitectura Runtime. Diagrama de


Despliegue.
Ejemplo de Definición de Arquitectura formal

• Plataforma Tecnológica. Definición de la


matriz tecnológica de layers y tiers
¿Qué otros elementos se pueden definir?
Discusión
¿En todos los casos hay que documentar
la arquitectura de forma completa?
Ejercicio
• Definir los principales componentes de un
sistema X (Capas del sistema).
• Tecnologías elegidas para hacer frente a cada
capa y la motivación detrás de estas opciones.
• Definir la forma en que se conectara con
elementos externos si es el caso.
Lecturas
• Especificación de Arquitectura de Software
• http://jiturbide.blogspot.com.ar/2009/12/especificacion-de-
arquitectura.html
Leer opcional: UML
• Application architecture essentials, Part 1: Everything you need
to know about requirements modeling
http://www.ibm.com/developerworks/library/ar-
apparch1/index.html
• http://www.omg.org/gettingstarted/what_is_uml.htm
• http://www.ibm.com/developerworks/rational/library/769.html
• http://www.cragsystems.co.uk/ITMUML/
• http://en.wikipedia.org/wiki/Unified_Modeling_Language
• http://devmentor.org/references/uml/uml.html

También podría gustarte