Desarrollo guiado por pruebas

El desarrollo de aplicaciones web siempre ha necesitado dedicar una gran cantidad de tiempo al testeo. Y si hay algo que no abunda en el mundo del desarrollo de aplicaciones web es, precisamente, tiempo.

Por eso, en los últimos años está tomando auge el conocido como Test Driven Development, o TDD, término que podríamos traducir como “Desarrollo guiado por pruebas”.

Esta metodología consiste en escribir pruebas ejecutables para cada funcionalidad de nuestra web. Cada una de estas pruebas nos dirá si su funcionalidad asociada funciona correctamente, por lo que, con un simple comando desde consola, en cualquier momento podemos saber si todo sigue funcionando correctamente o si alguna de las funcionalidades nuevas que hemos ido introduciendo ha roto algo en las que ya teníamos implementadas.

Esto nos puede llevar a pensar que esta metodología nos ralentizaría el trabajo, ya que nos hace escribir tanto el código como también su prueba correspondiente. Pero nada más lejos de la realidad. Las pruebas no solo nos van a guiar a la hora de escribir el código, sino que además nos van a reducir de manera asombrosa el tiempo de testeo. Solo tendremos que escribir una línea y pulsar el intro para probar toda nuestra aplicación de una manera casi instantánea.

Esta manera de programar se compone de tres pasos para cada funcionalidad:

  1. Programamos la prueba: Escribimos los pasos que tendrá que seguir nuestra prueba para probar su funcionalidad correspondiente. Es importante que cada prueba testee una única funcionalidad y que sea lo más específica posible, ya que así, será mucho más fácil depurar los errores que puedan surgir a medio-largo plazo.
  2. Programamos el código: Por supuesto, como hemos escrito la prueba antes que el código, al ejecutarla nos va a dar error. Pero no hay problema, de hecho es lo que hay que hacer, ya que el error que nos de la prueba nos dará una pista crucial sobre lo que tenemos que hacer a continuación. De ahí que todo esto se llame Desarrollo GUIADO por pruebas.
    Al ir puliendo cada error que nos de la prueba, al final pasará correctamente y podremos ir al tercer paso.
  3. Refactorizamos el código: Para optimizar la legibilidad, la reutilización y la limpieza del código, es conveniente refactorizarlo después de programarlo. Una vez realizada la refactorización, simplemente pasando la prueba una vez más podremos saber si todo sigue funcionando correctamente.

Ejemplo de desarrollo guiado por pruebas

Vamos ahora a ver los pasos con un pequeño ejemplo en Laravel, que ya lleva integrado el entorno para pruebas PHPUnit. Nos puede valer con una funcionalidad que simplemente salude al usuario actual si ha iniciado sesión:

Usando PHPUnit, programamos una prueba que crea un usuario, inicia sesión como él y comprueba si, dentro de un elemento HTML con la clase “welcome-text” aparece el saludo con su nombre en la home. Algo así:

public function test_bienvenida_usuario_conectado()

{

$user = new \App\User(['name' => 'Robert']);

auth()->login($user);

$this->visit(‘/’)

        ->seeInElement(".welcome-text", ‘¡Bienvenido, Robert!');

}

Si ejecutamos esta prueba, primero nos dará error si no existe el modelo “User”, por lo que tendremos que crearlo. Una vez creado, al volver a ejecutarla creará el usuario, iniciará sesión como él, visitará la home de la web (si existe, que si no, dará otro error que nos obligará a crear una ruta para la home) y, de nuevo, dará error porque aún no existe un elemento con la clase “welcome-text”.

Si al crearlo sin más volvemos a ejecutar la prueba, el error será que no ha encontrado el texto ‘¡Bienvenido, Robert!' dentro de dicho elemento, por lo que tendremos que programar la funcionalidad para que aparezca. Finalmente, el código en la vista de la home quedará así:

<div class=”welcome-text”>{{ bienvenida() }}</div>

Y la función bienvenida() sería algo así:

function bienvenida()

{

if (auth()->check())

{

return '¡Bienvenido, ' . auth()->user()->name . '!';

 }

}

¡Y la prueba ya pasa correctamente! Es un ejemplo muy sencillo, muy a grandes rasgos, pero nos sirve para ver claramente cómo la prueba nos va guiando para escribir el código, ¡con todas las ventajas que eso conlleva!

El paso de la refactorización ya es más subjetivo y, aunque no sería obligatorio, sí sería conveniente hacerlo por lo menos hasta cierto punto. En el contexto de este ejemplo podríamos crear una función en el controlador de User que devuelva el nombre del usuario y usarla en la función “bienvenida()” en lugar de “auth()->user()->name”.

De todas formas, si no eres un profesional del sector informático, y prefieres que sea un programador el que se encargue de hacerlo, puedes contactar con nuestra agencia de Marketing Online en Valencia, donde trabajan especialista de todos los sectores, incluyendo programadores.

Tags: 
php, phpunit, laravel, tdd, test driven development

Deja un comentario


Sobre Nosotros

En Roiting contamos con un equipo de profesionales de diferente índole (analistas web, programadores, diseñadores, community managers, expertos en ppc y posicionamiento en buscadores) especializados en el entorno online y con un punto en común.