Experimentos en Arquitectura de Software

Definición

Muchas de las decisiones que se toman en una arquitectura usualmente requieren ser verificadas por un criterio más formal que la experiencia de un arquitecto o el posicionamiento de un patrón de diseño. En estos casos, no es necesario construir el software para validar tales decisiones de diseño pues esto implica un riesgo muy alto para el proyecto. Por el contrario, construimos experimentos.

Hay que tener cuidado con confundir la palabra experimento con prototipo. Por un lado, un experimento es una actividad planeada que sigue el método científico. Es decir, busca validar o refutar una hipótesis bien definida. En nuestro caso particular, una hipótesis sobre una decisión en la arquitectura de un sistema. Un prototipo en cambio no define una hipótesis. Los prototipos son piezas que se construyen generalmente sin una estructura definida y con un comportamiento funcional impredecible. Buscan explorar ideas y generalmente son usados para hacer tangible el alcance de una pieza de software. Claro está, la experimentación puede incluir la construcción de prototipos, pero se usa en el sentido de obtener información de estos elementos para resolver una hipótesis sobre la arquitectura de un sistema.

Existen varias razones por las cuales hacemos experimentos sobre nuestra arquitectura de software:

  1. Comprender el impacto que tienen algunos detalles sobre la arquitectura de un sistema.
  2. Validar precondiciones de los requerimientos o de los patrones de diseño utilizados en la arquitectura.
  3. Explorar otros estilos arquitecturales.
  4. Validar propiedades de elementos de software que no pueden ser conocidas o validadas hasta que son probados en ambientes reales.
  5. Verificar las propiedades de componentes desarrollados por terceros.

Resumiendo lo anterior, hacer experimentos en arquitectura de software significa construir modelos o prototipos ejecutables pequeños para verificar decisiones de diseño y conceptos técnicos relacionados. Así pues, hacer experimentos puede implicar lo siguiente:

  1. Escribir software.
  2. Composición de elementos de hardware.
  3. Adquisición, prueba y análisis de componentes tanto de software como de hardware.
  4. Investigación de criterios de diseño y representaciones diferentes de la información.
  5. Interactuar de nuevo con stakeholders para revisar los motivadores arquitecturales.

Planeación y Ejecución de Experimentos

Aunque existe mucha información desconocida asociada a cada experimento, es importante planear las actividades que se llevarán a cabo durante los experimentos y así asegurarnos que los problemas que estamos tratando de resolver sean resueltos. Existen tres fases fundamentales en la experimentación.

Pre-experimentación

En esta fase se realiza la planeación del experimento. Es imperativo tener claro lo siguiente:

  1. Problemática: Se formula una hipótesis en busca de resolver o poner a prueba la situación expuesta en el enunciado del experimento.
  2. Objetivo del experimento: Poner a prueba la hipótesis planteada en la arquitectura propuesta como solución al proyecto.
  3. Descripción del experimento: Actividades a realizar, y datos a recoger.
  4. Artefactos a construir: Cualquier elemento de software que se construya y/o se utilice.
  5. Recursos de la experimentación: Especificaciones, de hardware y software, con las que se va a desarrollar el experimento.
  6. Resultados esperados: Describir el comportamiento de implementación parcial de la arquitectura propuesta.
  7. Duración y etapas: Planear y definir los entregables de cada etapa, con sus respectivos tiempos de desarrollo teóricos, del proceso de experimentación.

Experimentación

Ejecución de las actividades planeadas en la fase de conceptualización y planeación del experimento. En esta fase es preciso tomar todas las evidencias necesarias para poder llevar a cabo las actividades posteriores de análisis de resultados.

Post-experimentación

En esta fase se realiza el análisis del experimento. Es imperativo tener claro lo siguiente:

  1. Resultados obtenidos.
  2. Duración real: Realizar una comparación con los tiempos teóricos y los reales de desarrollo para cada etapa del proceso de experimentación.
  3. Artefactos construidos: Cuáles artefactos fueron construidos y cuáles no, explicando las causas por las que no fueron desarrollados.
  4. Análisis: Interpreta, explica y justifica los resultados obtenidos basado en patrones y tácticas arquitecturales implementadas en el experimento.
  5. Conclusiones: Teniendo en cuenta la hipótesis, plantea recomendaciones basadas en los resultados obtenidos en la etapa de experimentación.

A continuación se relacionan los experimentos que deben ser ejecutados en el contexto del proyecto del curso:

  1. Experimento 1
  2. Experimento 2

Bibliografía

  • “Architecting Softare Intensive Systems: A practicioner’s guide”, Anthony Lattanze, CRC Press, 2009.