Introducción
Algunas personas, no terminan de ver las bondades de aplicar TDD en su desarrollo, esto puede ser por diversos motivos: falta de cultura de testing en la empresa, una mala implementación / adopción de la metodología, etc.
Por desgracia no existen muchas publicaciones que respalden con estadísticas las ventajas de aplicar TDD en nuestro proyecto, pero para mi al menos, algunos argumentos me dejan poco espacio a la duda, y vamos a exponer algunos de ellos a continuación
Si no sabes que es el TDD o cómo funciona, puedes ver mi charla de testing y TDD donde podrás aprender en que consiste y como aplicarlo en tus desarrollos
Metodología de trabajo
Para mí, esta es una de las ventajas más destacables. Muchas veces, cuando le preguntas a un programador, ¿oye, como encaras tus desarrollos? realmente no tienen una respuesta clara, la gran mayoría de las respuestas serán un «depende», el TDD, te da precisamente eso, una forma de trabajar, que te hará más eficiente y simplificará los análisis
Siempre tendremos tests que respalden nuestro código
Esta ventaja puede parecer evidente, pero en realidad no lo es tanto si lo comparamos con hacer test sin TDD, me explico:
Si realizas tests al final del desarrollo, además de poder descuidar algún caso de uso, puede pasar que dejes en más de una ocasión tus tests sin realizar a causa de factores externos, como presión del cliente o manager, un cambio urgente que debe realizarse cuanto antes…, y un largo etc. Otro problema es que por desmotivación de la tarea, o por pereza de casuísticas complejas, realices una cantidad mínima de tests y apenas tengas cobertura en tu desarrollo.
Aplicando TDD, ya que los tests van primero, jamás tendrás la tarea finalizada sin tener los test realizados en primer lugar. Además al realizarse la funcionalidad de menos a más, se hace mucho más llevadero, y no te verás en esa tesitura de tener una montaña de funcionalidades que testear
Diseños lo más simples posibles, cumpliendo con los principios KISS y YAGNI
Al realizar la implementación de menos a más, y teniendo como marco los casos de uso, evitamos realizar funcionalidad para escenarios que no necesitamos, al realizar iteraciones de mejora continua basándonos en la propia funcionalidad, evitamos realizar un desarrollo mucho más complejo del que necesitamos
Nos aseguramos que se genera el problema, antes de solucionarlo
Cuando tenemos que arreglar un bug o problema, asegurarnos de estar reproduciendo el escenario que provoca ese problema antes de solventarlo. Esto es muy útil para ganar en confianza
Un gran número de casos de uso estarán cubierto por tests
Cómo realizaremos un test por cada caso de uso marcado por la historia de usuario, nos garantizamos tener todos los casos de uso especificados cubiertos, esto, de hacer los tests al final del desarrollo, no siempre lo tendremos asegurados, implicaría mucha disciplina por parte del desarrollador.
Evitaremos asserts poco relevantes y nuestros tests serán más robustos
Al tener un enfoque por caso de uso, testearemos lo relevante, y evitaremos estar probando en un mismo test valores que no aplican al caso de uso testeado, esto hará que nuestros tests sean menos frágiles al cambio
Código más limpio
Una etapa del proceso del TDD es la refactorización, esto no solo nos invita a refactorizar, si no, que nos ayuda, ya que refactorizaremos una vez por cada iteración, por lo que será mucho más sencillo ir simplificando el código
Código orientado a requisitos
Lo ideal cuando hacemos TDD, es tener definido todos los requisitos / casos de uso dentro de nuestra historia de usuario, y si esto es así, realizaremos los test unitarios por cada caso de uso que tengamos establecido, consiguiendo por tanto, que nuestro código se limite a los requisitos funcionales sin ir más allá
Conclusiones
Considero que todas las ventajas expuestas se podrían conseguir sin aplicar TDD, pero exigiría de una alta disciplina por parte del desarrollador. Precisamente lo que ofrece el TDD es una forma mucho más sencilla y «mecanizada» de conseguirlas, por lo tanto, ¿por qué complicarse?
Aún así, si nada de esto os convence y seguís queriendo datos, aquí os dejo un articulo sobre unos estudios realizados por Microsoft e IBM de las mejoras que consiguieron al aplicar TDD