Últimas entradas

TDD – Desarrollo Dirigido por Pruebas

El TDD es una metodología de desarrollo de software que se enfoca en escribir las pruebas automatizadas antes de escribir el código de la aplicación.

En lugar de comenzar con la implementación del código, el desarrollador comienza escribiendo un caso de prueba que describe el comportamiento deseado de la funcionalidad que se va a implementar.

Una vez que se ha escrito el caso de prueba, el desarrollador escribe la cantidad mínima de código necesaria para hacer que el caso de prueba pase.

Luego se ejecuta la prueba para verificar que el código funcione según lo esperado. Si la prueba falla, el desarrollador corrige el código y vuelve a ejecutar la prueba.

El ciclo de escribir una prueba, escribir el código y ejecutar la prueba se repite varias veces hasta que la funcionalidad se completa y pasa todas las pruebas.

La idea detrás de TDD es que al escribir las pruebas primero, el desarrollador se enfoca en los requisitos y el comportamiento esperado de la aplicación, y no solo en la implementación del código.

El objetivo final es mejorar la calidad del software, ya que las pruebas automatizadas garantizan que el código funcione según lo esperado, lo que reduce la cantidad de errores y problemas en el software.

En resumen, la función principal del TDD es garantizar que el software sea de alta calidad y se ajuste a los requisitos y expectativas del usuario y del negocio.

Ventajas

  • Mayor calidad del software: El TDD ayuda a reducir la cantidad de errores en el software, ya que todas las funcionalidades están cubiertas por pruebas automatizadas. Esto garantiza que el software funcione según lo esperado, lo que conduce a un producto de mayor calidad.

  • Reducción del costo de mantenimiento: Las pruebas automatizadas permiten detectar y corregir errores tempranamente en el proceso de desarrollo, lo que reduce la cantidad de errores que se introducen en el software. Esto, a su vez, reduce los costos de mantenimiento a largo plazo.

  • Facilita la refactorización del código: El TDD facilita la refactorización del código, ya que las pruebas automatizadas aseguran que el código funcione como se espera después de los cambios. Además, el proceso de refactorización no cambia el comportamiento de la funcionalidad de la aplicación, lo que reduce la cantidad de errores que se pueden introducir en el proceso.

  • Fomenta la comunicación y colaboración: El TDD fomenta la comunicación y colaboración entre los miembros del equipo de desarrollo, ya que todas las funcionalidades están descritas en términos de casos de prueba y la implementación del código se realiza en función de esos casos de prueba. Esto garantiza que todos los miembros del equipo tengan una comprensión compartida de la funcionalidad y se mantengan actualizados sobre el progreso del proyecto.

  • Mejora la eficiencia del proceso de desarrollo: El TDD ayuda a mejorar la eficiencia del proceso de desarrollo, ya que la corrección de errores se realiza tempranamente en el proceso, lo que reduce la cantidad de tiempo necesario para realizar correcciones y aumenta la velocidad de desarrollo en general.

A continuación, se mostrará un ejemplo básico de cómo se puede aplicar TDD en un proyecto de Laravel. Supongamos que estamos construyendo un sistema de registro y autenticación de usuarios, y queremos aplicar TDD para garantizar que las funcionalidades se implementen correctamente.

En primer lugar, escribimos una prueba que verifique que el sistema de registro funcione correctamente. Para hacer esto, creamos un archivo de prueba en la ruta tests/Feature/RegisterTest.php. Dentro de este archivo, agregamos el siguiente código:

<?php

namespace Tests\Feature;

use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase;

class RegisterTest extends TestCase
{
    use RefreshDatabase;

    /** @test */
    public function a_user_can_register()
    {
        $response = $this->post('/register', [
            'name' => 'Test User',
            'email' => 'test@example.com',
            'password' => 'password',
            'password_confirmation' => 'password',
        ]);

        $response->assertRedirect('/home');
        $this->assertDatabaseHas('users', [
            'name' => 'Test User',
            'email' => 'test@example.com',
        ]);
    }
}

En este código, estamos haciendo una solicitud POST a la ruta /register con los datos del usuario de prueba. Luego, verificamos que la respuesta redireccione al usuario a la página de inicio y que se haya creado el usuario en la base de datos.

A continuación, ejecutamos la prueba para verificar que falle, ya que aún no hemos implementado la funcionalidad de registro.

Implementar la funcionalidad:
Ahora, implementamos la funcionalidad de registro en la ruta /register en el archivo routes/web.php. Agregamos el siguiente código:

Route::post('/register', function (Request $request) {
    $user = User::create([
        'name' => $request->input('name'),
        'email' => $request->input('email'),
        'password' => Hash::make($request->input('password')),
    ]);

    Auth::login($user);

    return redirect('/home');
});

En este código, estamos creando un nuevo usuario en la base de datos, utilizando los datos proporcionados por el usuario en la solicitud POST. Luego, iniciamos sesión con el usuario y redirigimos al usuario a la página de inicio.

Finalmente, ejecutamos la prueba nuevamente para verificar que pase. Si la prueba pasa, sabemos que la funcionalidad de registro se ha implementado correctamente.

Referencia: https://testdriven.io/

Agregue un comentario

Su dirección de correo no se hará público. Los campos requeridos están marcados *