La importancia del testing a la hora de desarrollar software

Si estáis como nosotros en el mundo del software libre y el desarrollo, sabréis más que de sobra que quizás lo más complejo de hacer un desarrollo, no es hacerlo, es hacerlo de forma que otro pueda entenderlo (hoy, mañana y dentro de mucho) y que pueda ser probado para asegurar que no fallará en un caso extraño en un futuro. Y es que todavía recuerdo cuando desarrollaba de forma informal, cuando aprendía e incluso ya trabajando y hacía un código que podríamos denominar espagueti.

¿Por qué? Seguro que os ha pasado también a vosotros. Por ejemplo:

  • En ocasiones llamas a un variable $lista en otras ocasiones la llamas $list y así con todo vas cambiando de castellano a inglés depende como te hayas levantado ese día
  • A veces usas mayúsculas para llamar las funciones y otras veces barras bajas, así que tienes a veces getUser() y otras veces get_user()
  • Hay funciones que ocupan dos líneas y otras que son de cientos de líneas
  • Tienes el mismo código en varias partes, de forma que cuando tienes que cambiar algo, terminas cambiándolo en muchos sitios y al final… hay problemas
  • No pruebas nada, y si lo pruebas es en plan la prueba que sabes que va a salir bien
  • Y no digamos de depurar, eso no existe, lo que haces es llenar el código de printfecho o su equivalente para ver dónde está el error

Así que bueno, pasar por esa fase es bueno. No tiene sentido hacer cosas bien, si no sabes por qué está bien y por qué otras están mal. Esto que os comento arriba al final provoca:

  • Problemas, tiempos y costes

Y os preguntaréis, ¿por qué? Porque un código correcto y bien planteado, es garantía de estabilidad, de poder mejorarse sin tener que invertir mucho y de no depender en exceso de unas cuantas personas en la organización que son las que saben cómo va todo.

A este problema, se le junta otro más: JavaScript. Sí, este lenguaje que a día de hoy está más que de moda, nació hace mucho como un lenguaje para validar formularios en los primitivos navegadores. ¿Esto qué provoca? Que su sintaxis, por retrocompatibilidad y por su forma de ser, es muy muy flexible. Y se pueden hacer multitud de cosas sin muchas restricciones, pero esa libertad crea problemas.

Aprendiendo a hacer desarrollos de calidad

¿Qué te recomiendo que hagas? Lo primero que leas documentación, como por ejemplo Software Crafters. Debes formarte no sólo en desarrollar, sino también en desarrollar siguiendo unas pautas. Estas pautas deben llevarte a hacer código limpio y de calidad. Quizás hayáis oído el anglicismo clean code y justamente la idea es esa, limpieza en tu código. Un código hecho de tal forma que alguien en un futuro pueda leerlo sin tener que pararse mucho a hacerlo. Ese alguien puedes ser tú mismo.

La segunda recomendación es que guíes tu desarrollo siguiendo las directrices del diseño dirigido por tests (TDD). Al final, el software es algo que va a usarse y que es susceptible de sufrir errores. En un software podemos encontrar errores, pero no podemos decir que no existen. Si sigues TDD conseguirás minimizar la existencia de los mismos.

Los test unitarios y el diseño dirigido a tests te permitirán obtener muchos pequeños trozos de software completamente funcionales y libres de errores. Al ir desarrollando tu solución basándote en pequeñas unidades funcionales correctas, tendrás muy fácil:

  1. saber de dónde viene un error en caso de que aparezca
  2. reutilizar código ya escrito porque al ser tan sencilla cada unidad podrás ver rápidamente su reutilización
  3. desarrollar con la garantía de una base sólida

Así que bueno, mucho ha cambiado el mundo de la ingeniería del software en estos tiempos, pero ahora, si sigues ciertos métodos, desarrollar software es más cómodo, relajado y productivo.