TDDeando la arquitectura

El viernes pasado estuve dando una charla titulada así en el contexto del meetup online de ArqConf.

Había más de 370 registrados pero como suele ocurrir con los meetups gratuitos, rara vez se llega al 50 %. Cuando comencé a hablar había alrededor de 120 personas y me consta que luego se fueron sumando más pero no tengo presente cuántos.

Dado que la charla trataría sobre TDD, comencé haciendo una breve encuesta a los presentes sobre su conocimiento de TDD. Si bien más del 90 % conocía TDD, tan solo el ~17 % dijo utilizarlo a diario. Personalmente no me sorprende, porque según estudios formales que hemos realizado en los últimos años, el uso consistente de TDD ronda el 20%.

La presentación fue grabada y está disponible en YouTube y los slides están disponibles aquí.

Estos son algunos de los libros en los que me basé para armar la charla:

  • Growing object-oriented software guided by tests, de Freeman
  • Designing Software Architectures: A Practical Approach, de Cervantes y Kazman
  • Just Enough Software Architecture: A Risk-driven Approach, de Fairbanks
  • Building Evolutionary Architectures: Support Constant Change, de Ford
  • Specification by example, de Adzic

Agradezco a Gus Brey y demás organizadores por la invitación.

Próximas charlas sobre TDD

En las próxima semanas voy a estar participando de eventos virtuales con dos nuevas charlas sobre TDD que vengo trabajando desde hace un tiempo. Aún no tengo confirmadas la fechas (en cuanto las tenga las compartiré en redes) pero igualmente comparto la temática de las mismas.

TDD al banquillo

Test-Driven Development (TDD) es una práctica creada por Kent Beck a finales de los 90. En 20 años ha cosechado varios practicantes, algunos «fanáticos» y algunos detractores. Definitivamente es una práctica muy conocida pero…¿cuan utilizada es? ¿cuanta gente usa TDD?.

Al mismo tiempo los practicantes de TDD hablan de un conjunto de beneficios que ellos mismo han obtenido, pero en términos formales/científicos ¿cuales son la mejoras que nos trae el uso de TDD?

TDD claramente impacta en la forma en que trabajamos, pero ¿tiene algún impacto en el resultado de nuestro trabajo? ¿el software resultante es «mayor calidad»?

TDD surgió en el contexto de Extreme Programming junto con otras prácticas como Integración Continua, Pair-Programming y Collective Ownership ¿es posible utilizar TDD en forma «aislada» sin incorporar estas otras prácticas? ¿Es igual de efectivo?¿Cuales serían los riesgos?

En la charla planeo recorrer todos estos interrogantes e intentaré darles respuestas desde la formalidad de varios estudios, libros y obviamente también con un condimento de experiencia personal. No es una charla introductoria a TDD en el sentido que no voy a detenerme a explicar en detalle cómo es la dinámica de TDD, creo que ya hay bastante de eso. La charla está dirigida a gente que ya conoce la propuesta de TDD independientemente de que la este usando o no.

TDDeando la arquitectura

Los cimientos de TDD se establecieron a finales de los años 90 en el contexto de Extreme Programming pero podríamos decir que, recién en 2002, Kent Beck formalizo la técnica en su libro Test-Driven Development by Example. En ese libro Kent explica la técnica y muestra ejemplos trabajando a nivel de prueba unitaria, haciendo TDD sobre clases. Sin embargo el mindset de TDD puede aplicarse a otros niveles de abstracción como el mismo Beck lo ha admitido. En esta charla veremos cómo utilizar TDD para guiar la construcción de una arquitectura en forma emergente. Esta charla no es charla introductoria a TDD, voy explicar muy brevemente la dinámica propuesta por TDD pero no será ese el foco. La charla está dirigida a gente que ya conoce la propuesta de TDD independientemente de que la este usando o no.

El mejor libro de arquitectura

La semana pasada terminé de leer el libro «Building Evolutionary Architectures» y me resultó posiblemente el mejor libro de arquitectura que lei en mi vida (y eso que he leído varios libros sobre el tema).

Compré el libro porque me atrapó el título y ya había leído otras cosas de los autores. El libro no delira con definiciones abstractas, es muy concreto y el planteo de «evolvability» como propiedad de la arquitectura me resultó muy novedoso y super apropiado en la actualidad. Si bien por momentos me hizo un poco de ruido el tono «grandilocuente» con el que se refiere a los arquitectos corporativos, finalmente me terminó convenciendo el lugar y las responsabilidades que les asigna (que lejos está de lo que suelo ver cotidianamente en la industria).

Algunos otros puntos que me parece vale la pena destacar son:

  • La idea de usar fitness functions para verificar el cumplimiento de ciertas propiedades de la arquitectura
  • ¡Habla de testing! Lo cual no es común en los libros de arquitectura
  • Trata diversas cuestiones de negocio/organización que no siempre están presenten en los libros de arquitectura. Entre estas cosas habla de la estructura de equipo.
  • Toma muy en cuenta la arquitectura física y el potencial acoplamiento que esta puede generar.
  • Cubre cuestiones tanto de green field projects como de brown field projects

Si tienen la oportunidad, bien merece dedicarle un tiempo.

Breve reseña de algunos libros de arquitectura

Hace un tiempo escribí una breve reseña sobre libros de patrones de diseño y en ese momento dudé de mencionar algunas libros que finalmente decidí dejar para incluirlos posteriormente en un post sobre libros de arquitectura. Llegó el momento.

Software Architecture in Practice

Este es un clásico, la primera edición data de fines de los 90′. Yo tengo la segunda edición que es del 2003 y hay también una tercera edición del 2012. Es un libro del Software Engineering Institute, un lugar de referencia en todo lo que tiene que ver con Ingeniería y Arquitectura de Software. No es un libro brillante pero sienta algunas bases. La primera parte de libro presenta conceptos y la segunda parte presenta casos. Es un libro bien conceptual, no se centra en tecnologías aunque obviamente hace alguna mención tecnológica cuando presenta los casos.

Designing Software Architectures

Este libro también es de la gente de SEI aunque me parece que es mucho menos conocido que el anterior, tal vez porque es más reciente, fue publicado en 2016. Este libro me resultó mucho más entretenido que el anterior, es más corto y está enfocado concretamente en cómo diseñar una arquitectura. Me gustó tanto el enfoque de Architectural Drivers que lo incluí en mi materia de FIUBA.

Patterns of Enterprise Application Architecture

A estas alturas este libro también se ha convertido en un clásico y me animo a decir que este libro en particular posiblemente sea uno de los libros de arquitectura de software más famosos actualmente.

Este libro fue escrito por Martin Fowler y fue publicado en 2002 dentro una serie de Addison-Wesley que lleva a firma del propio Fowler. Creo que casi todos los libros de esta serie están relacionados a cuestiones de arquitectura. Este libro lo leí en digital y hace tiempo que lo tengo anotado en lista de compra de libros físicos.

Beyond Software Architecture

Este libro también es de la serie Martin Fowler de Addison-Wesley, tal vez el menos famoso de esa serie, pero curiosamente es un libro muy interesante. Trata de cuestiones, que como su nombre lo indica exceden la idea tradicional de arquitectura pero que tienen una relación directa. Cuestiones tales como instalación, configuración, actualización, modelo de licenciamiento, etc.

Microsoft .NET: Architecting Applications for the Enterprise

Me compré este libro por uno de los autores: Dino Esposito. Ya había leído otros libros de él que me parecieron muy buenos y este no fue la excepción. A pesar de ser un libro centrado en tecnología .NET los temas están presentados de una forma tal que son fácilmente portables a otras tecnología. Al presentar un tema primero hay un capítulo que presenta el tema conceptualmente y a continuación en otro capítulo se centra en la implementación en tecnología .NET. en un primera parte el libro trata algunos temas conceptuales como SOLID y luego va analizando distintos patrones de arquitectura con bastante nivel de detalle. Cubre particularmente bien Domain Model, CQRS y Event Sourcing.

Just Enough Software Architecture

Este libro propone un enfoque de definición de arquitectura basado en riesgos que me resultó concreto y afín a mis propias ideas. A diferencia de otros libros de arquitectura que «le hablan al arquitecto», este libro «le habla a developers». El libro pone un foco importante en el modelado pero también toca de forma superficial algo de patrones.

Application Architecture Guide

Es es un libro gratuito (la versión digital) publicado por el grupo de Prácticas y Patrones de Microsoft.

Es básicamente un libro de patrones de arquitectura. Habla de atributos de calidad y propone un método para definir la arquitectura de un sistema. Resulta interesante que el libro contempla distintos tipos de arquetipos de aplicaciones: web, desktop, mobile, rich clients, etc. Más allá de que es un libro de Microsoft y que como tal tiene foco en su tecnología, creo que la mayor parte del contenido es agnóstico de tecnología. Es así que en mi materia de FIUBA leemos un par de capítulos.

Building Microservices

Este libro de Sam Newman ha cobrado mucha popularidad en los últimos años. Creo que es un libro muy interesante porque más allá de los conceptos de microservicios sirve también para entender un conjunto de técnicas y estrategias muy en moda en la actualidad, cuestiones tales como: Circuit breakers, Api Gateaways, Api Vesioning, etc.

Yo leí primeramente una versión preview de 3 capítulos que conseguí gratuitamente, con eso me bastó para decidir comprar el libro completo.

Building Evolutionary Architectures

Este libro aún lo estoy leyendo. Me parece muy bueno. La premisa central del libro es que la arquitectura de una aplicación no es estática, puede necesitar cambiar a lo largo del tiempo, pero independientemente de cómo evolucione hay ciertas propiedades que uno querrá asegurar que siempre se cumplan. En este sentido el libro analiza puntos fuertes y flojos de distintas arquitecturas y provee herramientas para facilitar la evolución de de una arquitectura.

He leído algunos libros más que podrían entrar en esta categoría de arquitectura pero estos son los que más me han gustado y me parece que merecían recomendación.

Meetup de arquitectura: academia meets community

El pasado jueves participé de una reunión del Meet up de Arquitectura de Software de Buenos Aires. La temática de la reunión fue: ¿Cómo tiene que ser una IDE para arquitectos?

El orador principal fue Victor Braverman, un reconocido investigador de la UBA.  La sesión comenzó con una exposición de Victor en la que presentó un trabajo desarrollado en conjunto con la gente de Epidata, una consultora Argentina especializada en Arquitectura de Software.  En forma resumida:

  • Victor y su equipo desarrollaron una herramienta para generar una representación visual de la arquitectura de una aplicación a partir del análisis automatizado del código fuente de la misma y de ciertas propiedades de runtime.
  • Luego utilizaron dicha herramienta en dos proyectos de Epidata y realizaron un serie de sesiones de trabajo con arquitectos de dichas aplicaciones para analizar lo generado por la herramienta
  • A lo largo de esas sesiones de trabajaro detectaron ciertas cuestiones en las que la herramienta agregaba valor

 

Luego de la exposición inicial se abrió la charla con la idea de que la audiencia diera su opinión sobre el tipo de funcionalidades / información que podría resultar útil que la aplicación ofreciera.

Lo presentado por Victor me pareció interesante al igual que lo surgido de la audiencia pero lo que más destaco es la iniciativa de este grupo de académicos de acercarse a la comunidad de práctica. No es raro ver a los académicos trabajando en conjunto con la industria, pero general esas interacciones con la industria son empresas, rara vez con las comunidades de práctica. Mis felicitaciones para Victor, su equipo y también para la gente de Epidata por esta iniciativa conjunta.

Para los interesados les dejo la grabación de la sesión que compartió  Pablo González (uno de los organizadores del Meetup)

Un caso real de conflicto entre atributos de calidad

Existe entre ciertos atributos de calidad una relación conflictiva. Un caso típico lo representan seguridad y usabilidad.

Una técnica común para implementar seguridad, es pedir al usuario el ingreso de una clave a la hora de realizar ciertas operaciones. En algunos casos, esta técnica se lleva al extremo pidiendo al usuario confirmación, re-confirmación e ingreso de clave, por operaciones que el usuario considera «triviales». Esto suele fastidiar al usuario, el cual, con el fin de tener una mejor experiencia en el uso de la aplicación, termina desactivando las verificaciones de seguridad. Aquellos que han trabajado con Windows Vista es posible que hayan experimentado una situación de este estilo.

Esta semana viví otro caso similar: tuve que realizar unos tramites en la AFIP. Un portal tan seguro como anti-usable. Ventanas emergentes por todos lados, postback contantes, scrolls infinitos, etc, y casi nada de web 2.0. Pero más allá de esto resulta que la clave de usuario (llamada clave fiscal) tiene asociada un nivel de seguridad que habilita a realizar ciertas operaciones. En mi caso necesitaba realizar una operación que requería un nivel de seguridad de clave superior al que yo tenia. Entonces, me surgió la gran pregunta: ¿cómo hago para elevar el nivel de seguridad de mi clave? Respuesta: es un trámite personal que debe realizarse en una oficina de la AFIP, ja!

Ojo, esto no es una crítica a la AFIP, sino un ejemplo real del conflicto entre estos dos atributos de calidad: seguridad vs. usabilidad.