Tuvimos una plática con Agustín Ramos acerca de la arquitectura de software y lo que debes aprender para practicarla. Este pequeño artículo incluye nuestro resumen y las recomendaciones de Agustín.
¿Qué es la arquitectura de software?
La arquitectura del software incluye el diseño del sistema a alto nivel: la descomposición del sistema en módulos, la descripción de las responsabilidades de cada uno y sus relaciones.
También incluye las prácticas y herramientas que permitirán que el proyecto cumpla con los atributos de calidad o requerimientos no funcionales.
Todo lo anterior está basado en un análisis de las funciones y atributos de calidad del sistema.
El proceso
En la plática tocamos 5 etapas del desarrollo de una arquitectura:
-
Descubrimiento y definición de los atributos de calidad. Básicamente consiste en entender el problema, escuchar a todos los involucrados en el proyecto y definir los atributos del software que no están directamente relacionados con la funcionalidad, pero que debe de cumplir.
-
Diseño del sistema. Generalmente te ayudarás de estilos de arquitectura y patrones de diseño para llegar a los objetivos funcionales y no funcionales.
-
Validación del diseño. Mediante la creación de prototipos se puede validar que las asunciones principales acerca del diseño y su relación con los atributos de calidad se cumplen. Esto puede derivar en cambios sobre el diseño que lo mejoren.
-
Comunicación del diseño. Después de definir la arquitectura es importante comunicar el diseño al equipo mediante un exposición directa y la documentación. Esta documentación debe incluir la mayor información posible sobre la razón de las decisiones y la evolución de la arquitectura.
-
Seguimiento del diseño. Esto incluye varias cosas:
- Verificación de que el equipo está siguiendo el diseño. Esto se logra con revisiones constantes con el equipo: programación en parejas y revisión de código.
- El diseño nunca está está escrito en piedra. Después de las revisiones de código se descubrirán cosas que no están funcionando como se esperaba, por lo que será necesario modificar el diseño y dejar registro de los cambios y las decisiones tomadas.
Consejos específicos
Los arquitectos de software deben encontrar la solución más simple posible porque si no va a ser rígida.
Acerca de la documentación, Agustín recomienda, exponerla al equipo en una junta y hacer un video de esto, que se le pase a cada integrante del equipo. Se puede seguir el marco llamado “Arquitectura 4 + 1” que se compone de:
- Vista de Componentes
- Vista de Desarrollo
- Vista de Procesos
- Vista Física
- Vista de Casos (Este es el +1)
Además, tenemos que mantener una bitácora de los cambios y los factores que los impulsaron, esto puede ser mediante los Architectural Decision Records.
Cómo empezar
Agustín nos recomendó algunos recursos para que empieces a aprender:
- Object Design - Rebecca Wirfs-Brock
- Software Architecture in Practice
- Como alternativa al libro anterior se recomienda Technical Report sobre arquitectura del Software Engineering Institute, encontré varios, tienes un ejemplo aquí.
- Design it! - Micheal Keeling
- La serie Pattern-orinted Software Architecture
Para aprender patrones de diseño se habló de los siguientes libros:
- Patrones de Diseño - Erich Gamma, et Al.
- The patterns handbook
- La serie Pattern language of program design (5 libros)
Y entre los libros que se mencionan como la fuente de las ideas de patrones y diseño:
- The nature of order de Christopher Alexander y los otros libros de él como A timeless way of building
- The art of Scalability
El capítulo
De todos modos no te pierdas el capítulo, que estuvo muy bueno:
Comentar