Impresiones de la enseñanza de TDD y otras prácticas

El año pasado comenzamos con la práctica de encuestar informalmente a los alumnos sobre las algunas de las prácticas de desarrollo que estudiamos (y aplicamos) en la materia. Concretamente les consultamos con 3 prácticas que estudiamos en la materia, que consideramos muy beneficiosas pero que curiosamente en la industria no tienen un uso masivo (aún): Mob-programming, Trunk-based development y Desarrollo guiado por Pruebas (BDD/TDD).

Explicamos a los alumnos cómo utilizar estas prácticas y las aplicamos en el contexto de un proyecto de desarrollo.

Si bien los alumnos pueden no utilizar estas prácticas (hecha la ley, hecha la trampa) insistimos en las utilicen principalmente con dos argumentos (ya que en general a los alumnos no les basta con que el docente les diga «es por aquí» ¡ja!):

  • Son prácticas que traen importantes beneficios y cuya efectividad está ampliamente probadas
  • A pesar de lo anterior, son prácticas que en la industria no son mainstream y que incluso se las mira con cierta desconfianza en algunos contextos. En la materia les ofrecemos un ambiente seguro para que puedan experimentar con la práctica, contando incluso con la guía del equipo docente. Si prueban estas prácticas en este contexto ¿donde las van a probar? ¿en sus trabajos con la presión de su jefe, los deadlines y el apuro de la industria?

La actividad de encuesta es bastante simple, les presentamos un cuadro de dos ejes y les pedimos que indiquen ahí cómo fue su experiencia utilizando estas prácticas.

Puede resultar curioso para algunos que la la práctica con mejor evaluación es el desarrollo guiado por pruebas. Cabe destacar aquí que al hablar de desarrollo guiado por pruebas me refiero al uso de BDD/TDD, o sea, guiar el desarrollo a partir de especificaciones en forma de ejemplos (pruebas) generados colaborativamente entre usuarios y el equipo de desarrollo.

Libro: Refactoring, Improving the Design of Existing Code

Recientemente terminé de leer este libro. Había leído algunos fragmentos sueltos, algunos refactorings del catálogo, pero resulta que el libro es mucho más que el catálogo. Toda la primera parte del libro explica diversos conceptos de refactoring y diseño orientado a objetos en general.

Entre lo que más me gustó del libro (más allá de algunos refactorings) están el capítulo 2 (Principles) y el capítulo 3 (Bad Smells in Code).

El autor del libro es Martin Fowler pero hay capítulos en los que colaboraron otros autores. Destacan las colaboraciones de Kent Beck, en esos capítulos se evidencia el mismo tono de «charla de café» que en los libros Beck (TDD by Example, Extreme Programming Explained, etc)

Dada la época en que se escribió el libro (2001), los ejemplos y las menciones a lenguajes de programación están en torno a Smalltalk, C++ y Java (versión 1.2).

Importante aclaración: hay 3 ediciones de este libro una de 2001 y otras 2 de 2018 (una es la actualización de la versión 2001 y la otra es una versión ajustada a Ruby). Yo leí la versión 2001 porque me interesaba entender el tema desde la raíz, sin embargo si alguien está interesado en leer este libro le recomiendo leer la versión 2018.

Libros de Ingeniería de Software que 2022 merecen una mirada

En los últimos años han sido publicados algunos libros sobre ingeniería de software que a mi parecer son de consideración obligada para todo docente de esta temática.

Software Engineering at Google: publicado por O’Reilly en 2020 y con versión digital (pdf) fue liberada gratuitamente hace un par de día. Cubre cuestiones de cultura, procesos y herramientas. Un punto para destacar de este libro es que tiene varios capítulos dedicados exclusivamente al tema testing. Paso a comentar. Curiosidad: el primer capítulo comienza con una cita de Borges.

The Art of Agile Development (segunda edición) escrito por James Shore y con colaboración de varios referentes. Es básicamente un libro de Extreme Programming. Su primera edición fue en 2007 y me pareció de lo mejor. El año pasado James decidió hacer una nueva edición cuyos borradores fue compartiendo en forma temprana para obtener feedback y refinarlos. Tuve la oportunidad de participar de esa iniciativa y me pareció un idea excelente. Esta nueva edición no solo actualiza algunos contenidos sino que en un punto es un «major update» ya que también incluye algunos nuevos capítulos en los que trata temas como «DevOps» y «Scaling».

Modern Software Engineering: escrito por Dave Farley(autor del ya clásico Continuous Delivery) y publicado a comienzos de 2022. A diferencia de los dos libros anteriores, este me resultó un más conceptual/filosófico. Propone un enfoque muy pragmático y contrastante con los libros clásicos de la temática como los de Pressman y Sommerville.