jueves, 4 de febrero de 2010

Arquitectura de Software. Definiciones

El término "Arquitectura de software" esta ampliamente difundido pero no siempre correctamente definido. Lo mismo sucede con muchos otros términos asociados a la arquitectura de software. Aquí se presentan algunas definiciones de estos términos a fin de aclarar un poco el panorama:
Según IEEE 1471:

Arquitectura: Es la organización fundamental de un sistema comprendido en sus componentes, en las relaciones entre ellos y con el ambiente, y los principio que guían su diseño y evolución.

Descripcion de arquitectura: Es un conjunto de productos que documentan la arquitectura.

Vista de arquitectura: Es la representación de un sistema o parte de un sistema desde una perspectiva en particular.

"Viewpoint" arquitectural: Es un template que describe como crear y usar una vista de arquitectura. Una vista es el resultado de aplicar una viewpoint a un sistema en particular.

System Architecture: Es un conjunto de entidades, sus propiedades y relaciones entre ellas, que definen la estructura de un sistema.

Software Architecture: Es un conjunto de componentes de software, subsistemas, relaciones, interacciones y propiedades de cada uno de estos elementos, y un conjunto de principios que constituyen las propiedades y limitaciones fundamentales de un sistema de software.

Software architecting: Refiere al análisis, diseño, documentación, revisión, aprobación, y otras actividades relacionadas con la definición y management de una arquitectura de software.

Arquitectura de Referencia: Refiere a una definición de una arquitectura para un dominio en particular. Describe en alto nivel un conjunto de elementos involucrados en aplicaciones pertenecientes al dominio. Estos elementos deben intencionalmente ser dejados en alto nivel para poder aplicar a un gran número de sistemas. Las arquitecturas de referencia ahorran mucho tiempo de trabajo de arquitectos de software durante el diseño de una nueva aplicación del mismo dominio, además de proveer un lenguaje común entre arquitectos y desarrolladores, lo cual facilita la comunicación.

Atributos de la arquitectura de software.
  • Cultural adaptability: Soporte a múltiples lenguajes y culturas

  • Security: Previene accesos no autorizados

  • Data integrity: El sistema no corrompe datos ni suministra datos inconsistentes.

  • Maintainability:
    • Portability: ¿Puede el software ser portado a otras plataformas?
    • Changeability: Habilidad para agregar nuevas funciones y modificar funcionalidad existente
      • Fragility: pequeños cambios tienden a romper funcionalidad existentes
      • Rigidity: el software es difícil de modificar incluso cambios simples.
      • Duplication: el software con duplicación es mas difícil de mantener porque es grande y porque el cambio no es localizado.
    • Understandability: ¿Puede el software ser entendido de manera que sea facil realizar cambios?
    • Debugging: ¿El software soporta debugging?

  • Testability: ¿El software puede ser testeado eficientemente?

  • Usability: Es la medida de eficacia para la interface humana del software

  • Operational:
    • Availability: Porcentaje de tiempo en el que el sistema esta funcionando.
    • Manageability: Habilidad para inspeccionar y manejar componentes en ejecución
    • Upgradeability: ¿Puede el software ser actualizado mientras ejecuta?
    • Reliability: Habilidad para ejecutar funciones requeridas en un periodo de tiempo especificado.
    • Recoverability: Tiempo requerido para recuperarse de una falla.

  • Performance
    • Response: ¿Es la respuesta suficientemente rápida para escenarios de uso normal y extremo?
    • Scalability: La capacidad del sistema puede ser incrementada si es necesario?
    • Capacity/Throughput: Manejar grandes cargas y aún mantener la respuesta

  • Safety: El sistema no crea riesgos en el mundo real.