Cuando una sola persona hace un programa más o menos pequeño, normalmente puede ir codificando su programa poco a poco, compilar de vez en cuando, ejecutarlo y ver si lo que está haciendo funciona. El proceso de probar a mano puede llevarle un tiempo razonable y el programa puede, al final, quedar perfectamente hecho. De hecho, es una de las formas más divertidas de programar, ir haciéndo cosas y ver rápidamente si funcionan o no.
Sin embargo, si hablamos de programas más grandes y de varios desarrolladores trabajando simultáneamente en varias partes de él, el proceso de pruebas cobra especial importancia. Es posible que un desarrollador, sin querer, haga algún cambio que produzca fallos en el funcionamiento del código de otro desarrollador. Es más, un mismo desarrollador, según van pasando los días y va codificando, puede ir olvidando los detalles del código que desarrolló unas semanas antes y nuevamente, sin querer, ser el mismo el que estropee lo que había hecho al ir añadiendo nueva funcionalidad.
Al ser el programa grande, las pruebas manuales deben ser frecuentes, para comprobar que según pasa el tiempo, lo que estaba funcionando, sigue funcionando, además de comprobar que lo que acabamos de hacer también funciona. Pero al mismo tiempo, al ser el programa grande, esas pruebas manuales llevan cada vez más tiempo, ya que cada vez hay más cosas que probar.
Sería maravilloso si hubiera algo que probará nuestro programa de forma automática y con frecuencia. Si cada vez que hacemos cambios o añadimos código le decimos a ese algo que prueba nuestro programa y nos despreocupamos del tema, nos ahorraríamos mucho tiempo de prueba.
Afortunadamente, existe ese algo. Podemos hacer un programa que se encargue de probar nuestro programa. Ese programa de pruebas debería ser fácil de lanzar, deberíamos lanzarlo con frecuencia, no debería requerir ninguna intervención por nuestra parte y no debería darnos unos resultados que tengamos que analizar. Unicamente debemos lanzarlo y el sólo debe decirnos "Todas las pruebas han ido bien". O si no hemos tenido suerte, "Han fallado estas pruebas en estos sitios".
Obviamente, hacer estos programas de prueba es más trabajo, pero cuando más grande y complejo es el proyecto en el que estamos involucrados, más tiempo vamos a ahorrar a la larga. Las ventajas de tener unos buenos programas de prueba son:
Las pruebas automáticas ayudan mucho, pero tampoco garantizan nada al 100%. Nunca nos quitaremos del todo la necesidad de hacer pruebas manuales, pero incluso haciendo pruebas manuales, algunos errores se colarán y saldrán más adelante... o nunca. Las pruebas automáticas son simplemente una primera criba que nos ahorrará tiempo al detectar automáticamente un porcentaje alto de los errores en el código.
Actualmente, en cualquier proyecto de software mínimamente serio, es impensable no realizar test automáticos de prueba, ya que el ahorro de tiempo y la mejora del software al hacer estos test está de sobra probada.
Hay varias librerías que nos ayudan a la realización de estos test automáticos de prueba. Vamos ahora a ver una introducción a jUnit, una de las librerías de test automáticos más conocidas para Java.