Designing Software Architectures: A Practical Approach

Publicado en

En esta ocasión tengo el gusto de compartir con ustedes la noticia de la reciente publicación del libro que escribí junto con mi colega Rick Kazman quien es investigador en el Software Engineering Institute (SEI). Nuestro libro lleva por título “Designing Software Architectures - A Practical Approach” (Diseñando Arquitecturas de Software - Un Enfoque Práctico) y fue publicado por la editorial Addison Wesley en la colección “SEI Series in Software Engineering”.

PortadaLibro.jpg

Nuestro libro se enfoca en el método de Diseño Guiado por Atributos (Attribute-Driven Design), o ADD; un método de diseño de arquitecturas originalmente creado por el Software Engineering Institute y del cual hablé en la columna “Diseño de la Arquitectura”, en SG 29. A pesar de que ADD ha existido por más de una década, se ha escrito relativamente poco al respecto y es difícil encontrar ejemplos de cómo llevarlo a cabo. Esta falta de información ha complicado su adopción y enseñanza. Además, la información que se ha publicado acerca de ADD tiende a ser un tanto abstracta y puede ser difícil conectarla con los conceptos, prácticas y tecnologías que los arquitectos usan en sus actividades cotidianas.

Rick y yo hemos guiado a arquitectos de software durante años en la realización del proceso de diseño y, al mismo tiempo, hemos estado aprendiendo de ellos; por ejemplo, que en la práctica los arquitectos consideran la tecnología de forma temprana en el proceso de diseño y esto es algo que no era parte de la versión original de ADD. Por tal razón, el método original parecía “desconectado” de la realidad para la gente de la industria. En este libro presentamos una versión revisada de ADD en la cual hemos tratado de reducir la brecha entre la teoría y la práctica.

Durante varios años, hemos estado también enseñando arquitectura de software y la manera en que se realiza el diseño de la misma. Nos hemos dado cuenta que a la gente que no tiene experiencia le es muy difícil diseñar arquitecturas. Este entendimiento nos empujó a crear una “hoja de ruta” que creemos será útil para guiar en la realización del proceso de diseño. También creamos un juego que es útil para enseñar acerca del diseño de arquitecturas, y que se puede considerar como un complemento al libro (ver “Smart Decisions: Un juego para aprender Arquitectura y Big Data” en SG 49).

Nuestro libro está dirigido a cualquier persona que esté interesada en el diseño de arquitecturas de software. Creemos que será particularmente útil para los practicantes que deben realizar esta tarea, pero que actualmente la realizan de forma ad hoc. Los practicantes con experiencia que ya realizan el diseño siguiendo un método establecido también encontrarán nuevas ideas, por ejemplo, cómo dar seguimiento al proceso de diseño usando un tablero Kanban o cómo analizar el diseño usando cuestionarios basados en tácticas. Por último, la gente que está familiarizada con otros métodos del Software Engineering Institute encontrarán información acerca de la manera de combinar ADD con métodos tales como el taller de atributos de calidad QAW, el método de análisis de compromisos arquitectónicos ATAM (ver SG 31) y el método de análisis de costos beneficios CBAM.

Este libro también será útil para estudiantes y profesores de programas de ciencias de la computación o de ingeniería de software. Creemos que los casos de estudio que describimos ayudarán a entender a través de ejemplos la manera de realizar el proceso de diseño más fácilmente. Como dijo Einstein: “El ejemplo no es otra manera de enseñar, es la única manera de enseñar”.

Esperamos que nuestro libro permita entender que el diseño puede realizarse siguiendo un método y que el hacerlo de esta manera es de gran ayuda para producir mejores sistemas de software.

Su estructura es de la siguiente manera siguiente:

  • En el capítulo 1 presentamos una introducción breve del concepto de arquitectura de software y del método ADD.

  • En el capítulo 2 discutimos acerca del diseño de arquitecturas de manera más detallada, junto con las entradas principales al proceso de diseño a las cuales llamamos los drivers de la arquitectura. Además, hablamos de los conceptos de diseño que son ‘bloques de construcción’ a partir de los cuales se construye la arquitectura y que permiten satisfacer estos drivers usando soluciones probadas.

  • El capítulo 3 presenta el método ADD de forma detallada. Presentamos cada uno de los pasos del método junto con varias técnicas que pueden ser usadas para llevar a cabo estos pasos de manera adecuada.

  • El capítulo 4 presenta un primer caso de estudio que ilustra el desarrollo de un sistema “desde cero”. Para este caso de estudio, hemos hecho un esfuerzo por mostrar la manera en que la mayoría de los conceptos descritos en el capítulo 3 son usados en el proceso de diseño, así que este caso de estudio tiene una naturaleza más “académica” (aunque se deriva de un sistema del mundo real).

  • El capítulo 5 presenta un segundo caso de estudio que escribimos junto con arquitectos de software expertos en big data y, por ello, tiene muchos más detalles técnicos que el anterior. Este caso de estudio describe los detalles finos de cómo usar ADD en el diseño de un sistema de big data que involucra diversas tecnologías. Este ejemplo ilustra también lo que consideramos un diseño en un dominio “novedoso”, a diferencia del dominio más tradicional usado en el capítulo 4.

  • El capítulo 6 es un caso de estudio más corto que describe el uso a ADD para realizar la extensión de un sistema legado, lo cual es una situación común en la práctica. Este ejemplo demuestra que el diseño arquitectural no es algo que se realice una sola vez, al inicio del desarrollo del sistema, sino que más bien es una actividad que puede ser realizada en distintos momentos del proceso de desarrollo.

  • El capítulo 7 presenta otros métodos de diseño. En nuestra revisión de ADD, adoptamos ideas de otros autores que también han investigado el proceso de diseño y aquí resumimos brevemente sus enfoques como un homenaje a sus propuestas y como una comparativa de ADD a estos métodos.

  • El capítulo 8 discute acerca del tema del análisis de forma detallada. Aún si el tema principal de este libro es el diseño, el análisis se realiza naturalmente como parte del mismo, así que aquí describimos técnicas de análisis que pueden ser usadas durante el proceso de diseño o después de que una parte del diseño ha sido completada. En particular, describimos el uso de cuestionarios basados en tácticas, los cuales son útiles para entender de forma simple y rápida las decisiones que se realizan durante el proceso de diseño.

  • El capítulo 9 describe la manera en que el proceso de diseño embona a nivel organizacional. Por ejemplo, es posible realizar cierta cantidad de diseño en los momentos más tempranos del ciclo de vida con el fin de realizar la estimación del proyecto (ver “Arquitectura y Preventa” en SG 46). Mostramos también cómo ADD puede ser usado con distintos enfoques de desarrollo, como por ejemplo, con las metodologías ágiles o con métodos más establecidos como el Team Software Process (TSP).

  • El capítulo 10 concluye el libro.

Incluímos también dos apéndices. El A presenta un “catálogo de conceptos de diseño” que, como su nombre indica, es un catálogo de distintos tipos de conceptos de diseño que pueden ser usados para un dominio aplicativo particular (ver “Conceptos de Diseño: Patrones, Tácticas y Frameworks” en SG 38). Este catálogo presenta conceptos de diseño que recopilamos de distintas fuentes y refleja la manera en que los arquitectos con experiencia trabajan en el mundo real. En este caso, el catálogo contiene una muestra de conceptos de diseño usados en el caso de estudio presentado en el capítulo 4. El apéndice B provee un conjunto de cuestionarios basados en tácticas para los siete atributos de calidad más comunes, así como un cuestionario adicional para DevOps.

Conclusión

Debo decir que me llena de orgullo el haber escrito un libro para la prestigiosa colección editorial del Software Engineering Institute que, además, es el nuevo material de referencia para el curso “Software Architecture Design and Analysis” que se imparte en el SEI. Espero que sea de mucha utilidad para la comunidad de desarrollo en México y en el resto del mundo.

Quiero aprovechar para agradecer a Pedro Galván y su equipo por la oportunidad que me han dado a lo largo de estos años de escribir esta columna de arquitectura de software. Como se puede apreciar en las distintas referencias que hice a números pasados de la revista, muchos de los temas desarrollados de forma detallada en el libro han sido presentados de forma resumida a lo largo de los años en esta columna.

Para terminar, incluyo una liga en donde se puede adquirir el libro: https://goo.gl/Wd01TL

 

Bio

El Dr. Humberto Cervantes es profesor-investigador en la UAM-Iztapalapa. Además de realizar docencia e investigación dentro de la academia en temas relacionados con arquitectura de software, realiza consultoría y tiene experiencia en la implantación de métodos de arquitectura dentro de la industria. Ha recibido diversos cursos de especialización en el tema de arquitectura de software en el SEI, y está certificado como ATAM Evaluator y Software Architecture Professional por parte del mismo. (www.humbertocervantes.net)