Tal como mencioné en el post anterior hoy comenzaré con un acercamiento al tema Arquitectura de software. Como introducción voy a compartir una definición de arquitectura, siguiendo por cual es su propósito, quienes la influencian y finalmente el rol del arquitecto.
Tiempo de lectura estimado: 5-6 minutos.
Una de las definiciones modernas de arquitectura de software y que a mi entender es simple y clara es la del Software Engineering Institute (SEI) de la Universidad de Carnegie-Mellon “...es la
estructura o estructuras del sistema, que comprende elementos de
software, las propiedades visibles externamente de dichos elementos y la
relación entre ellos”, basada en el libro Software Architecture in Practice.
Desde
una visión no tan conceptual, se puede decir que la arquitectura es
estructura y comportamiento, se enfoca en elementos significativos o relevantes, se
presenta a un alto nivel de abstracción, está presente en cualquier
sistema y balancea necesidades de los involucrados.
Su propósito
es comprender el sistema y
organizar el desarrollo, fomentar la reutilización de componentes y facilitar la
evolución del sistema
Generalmente, la arquitectura se ve influenciada por distintos factores que afectan significativamente tanto su definición como su mantenimiento, algunos de ellos se pueden clasificar en:
- los stakeholders (involucrados)
- la organización que desarrolla el sistema
- el ambiente tecnológico
- la experiencia del arquitecto
El Arquitecto debería gestionar estas influencias sobre la determinación de la arquitectura y debería crear la arquitectura junto con otros stakeholders que tienen ciertos requerimientos, objetivos, intenciones y aspiraciones. Es el arquitecto quien tiene la responsabilidad de emitir juicio y tomar decisiones de compromiso en estos aspectos.
Vale la pena detenerse en el concepto de stakeholders y en la definición de los escenarios de arquitectura, dos temas relevantes para lo que será el proceso de definición de la arquitectura.
En cuanto a los stakeholders, es muy importante su detección e identificación temprana, así como su clasificación para luego realizar el seguimiento adecuado de sus concerns (requerimientos, intereses y necesidades).
Es
fundamental mantener a los stakeholders informados y comprometidos,
pero es necesario hacerse algunas preguntas al respecto para determinar
correctamente a quienes informar y comprometer.
- A quien queremos mantener Informado... ¿tiene la información, experiencia y comprensión para tomar las decisiones correctas?
- A quien queremos mantener Comprometido... ¿está disponible para participar y preparado para tomar decisiones?
Incluso con estas preguntas aún no es suficiente, estas personas o instituciones también deben estar autorizadas y ser representativas...
- A quien queremos mantener Autorizado... ¿es seguro que las decisiones que tome no serán modificadas (al menos potencialmente con un alto costo)?
- Quien debiera ser Representativo... si es un grupo y no un individuo, ¿es una muestra representativa?, ¿cada uno de ellos cumple con los criterios anteriores?
Este tipo de preguntas nos ayudan a conocer un poco más a los stakeholders y poder actuar en base a ello.
En cuanto a los escenarios,
como definición podemos decir que un escenario arquitectural es una
descripción concisa de una situación que el sistema enfrentará en el
ambiente de producción, junto con una definición de la respuesta
esperada de éste.
Los escenarios podemos dividirlos en dos grupos:
- Funcionales :: secuencia de eventos externos a los cuales el sistema debe responder (normalmente derivado de los casos de uso)
- No Funcionales o de Calidad :: cómo el sistema debe reaccionar a un cambio en un ambiente de forma tal de exhibir una o más propiedades de calidad.
- Proveer información a la definición de la arquitectura
- Evaluar la arquitectura
- Comunicarse con stakeholders
- Encontrar requerimientos faltantes
- Guiar el proceso de pruebas
Para ir terminando con este primer acercamiento a la Arquitectura de Software, hay algunos puntos importantes a tener en cuenta respecto al Rol del Arquitecto que me gustaría mencionar:
- Debe ser formador de opinión
- Debe proporcionar la visión, orientación y experiencia que permita a otros hacer realidad esa visión
- Necesita comprender los aspectos técnicos y de negocio de un proyecto para comprometerse con la mejor solución
- Debe ser flexible para incorporar opiniones útiles de desarrolladores y otros involucrados
- Debe dirigir y coordinar las actividades y los artefactos técnicos durante el proyecto
Espero les resulte interesante la temática y les aporte en algo... como dije al comienzo, la idea es compartir, difundir y discutir, así que si tienen opiniones y experiencias para plantear, sería interesante que dejaran un comentario al respecto.
La próxima semana estaré tratando cómo debería ser un Proceso de definición de la arquitectura y sobre los Atributos de calidad de la Arquitectura.
¡Hasta la próxima!
No hay comentarios:
Publicar un comentario