De Colombia a Finlandia

El anterior post (hace unos 10 días) lo escribí estando en Girardot, una ciudad de Colombia que todo el año tiene una temperatura alrededor de los 30 grados. Mientras escribo este post, estoy en Helsinki, la capital de Finlandia, donde ahora (primavera) se promedian 12 grados de temperatura, pero que en una noche de invierno pueden llegar a 30 bajo cero. Entre uno y otro extremo pasé brevemente por casa para disfrutar del extraño otoño caluroso que azota Buenos Aires por estos días.

Pero no vine a Finlandia para compensar el calor de Girardot sino para participar de la conferencia XP2015. Llegué ayer luego de ~17 horas de vuelo con una escala de ~9 horas en Alemania. Después de semejante viaje, mis expectativas para la conferencia se han incrementado un poco más ;-)

Mirando el programa parece que habrá de todo: keynotes, muchas sesiones surgidas del call for papers, open space (en paralelo con las sesiones), clínica coaches (en  los coffee breaks), presentación de trabajos formales de investigación y actividades sociales (al anochecer).

Continuará…

Preparandome para XP 2015

A fin de mes voy a estar viajando a Helsinki para participar de la conferencia XP 2015, donde además de disfrutar de la conferencia como asistente, estaré participando como orador/facilitador dos sesiones.

La primera de ellas es una sesión del tipo Technical Demo en la que estaré mostrado Octopush, una herramienta open source que desarrollamos con la gente de OLX para orquestrar deployments en contextos de entrega continua.

La segunda sesión que estaré facilitando es un taller de Behaviour-Driven Development. El taller está dividido en partes, la primera con foco en el flujo de trabajo y en las cuestiones de colaboración/comunicación y la segunda con foco en las cuestiones técnicas. Para esto último utilizaremos una máquina virtual con todas las herramientas ya instaladas de cara a poder utilizar mejor el tiempo del taller y no perder tiempo en instalación y configuración.

xp2105

Sobre el libro de experiencias Ágiles

En una de las sesiones del open space del Agile Open Camp propuse escribir un libro de experiencias contando casos de utilización de métodos ágiles en proyectos reales. La idea venía rondando en mi cabeza desde hacía ya bastante tiempo, creo que desde que leí el libro Anthology de la gente de ThoughtWorks, allá por 2009. Este libro no me pareció deslumbrante, pero me gustó y lo que más me llamó la atención fue su formato: el libro es básicamente un compendio de artículos de diversos autores, donde cada capítulos esto totalmente independiente del resto. Al mismo tiempo la escritura de Construcción de software, me generó muchas ganas de seguir escribiendo pero de forma más liviana (escribir este libro nos llevó unos 2 años) experimentando con alguna plataforma de autoedición.

El formato inmersivo del AOC me pareció ideal para hacer hacer un especie de hackaton de escritura, así que llegado el momento hice la propuesta.

De esta forma fue que el sábado 18 en el contexto del AOC,  justo antes de la cena nos sentamos a escribir la primera tanda de casos. Para el momento de la cena y en apenas 2 horas ya teníamos la primera versión cruda de 6 casos. Luego a lo largo de la semana fueron llegando más capítulos. Finalmente este último fin de semana trabajamos en la revisión/corrección y demás detalles de publicación. Para la escritura utilizamos lenguaje Markdown y trabajar coordinamos utilizamos GitHub. Finalmente para la edición, seguimos la sugerencia de Martín Salías y utilizamos la plataforma GitBook.

El resultado de este experimento es un libro gratuito que reúne 15 relatos de agilistas Argentinos. Algunos relatos cuentan prácticas/técnicas que funcionaron y otros cuentan prácticas/técnicas que no funcionaron lo cual también considero de gran valor.

Como coordinador/editor quiero agradecer a todos los autores que se sumaron a la iniciativa de este experimento. También quiero destacar y agradecer el impecable trabajo de revisión realizado por Thomas Wallet y la inagotable creatividad de Mauro Strione en el diseño de la portada creada sobre la base de una foto de Pablo Tortorella.

El libro está disponible para descarga gratuita en diversos formatos en: http://nicopaez.gitbooks.io/libroagileaoc2015/

AOC: Vampiros, hombres-lobo y DevOps

Cuando el equipo organizador del AOC me propuso dar una de las charlas plenarias consideré inicialmente 2 o 3 temas posibles y luego de dar un par de vueltas decidí cortar por la sano y hablar sobre cuestiones de mi día a día. En ese sentido mi actividad actual se reparte entre desarrollo de aplicaciones y trabajo de consultoría en cuestiones relacionadas a automatización de pruebas y despliegue continuo.

Al tratarse de un tema de mi trabajo cotidiano ya tenia mucho material a mano pero tenía que sentarme a ordenarlo. Decidí utilizar el aplicativo de Google para armar las diapositivas y me puse a trabajar. A medida que iba armando los slides iba ensayando la presentación incrementalmente. Cuando logré un esqueleto mínimo de la presentación,lo compartí con mi pareja para tener feedback y a partir de eso seguí trabajando en el tramo final. Las cuestiones visuales fueron lo último que ajusté. Una vez conforme con el entregable generado, corrí un ensayo de punta a punta y di por cerrado el trabajo.

Llegado el momento de la charla plenaria, encendí mi cronómetro y empecé a hablar. Si bien había trabajado bastante en la presentación, yo mismo me sorprendí cuando terminé  la presentación y vi que en la cuenta regresiva del cronómetro restaban tan sólo 2 segundos. Creo que nunca en mi tuve tal precisión en un presentación.

Aquí están disponibles las diapositivas que utilicé.

mi_sesion_aoc_2015

La previa del AOC 2015

El evento comienza formalmente hoy pero ya ayer empezó la movida. A partir del mediodía y hasta aproximadamente las 10 de la noche fue llegando gente a la Estancia Del Carmen ubicada en las afueras de Bariloche, donde se desarrolla el evento. En mi caso arribé alrededor de las 15, me establecí, compartí unos mates con el gran JuanAr y tipo 17 nos fuimos hacia el centro de la ciudad. Dimos una vueltas, merendamos y regresamos a la estancia alrededor de las 20. Debo admitir que quedé encantado con las instalaciones de la estancia, una construcción típica de la zona con madera y piedra por doquier y con una vista espectacular. Al regresar nos encontramos con unos 15 agilistas en el hall del hotel jugando a Los Hombres Lobo de Castronegro. Entre charlas, mates y guitarra, llegó la hora de la cena. Y como era de esperar luego de la cena pintó fogón. Si bien técnicamente no era un fogón, sí lo era conceptualmente: gente en sentada en ronda, tocando la guitarra, cantando “las que sabemos todos” y compartiendo una ronda de la bebida nacional nocturna, fernet con coca. Acabo de desayunar, el comedor de la estancia está repleto de gente y en breve comenzará EL evento. aoc_1 aoc_2

El evento del Año: AOC 2015

aoc2015

Definitivamente este evento está en el top 3 de los eventos que más expectativas me han generado.

Mi gran expectativa no es por el contenido, pues dada la propia dinámica del evento el contenido surgirá de los asistentes y será sin duda excelente. Lo que realmente me genera gran expectativa es el “formato inmersivo”: hay una invitación explícita a compartir plenamente 3 días realizando diversos tipos de actividades, sesiones de debate, caminatas, almuerzos, meriendas, cenas, visitas turísticas, actividades deportivas, etc, etc.

Y como si con una experiencia así no fuera ya suficiente, debemos sumarle el hecho de que el evento se llevará a cabo es uno de los paisajes naturales más hermosos de Argentina.

Me imagino…

….charlas después de la cena alrededor de una fogata.

…rondas de mate al aire libre con un cerro nevado de fondo.

… actividades recreativas a la orilla del lago.

…asado, chocolates y cerveza!!!!

La cita es 17, 18 y 19 de Abril en San Carlos de Bariloche, info completa en http://www.agileopencamp.com.ar/ ¿Te lo vas a perder?

 

 

 

¿Realmente necesitas una nueva herramienta para hacer ATDD?

Recientemente recibí una consulta por Twitter sobre este tema y dado que la respuesta no entraba en 140 caracteres decidí escribir este post.

Acceptance Test-Driven Development (ATDD) es una práctica de desarrollo ágil cuya popularidad está en franco ascenso. La idea es simple: guiar el desarrollo de funcionalidades a partir de sus correspondiente pruebas de aceptación. ¿Pero eso no es TDD? Si y no. Conceptualmente ATDD es como TDD en el sentido que es la prueba la guía el desarrollo, pero en general cuando hablamos de TDD estamos hablando del desarrollo de clases, una actividad que realiza el programador. Cuando hablamos de ATDD (o BDD o SBE) hablamos del desarrollo de funcionalidades desde la perspectiva del usuario lo cual requiere del trabajo conjunto del usuario y el programador. Resumiendo:

La principal diferencia entre ATDD y TDD pasa por el involucramiento del usuario en la definición de las pruebas que guiarán el desarrollo y la granularidad de las mismas.

Incluso, hay quienes afirman que el mayor beneficio de ATDD no pasa por la automatización de las pruebas sino por el involucramiento temprano del usuario en la definición de las pruebas de aceptación.

Habiendo dejado en claro los conceptos, vamos a las herramientas. Cuando hacemos TDD escribimos las pruebas en el mismo lenguaje que estamos programando nuestras clases y utilizamos para ello alguna herramienta de la familia xUnit.

Cuando hacemos ATDD escribimos pruebas de funcionalidades desde la perspectiva del usuario e idealmente lo hacemos trabajando en conjunto con él. Esto nos obliga utilizar alguna herramienta de especificación que resulte amena para el usuario quien generalmente no es alguien técnico. Dos herramientas muy difundidas en este terreno son Cucumber y Fitnesse, las cuales ofrecen un lenguaje de especificación muy amistoso y poco técnico. Luego tendremos que escribir lo que se denomina “glue code” para traducir las especificaciones escritas por el usuario a instrucciones ejecutables que se traduzcan en mensaje concretos a nuestro sistema bajo prueba. Este este sentido, puede que esa traducción ocurra a distintos niveles. O sea, una especificación del usuario podria terminar siendo una prueba a nivel de UI o bien una prueba a nivel de servicio o incluso una prueba a nivel de componente o clase. Esto no es un tema menor, ya que tiene un importante impacto en la elección de la herramienta a utilizar.

Si yo pretendo hacer ATDD generando pruebas de aceptación a nivel de componente/clase, entonces deberé elegir una herramienta que esté construida en el mismo lenguaje que mi aplicación. Pero si yo prefiriera hacer pruebas a nivel de UI, entonces tendré más libertad y podré elegir utilizar un lenguaje distinto para programar las pruebas. En este sentido conozco de varios proyectos en Android, .NET y Java, con pruebas de aceptación realizadas con Ruby. Debo admitir que cuando vi esto por primera vez, me resultó chocante, pero luego estuve involucrado en un par de proyectos en que se utilizaba esta estrategia y resultó muy cómodo.

La consulta que disparó este post tenia que ver con herramientas para hacer ATDD cuando la aplicación está construida en .NET. Mi respuesta concreta es:

  • Si el usuario va estar involucrado activamente en la escritura/validación de las pruebas y esas pruebas serán a nivel UI
    => Tienes muchas alternativas pues no estas atado a .Net. Básicamente cualquier herramienta de la familia Cucumber o Fitnesse estará bien.
  • Si el usuario va estar involucrado activamente en la escritura/validación de las pruebas y esas pruebas serán a un nivel por debajo de la UI
    => Puedes usar Specflow o Fitnesse (con su conector para net)
  • Si el usuario no va estar involucrado, entonces tienes libertad total y puedes escribir tus pruebas incluso con algo de la familia xUnit, ya que los únicos que leerán esas pruebas serán los técnicos, pero claro, ya no estarias contando con todos los beneficios de ATDD.

Dicho todo esto: ¿Realmente necesitas una nueva herramienta para hacer ATDD?

Automatización de pruebas y entrega continua en Uruguay

En 25 de noviembre voy a dictar un taller sobre estas temáticas en Uruguay con la colaboración de @pablolis. La idea de hacer un taller que una estas dos temáticas surgió a partir de reiteradas consultas que he recibido y de encontrarme hablando de una de ellas a partir de una consulta que originalmente tenía que ver con la otra.

Ante todo me parece importante dejar bien en claro la relación entre estas dos cuestiones:

  • La automatización de pruebas puede hacerse independientemente de que se trabaje en un contexto de entrega continua. Más aún, ni siquiera es necesario que se trabaje con un proceso de desarrollo en particular. No importa si se trabaja con métodos ágiles, proceso unificado o algún proceso ad-hoc, siempre puede ser valioso automatizar las pruebas.
  • Trabajar en modo entrega continua requiere indefectiblemente contar con pruebas automatizadas, pues de lo contrario, habría que invertir mucho tiempo en pruebas manuales o bien ir a producción con un producto inestable o de calidad desconocida, lo cual podria traducirse en problemas continuos más que en entrega continua.

Con esta aclaración conceptual creo que queda clara la motivación para juntar ambas cuestiones en un mismo taller.

Hablando ahora de la estructura del taller, la idea es comenzar entiendo la práctica de entrega continua, sus beneficios, fundamentos y un conjunto de patrones para su implementación. Todo esto de la mano de un conjunto de herramientas para su implementación. En este sentido compartiremos con los participantes una máquina virtual con una aplicación de ejemplo y con un set de herramientas ya instalado, listo para que puedan poner manos a la obra a medida que vamos viendo las herramientas.

En varios puntos del flujo de entrega continua nos encontraremos con pruebas automatizadas. En cada uno de esos puntos nos detendremos a analizar el tipo de prueba y las distintas alternativas de herramientas para su automatización. Por más que las pruebas y herramientas las veamos en un contexto de entrega continua, como mencioné anteriormente, las mismas también pueden resultar útiles en cualquier otro contexto.

Entre las herramientas que veremos estan: Puppet, Chef, Docker, Jenkins, Go, Travis, Cucumber, Selenium, Fitnesse y JMeter.

Los interesados pueden consultar más detalles e información para inscripción en la página de Evolución Ágil.

Agiles 2014, mi presentación sobre automatización de pruebas

Esta mañana di mi sesión sobre pruebas automatizadas. La sala estaba repleta de gente a punto tal que había gente sentada en el piso. Estimo había cerca de unas 80 personas.

Dado que yo ya sabía que no tendría tiempo suficiente para compartir todo el contenido que tenía preparado, compartí esto en con la audiencia y los invité a priorizar los temas a tratar: teoría de automatización y demostraciones de herramientas. Finalmente acordamos comenzar por los temas teóricos y dejar las demos para una sesión del open space de mañana.

Más de la mitad de los asistentes eran de perfil técnico (programadores y testers) y sólo una pequeña parte (unos 10) tenían pruebas automatizadas.

El material utilizado está disponible para descarga aquí.

sesion_agiles_2014

Clase en el posgrado de la UCA

La semana pasada dicté una clase sobre Extreme Programming en el contexto de la especialización en Ingeniería de Software de la UCA. Más concretamente la clase fue en el contexto de la materia Métodos de desarrollo de Software que dicta Andrés Diaz Pace.

Previamente Mariano Tugnarelli había dado una introducción a los métodos ágiles y Scrum. Lo cual preparó el contexto para meternos con XP.

El grupo de alumnos resultó ser bastante heterogéneo, varios de ellos trabajando activamente en el sector de software, algunos electrónicos, algunos graduados recientemente y otros hace ya bastante, en su mayoría Argentinos, pero también varios extranjeros. Muy poco con conocimientos de métodos ágiles.

Inicialmente hicimos una actividad de mitos y verdades la cual nos sirvió de disparador para ir entrando en varias conceptuales.

Algunos recursos interesante relacionados a los que vimos en la clase:

agiles_uca