Notas del workshop de TCR

Ayer por la tarde/noche en la oficinas de Grupo Esfera hicimos un mini-taller exploratorio de test && commit || revert. Fuimos 9 participantes, todos practicantes de TDD. Comenzamos la sesión con un poco de contexto:

  • El código va con tests. No se discute.
  • Los tests pueden hacerse a priori o a posteriori. Podemos debatirlo.
  • TDD implica Test a priori pero Test a priori no implica TDD. Es definición.

En términos formales hay dudas sobre los beneficios de TDD

There’s no convincing evidence that TDD consistently fares better than any other development method, at least those methods that are iterative.

What Do We (Really) Know about Test-Driven Development?
(2018) I. Karac and B. Turhan, in IEEE Software, vol. 35, no. 4, pp. 81-85, July/August 2018. doi: 10.1109/MS.2018.2801554

Algunos autores sugieren que los beneficios de TDD no se deben al hecho de escribir los tests a priori sino al hecho de trabajar en pequeños incrementos:

The claimed benefits of TDD may not be due to its distinctive test-first dynamic, but rather due to the fact that TDD-like processes encourage fine-grained, steady steps that improve focus and flow.

A Dissection of the Test-Driven Development Process: Does It Really Matter to Test-First or to Test-Last?,
(2017) D. Fucci, H. Erdogmus, B. Turhan, M. Oivo and N. Juristo, in IEEE Transactions on Software Engineering, vol. 43, no. 7, pp. 597-614, 1 July 2017.doi: 10.1109/TSE.2016.2616877I.

Dicho todo nos propusimos probar la técnica TCR que propone trabajar en mini-incrementos. Pusimos entonces las manos en el teclado para resolver algunos ejercicios. Lamentablemente nos quedamos cortos de tiempo, pero acordemos agendar otro encuentro para seguir experimentando.

Les dejo un video del propio Beck haciendo un ejercicio al estilo TCR.

Finalmente les comparto aquí un video que hice mientras resolvía la Kata de Chopper que propuse hacer como primer ejercicio del workshop.

Preparación para el taller exploratorio de tcr

Preparación para el taller exploratorio de tcr

El jueves próximo en el contexto de la semana de la agilidad voy a estar haciendo un taller exploratorio de la dinámica tcr (test && commit || revert). Para ejercitar esta dinámica resulta muy conveniente tener algún mecanismo de file watching que (cada vez que modificamos un archivo) se encargue de correr los test y hacer commit o revert dependiendo del resultado.

Durante el taller yo voy a trabajar con Ruby pero el taller se puede seguir perfectamente con cualquier lenguaje, solo es necesario tener Git y un algún framework de automatización de tests (algo de la familia xUnit es suficiente).

Para quienes quieran trabajar con Ruby, armé un setup con una configuración Guard para correr el flujo trc. Está disponible GitHub.

test && commit || revert

Esta es una idea experimental de la cual Kent Beck comenzó a hablar hace un par de meses. La primera vez que escuché al respecto me sonó raro. Ya llevo varias semanas dándole vueltas y me sigue resultado raro pero el hecho de haber estado probándolo me permitió reflexionar sobre mi flujo de trabajo al programar.

Más aún, he estado trabajando en un mini-taller exploratorio de TCR para compartir esta idea y poder destilarla en conjunto con otros practicantes. Voy a aprovechar el Open Space que se realizará en Buenos Aires en el contexto de la semana de la agilidad, los interesados traigan sus notebooks, git y ganas de codear.