Buenas, hoy vamos a hablar de ¿por qué DEBÉS, QUERÉS y NECESITÁS escribir tests sobre tu código?
Imaginate esta situación, acabas de terminar tu código, te tomás un respiro para apreciar la obra maestra de lógica que creaste. Ahora te presentaron nuevos requerimientos y tenés que hacerle mejoras. Ok agregas código, refactoreas algunas cositas y… ¡listo!, ahora probamos click acá, click allá y todo funciona perfecto.
Como sabemos el software es un elemento vivo, puede cambiar y tranquilamente la complejidad de un módulo se puede ir hasta las nubes. En ese caso probar la funcionalidad manualmente deja de ser una tarea agradable y si no probamos todos y cada uno de los casos en vez de recibir requerimientos vamos a empezar a recibir peticiones para arreglar bugs y un proyecto que solía ser un paraíso ahora es una inmundicia llena de parches. Nadie merece vivir así, podés tomar acción a tiempo y asegurarte una vida sin estrés.
Los tests son esos amigos que te dicen la verdad. Si un caso no funciona como creías en tu lógica magistral es mucho mejor darse cuenta antes de que ese programa llegue a dominio público o del cliente.
Si escribís buenos tests vas a poder irte a dormir tranquilo sabiendo que hiciste bien tu trabajo y podés enfrentarte a nuevos e interesantes retos.
Listo ya lo tenés hay que escribir tests, entonces armás tu código y luego escribís un test que compruebe que todos los caminos funcionan tal cual esperabas y cada vez que haces una modificación ejecutás el test y si pasa sigue todo ok.
Buena aproximación
¿y si te digo que podés ir un poco más lejos?
Podés partir de la definición del proyecto y empezar por los tests, algo muy sencillo que cumpla las expectativas del negocio, de esta forma tenés documentado en código la definición de la lógica de negocio y si el negocio cambia con el tiempo y mantenés los tests alineados siempre vas a tener una documentación actualizada de por qué cada cosa está en cada lugar. Esto es algo que se conoce como TDD (Test Driven Development).
Mientras escribo este artículo estoy recibiendo vibraciones de almas en pena y quejumbrosas que cuestionan con argumentos como:
Y un sinfín de sinónimos de los puntos anteriores, permitime contestar a estas negaciones prematuras una por una.
Si tenés un lamento novedoso acerca de los tests y puede ser respondido con alguna de los 3 puntos anteriores, deja de llorar.
Los tests son una herramienta y como tal tienen sus aplicaciones específicas, y me gustaría enumerarlas:
El punto número 1 habla de Que sabemos lo que sabemos, el camino feliz donde todos los valores que entran están en perfecto estado y formateado como necesitamos, en ese caso el test pasa y somos todos felices.
El punto número 2 habla de Que sabemos lo que no sabemos, en este caso sabemos que es lo que no queremos que pase, si tiene que venir un string y viene un int, si un proceso tenía que devolver algo y no devolvió nada y teníamos que disparar una excepción. Con el test nos aseguramos de que esas excepciones sean disparadas.
El punto número 3 habla de Que no sabemos lo que no sabemos y acá es donde te pido sinceridad y humildad, si un caso no estaba en los tests, se rompe en producción y vuelve como un bug. En esos casos no hay ni test ni milagro que valga, tenés documentado en los tests que no habías pensado en ese caso de uso o falla, solo queda aprender del bug, solucionarlo y agregar lo que no habías pensado al test para que no vuelva a pasar.
Existen varios tipos de tests que hacen que una aplicación sea robusta y relajada.
Este tipo de test se centra en testear cada parte del código, deberías aspirar a tener una cobertura del 100% de las líneas.
Este tipo de test está mucho más centrado en el funcionamiento a grandes rasgos del sistema, en el caso de una página web podrías testear que si estas logueado y tu nombre tiene que aparecer en la barra superior del sitio, realmente aparezca.
Una vez que le encuentres el gustito a trabajar implementando tests no solo vas a ser una persona mucho más profesional sino que vas a irte todos los días a casa sabiendo que el trabajo en el cual te esforzaste está bien hecho.
<El último apaga la luz>
Muy buen blog ! Me anima aún mas por enfocarme en testing.
Muy bueno. Cuando aprenda Java seguramente tomaré el curso de Testing, esa que describes es la forma en la que quiero trabajar.