13 May
Definiciones de Arquitectura de Software
G. Booch: «La arquitectura representa las decisiones de diseño importantes que forman un sistema; lo significante se mide con el costo del cambio.»
T. Gilb: «La arquitectura es una hipótesis que necesita ser probada por la implementación y las medidas.»
R. Johnson: «La arquitectura son las decisiones que se desearían tener tempranamente en un proyecto, no necesariamente acertar con ellas más que con otras.»
IEEE: «La arquitectura se define por la práctica recomendada como la organización fundamental de un sistema, formado por sus componentes, las relaciones entre ellos, y el ambiente, y los principios que gobiernan su diseño y evolución.»
«Define componentes organizados que permitan satisfacer requisitos funcionales del cliente. Establece las relaciones de comunicación entre componentes.»
L. Bass: «La arquitectura de software de un programa es la estructura del sistema; comprende elementos de software, las propiedades visibles externamente de tales elementos y sus relaciones.»
Conceptos Clave de Arquitectura
Arquitectura: Define la estructura, los requisitos funcionales (RF) y no funcionales (RNF) (restricciones técnicas, de negocio, atributos de calidad), y la abstracción del sistema. Incluye diferentes vistas (lógica, desarrollo, física, proceso).
El Arquitecto de Software
Arquitecto de software: Administra el riesgo, conoce la tecnología, posee excelentes habilidades de diseño, actúa como interfaz con el cliente y el equipo técnico, promueve buenas prácticas de desarrollo, y es un puente de comunicación entre los equipos de desarrollo.
Atributos de Calidad
Los atributos de calidad son características no funcionales que describen cómo se comporta el sistema. Incluyen:
- Rendimiento (Performance)
- Confiabilidad
- Escalabilidad
- Integrabilidad
- Portabilidad
- Soportabilidad
- Verificabilidad
- Seguridad
- Mantenibilidad
Detalle de Atributos de Calidad
Rendimiento (Performance): Se logra con pocos componentes, funcionalidades críticas en uno o dos componentes, disminuyendo la comunicación entre componentes, y bajo uso de la red en operaciones I/O.
Escalabilidad: Requiere componentes autocontenidos, componentes con bajo acoplamiento, y crecimiento horizontal.
Mantenibilidad: Permite ingresar nuevos requisitos funcionales (RF) sin afectar los existentes. Implica componentes reemplazables, autocontenidos, especificación detallada, y evitar datos compartidos.
Seguridad: Se aborda a nivel de usuario (autenticación, autorización, perfilamiento) y a nivel de datos (integridad, no repudio, encriptación).
Confiabilidad: Tiempo en que el sistema está disponible. Se mejora con componentes redundantes (configuraciones activo-activo / activo-pasivo), fácil migración entre componentes, y bajo acoplamiento.
Integrabilidad: Capacidad del sistema de integrarse a otros sistemas.
Portabilidad: Independencia de plataforma (a menudo difícil de lograr completamente).
Soportabilidad: Facilidad para la corrección de incidencias, manejo de logs, y documentación actualizada.
Verificabilidad: Capacidad del sistema de verificar su propio funcionamiento.
Fases de Definición de Arquitectura
Las fases típicas incluyen:
- Análisis del contexto (RF-RNF)
- Estructuración (Componentes, diagramas de bloques)
- Modelo de control (Interacción entre componentes)
- Descomposición modular
Modelos de Estructuración (Estilos Arquitectónicos)
Modelo Cliente-Servidor
Cliente: Proceso que solicita algo. Servidor: Proceso que responde algo. Satisfacen requisitos funcionales (RF).
- Ventajas: Distribuido y escalable.
- Desventajas: Administración de datos en cada servidor, rendimiento bajo (red), no hay registro centralizado de servicios.
SOA (Arquitectura Orientada a Servicios)
El cliente implementa la interfaz de usuario.
Servicios: Independientes, se comunican mediante protocolos, satisfacen requisitos funcionales (RF).
Transacciones: Formato (ej: Largo | servicioID | ST(ok, nk para respuesta) | datos). Para el inicio de servicio se usa ‘sinit’.
Modelo de Capas
Cada capa tiene una interfaz (conjunto de métodos y funciones que definen cómo interactúan distintos componentes) claramente definida y aporta algo al procesamiento de la transacción. Permite el desarrollo independiente de capas.
- Ventajas: Desarrollo incremental, flexible, mantenible.
- Desventajas: Difícil estructuración, dependencias cruzadas, bajo rendimiento, componentes ‘fantasma’.
Modelo Repositorio
Gestión centralizada de datos, almacenamiento centralizado. Puede ser pasivo (las aplicaciones consultan al repositorio; los datos requieren ser consultados en el servidor para cambiar) o proactivo (los datos se gestionan constantemente en el repositorio).
- Ventajas: Seguridad, escalabilidad, mantenibilidad, administración centralizada de datos.
- Desventajas: Difícil cambio del modelo de datos, política centralizada de administración, punto único de falla.
Objetos Distribuidos
Objetos: Encapsulan datos y funcionalidades, proveen y reciben servicios. Al enviarse, deben ser serializados. Están distribuidos en distintos nodos de la red. Interactúan a través del ORB (middleware que facilita la comunicación; los objetos invocan métodos de otros objetos a través de este. Maneja la localización de objetos, la comunicación de mensajes y la gestión de invocaciones remotas).
- Ventajas: Flexible, fácil agregar objetos, configuración dinámica, escalabilidad, mantenibilidad.
- Desventajas: Compleja construcción, bajo rendimiento.
Arquitectura Cloud
Externalización de servicios computacionales (IaaS, PaaS, SaaS).
- Ventajas: Servicios ubicuos (disponibles en cualquier parte), reducción de costo (no siempre), disponibilidad, escalabilidad, elasticidad, flexibilidad, movilidad.
- Desventajas: Dependencia de un ente externo (en seguridad, confidencialidad, conectividad).
Deja un comentario