El Desenvolupament Guiat per Tests (TDD) és una metodologia de desenvolupament de programari que es basa en escriure tests abans de desenvolupar el codi funcional. Aquesta tècnica ajuda a assegurar que el codi compleix els requisits especificats i facilita la detecció d'errors des de les primeres etapes del desenvolupament.

Objectius del TDD

  • Millorar la qualitat del codi: Escriure tests abans del codi funcional ajuda a identificar errors i defectes des del principi.
  • Facilitar el manteniment: Els tests actuen com a documentació viva del codi, facilitant la comprensió i el manteniment.
  • Fomentar el disseny modular: El TDD promou la creació de codi modular i desacoblat, ja que els tests es centren en unitats petites i independents.

Cicle del TDD

El cicle del TDD es pot resumir en tres passos principals:

  1. Escriure un test: Escriure un test que defineixi una nova funcionalitat o millora. Aquest test inicialment fallarà perquè la funcionalitat encara no està implementada.
  2. Fer que el test passi: Escriure el codi mínim necessari per fer que el test passi.
  3. Refactoritzar: Millorar el codi assegurant-se que els tests continuen passant.

Aquest cicle es repeteix fins que es completa la funcionalitat desitjada.

Exemple Pràctic de TDD amb JUnit

Pas 1: Escriure un Test

Suposem que volem implementar una classe Calculator amb una funció add que sumi dos números. Primer, escrivim un test per aquesta funcionalitat.

import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;

public class CalculatorTest {

    @Test
    public void testAdd() {
        Calculator calculator = new Calculator();
        int result = calculator.add(2, 3);
        assertEquals(5, result, "2 + 3 hauria de ser 5");
    }
}

Pas 2: Fer que el Test Passi

Implementem el codi mínim necessari per fer que el test passi.

public class Calculator {

    public int add(int a, int b) {
        return a + b;
    }
}

Pas 3: Refactoritzar

En aquest cas, el codi és prou simple i no necessita refactorització. Però si fos més complex, podríem millorar la seva estructura i llegibilitat mantenint els tests verds.

Exercicis Pràctics

Exercici 1: Multiplicació

Escriu un test per una funció multiply que multipliqui dos números i implementa la funcionalitat.

Solució

Test:

@Test
public void testMultiply() {
    Calculator calculator = new Calculator();
    int result = calculator.multiply(2, 3);
    assertEquals(6, result, "2 * 3 hauria de ser 6");
}

Implementació:

public int multiply(int a, int b) {
    return a * b;
}

Exercici 2: Divisió

Escriu un test per una funció divide que divideixi dos números i implementa la funcionalitat. Assegura't de gestionar la divisió per zero.

Solució

Test:

@Test
public void testDivide() {
    Calculator calculator = new Calculator();
    int result = calculator.divide(6, 3);
    assertEquals(2, result, "6 / 3 hauria de ser 2");
}

@Test
public void testDivideByZero() {
    Calculator calculator = new Calculator();
    assertThrows(ArithmeticException.class, () -> {
        calculator.divide(6, 0);
    }, "Dividir per zero hauria de llençar una excepció");
}

Implementació:

public int divide(int a, int b) {
    if (b == 0) {
        throw new ArithmeticException("No es pot dividir per zero");
    }
    return a / b;
}

Resum

El Desenvolupament Guiat per Tests (TDD) és una metodologia que ajuda a millorar la qualitat del codi i facilita el manteniment. El cicle del TDD consisteix en escriure un test, fer que el test passi i refactoritzar el codi. Mitjançant exemples pràctics, hem vist com aplicar el TDD amb JUnit per implementar funcionalitats de manera efectiva.

En el següent tema, explorarem com integrar JUnit en un procés d'Integració Contínua per assegurar que els tests s'executin automàticament en cada canvi de codi.

© Copyright 2024. Tots els drets reservats