Pruebas Unitarias, los cimientos de un Gran programador

Pruebas Unitarias, los cimientos de un Gran programador

Esta semana si empezamos con temas técnicos. Empezamos con un pequeño curso de lo que considero es una de las habilidades más importantes para los programadores, y más menospreciadas por la mayoría. Pruebas Unitarias.

No es que sea un punto de discusión en la industria. Es un hecho bien sabido que los mejores programadores hacen pruebas unitarias. Los mejores proyectos, y el mejor software tiene pruebas unitarias. Las pruebas unitarias son obligatorias en las empresas de software más importantes y los proyectos Open-Source serios las tienen. De hecho, te obligan a incluirlas si quieres contribuir con código. En resumen: La costumbre de hacer pruebas unitarias para probar la mayoría de su código es el principal separador entre buenos programadores, y grandes programadores.

Por eso no entiendo porque tan pocos programadores las usan. Cuando entrevisto para cualquier posición siempre pregunto: ¿Haces pruebas unitarias para tu código? 90% de las veces me responden que no. Les pregunto: ¿Por qué? Y siempre son las mismas respuestas.

  • No se que es eso.
  • Es que toman mucho tiempo.
  • Son muy difíciles.
  • No me he acostumbrado.
  • O la peor. No me hacen falta.

Y la realidad es otra. La razón por la que no lo hacen, es porque no lo han practicado lo suficiente, y porque no conocen la gran diferencia que hacen. No entienden porque hacerlas los hace mejores programadores.

Beneficios, Calidad, Tranquilidad, Productividad

Y por eso, este primer post técnico se va a enfocar Pruebas Unitarias. Porque como programador, no hay técnica, habilidad o conocimiento que te ofrezca mayores beneficios en los resultados que generas, como volverte experto y usar siempre Pruebas Unitarias. Es más fácil entender porque son tan importantes si entiendes sus principales beneficios:

Calidad

El punto más sencillo de entender. Si tu código tiene pruebas que se aseguran de que esté bien, no tienes que esperar a ejecutarlo completo para asegurarte que está bien. Las pruebas deben de cachar tus errores antes de que lleguen a producción. Pero esta facilidad de revisar tiene beneficios adicionales:

  • Te asegura que tu implementación cumple con los requerimientos, y que funciona. Prueba por ti. Te ayuda a detectar esos errores antes.
  • Si quieres probar algo que no estás seguro como va a funcionar. Una prueba unitaria es más fácil de trabaja, debugear y verificar sus resultados.

Tranquilidad y Libertad

El tener un set de Pruebas Unitarias te ayudan a asegurarte que tus clases cumplen siempre con lo que deben de hacer. Y es la seguridad de que cumplen lo que te da la libertad de poder hacer Refactoring a tu código, o cambios, o solucionar bugs, teniendo la tranquilidad de no estas rompiendo las funcionalidades en otros lados. Si rompes algo, la ejecución de las pruebas te lo debe de decir.

  • Te da la libertad de hacer Refactoring tranquilo. Sin echar a perder.
  • Te da la libertad de solucionar Bugs tranquilo. Sin echar a perder algo más.
  • Te da la seguridad de que un bug no vuelva a ser introducido.

Productividad

Este es el punto más discutido. Mucha gente dice que, como hay que programar también las pruebas, toma más tiempo, y por lo tanto es menos productivo. Desafortunadamente este es un punto de vista miope, enfocado únicamente en el desarrollo de la funcionalidad, sin tomar en cuenta el impacto posterior en el tiempo total del proyecto. Miles de estudios comprueban que, aunque tome más tiempo en la programación inicial, los ahorros posteriores en cambios y en reducción de bugs lo hacen mucho más productivo en mediano y largo plazo.

  • Es mucho más rápido ejecutar pruebas unitarias, que volver a probar algo a mano.

Guía tu Aprendizaje

Enfocarte en aprender y volverte experto en pruebas unitarias tiene un efecto automático en otros puntos de aprendizaje como programador, principalmente en patrones y mejores prácticas. Al ir aprendiendo como hacerlas te empuja en automático a adoptar mejores prácticas, como Encapsulación, DRY y SOLID, y patrones como Inversión de Control e Inyección de Dependencias.

  • Tener pruebas unitarias nos empuja en un inicio a utilizar mejores patrones en el diseño e implementación de nuestras clases mejores prácticas en el código que escribimos.

Y cuando aprendas un lenguaje nuevo. Apréndelo en paralelo de cómo hacer pruebas unitarias. Esto te ayudará a entender y probar más rápido el funcionamiento general, y más a detalle del lenguaje que estas aprendiendo. De hecho, no entiendo porque no hay más cursos que te enseñen el lenguaje y sus pruebas unitarias a la par, creo que es la manera ideal de aprender.

Son el Punto de Partida de Mucho Más

Una vez que tienes Pruebas Unitarias los siguientes pasos para automatizar la revisión y puesta en marcha de tu software (CI/CD*) ya solo están a un paso. Son cosas que puedes hacer sin tener pruebas unitarias, pero sin las pruebas unitarias no tiene ningún sentido. Si ya tienes pruebas unitarias entonces:

  • Porque no ejecutarlas en automático cada vez que haya un Commit al repositorio.
  • Y si hay esa ejecución encuentra errores, porque no mandar un correo en automático a la persona que hizo el Commit.
  • Y si pasa todo, significa que todo está bien. Porque no poner ese código inmediatamente en producción.

Por eso es importante que todo programador, en especial los que quieren hacer una verdadera carrera, aprendan y se vuelvan expertos en hacer y usar Pruebas Unitarias.

Con esto voy a terminar el post. La siguiente semana continuaremos con los Conceptos básicos. Y recuerda. Practicar, Practicar, Practicar.

Resumen:

  • Dominar y usar Pruebas Unitarias como parte de nuestro proceso es una habilidad indispensable para cualquier programador.
  • Las Pruebas Unitarias:
    • Mejoran la Calidad de tus resultados y aumentan tu Productividad.
    • Te dan la tranquilidad y libertad de hacer cambios y solucionar errores, sabiendo que, si hiciste algo mal, la prueba cachara el error antes de irse a producción.
    • Aprenderlas y dominarlas te hace aprender muchas más prácticas y patrones que en automático te hacen mejor programador.
  • Practicar, Practicar, Practicar.

Deja un comentario

Close Menu