Entender el dominio de una evaluación de arquitectura es un asunto que, en mi experiencia, ha mostrado ser vital para poder convencer a quienes puedan verse interesados en este tipo de iniciativas. Para esta reflexión acerca del dominio he preparado un modelo de dominio que presento con un diagrama de clases UML. He utilizado la convención tradicional de describir las relaciones entre las entidades de tal manera que se lean en voz activa de izquierda a derecha y de arriba hacia abajo.

El modelo que propongo está lejos de ser una revisión exhaustiva del dominio de las evaluaciones de arquitectura de software. Mi objetivo ha sido capturar los elementos esenciales a la vez que este sea simple y útil para la discusión. En la búsqueda de la simplicidad, también he anotado la multiplicidad en los extremos de las entidades solo en aquellos casos me han parecido más importantes de destacar.
Los stakeholders (no confundir con usuarios de un sistema de software) muestran interés en el proyecto y producto. También tienen potencial poder de influir las decisiones que se tomen respecto de estos. El interés e influencia lo materializan por medio de preocupaciones. «En caso alguno podemos permitirnos que se filtren datos privados de los usuarios» es un ejemplo de una preocupación que puede venir de un abogado o una ingeniera en seguridad.
Las preocupaciones son reflejadas en escenarios, es decir, son los stakeholders quienes crean estos escenarios que luego serán registrados de alguna manera. A su vez, los escenarios dan soporte a los objetivos del negocio, o de la misión. Así, por ejemplo, el escenario «el tiempo de generación de las liquidaciones de sueldo para 2000 trabajadores debe ser menor a 10 minutos» soportará un objetivo como «aumentar participación en el mercado de nuestro sistema de remuneraciones».
Los escenarios también son operacionalizaciones para los atributos de calidad. Los atributos de calidad corresponden a conceptualizaciones, es decir, definiciones para conceptos que se han establecidos como factores de calidad en productos de software. La operacionalización es de vital importancia en las evaluaciones de arquitectura de software y también en la ingeniería de software porque son estas las que nos permiten verificar si se ha alcanzado el nivel esperado del atributo de calidad. El nivel esperado del atributo de calidad puede estar expresado en el escenario, como también por medio de un requisito de atributo de calidad. Podríamos argumentar con facilidad que los escenarios son una más de las posibles formas de expresar estos niveles esperados por lo que en la práctica podemos prescindir de la especificación formal como requisito si es que se nos permite.
Los atributos de calidad son impactados por las decisiones arquitecturales. Esta es una buena heurística para sospechar cuándo una decisión es arquitectural y cuándo no. Por ejemplo, usar colecciones en Java en reemplazo de arreglos será, probablemente en una gran mayoría de casos, una decisión de diseño que no tendrá mayor impacto en los atributos de calidad y puede, por tanto, ser considerada como decisión no arquitectural. Lo que es importante de reconocer de estos impactos es que no siempre son negativos y no siempre son positivos: de hecho, una decisión arquitectural podría afectar negativamente a un atributo (por ejemplo, usabilidad) a la vez que beneficia a otro (por ejemplo, confidencialidad). Así también, las decisiones arquitecturales las tomaremos con el objetivo de tratar de alcanzar requisitos de atributos de calidad. Definiciones y descripciones de atributos de calidad pueden ser encontrados en bibliotecas de atributos de calidad (sugiero revisar [1] y [2]).
Para evaluar una arquitectura necesitamos, ya sea con mayor o menor nivel de acabado, una representación de la arquitectura. Esta representación no solo va a describir la arquitectura sino también expresará de alguna manera las decisiones arquitecturales que componen a esta arquitectura y que impactan los atributos de calidad. Usemos UML, algún ADL o diagramas ad-hoc, lo importante para una evaluación es reconocer que la representación va a describir tanto la arquitectura como las decisiones ya que estas últimas son las que componen el producto de trabajo que llamaremos arquitectura de software.
He dejado para el final de esta columna la que es probablemente la relación más importante en este dominio: la arquitectura de software determina los atributos de calidad. Este consenso tanto de la academia como de la industria es el que sustenta la necesidad de las evaluaciones de arquitectura: evaluamos una arquitectura porque sabemos que una arquitectura no apropiada tendrá un efecto adverso no despreciable en los atributos de calidad.
Al llegar a este punto, comprender el beneficio de una evaluación de arquitectura debiera ser transparente y directo. Usaremos estas instancias para determinar qué tan probable es que nuestro sistema de software alcance los niveles de calidad esperados así como también usaremos el resultado de las evaluaciones para definir líneas de acción concretas que nos permitan corregir, tempranamente, asuntos que pueda dificultar o inhibir alcanzar los requisitos de nuestro sistema.
[1] «Software Architecture in Practice», Bass et al. Addison-Wesley, 3a edición, 2012.
[2] “Evaluating Software Architectures: Methods and Case Studies”, Clements et al. Addison-Wesley, 2002.