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