El Desenvolupament Guiat per Proves (TDD, per les seves sigles en anglès) és una metodologia de desenvolupament de programari que es basa en escriure primer les proves 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

  1. Millorar la qualitat del codi: Escriure proves abans del codi funcional ajuda a identificar errors i problemes de disseny des del principi.
  2. Facilitar el manteniment: Les proves automatitzades permeten fer canvis en el codi amb confiança, ja que es poden executar per verificar que tot segueix funcionant correctament.
  3. Documentació viva: Les proves serveixen com a documentació del comportament esperat del codi.

Procés del TDD

El procés del TDD es pot resumir en tres passos principals, coneguts com a cicle "Red-Green-Refactor":

  1. Red: Escriure una prova que falli.
  2. Green: Escriure el codi mínim necessari per passar la prova.
  3. Refactor: Refactoritzar el codi per millorar-ne l'estructura i la qualitat, assegurant-se que les proves continuïn passant.

Exemple Pràctic

Suposem que volem implementar una funció sumar(a, b) que sumi dos nombres. Seguint el procés TDD, primer escriurem una prova per aquesta funció.

Pas 1: Escriure una Prova que Falli

import unittest

class TestSumar(unittest.TestCase):
    def test_sumar(self):
        self.assertEqual(sumar(2, 3), 5)

if __name__ == '__main__':
    unittest.main()

En aquest punt, si executem la prova, fallarà perquè la funció sumar encara no està definida.

Pas 2: Escriure el Codi Mínim per Passar la Prova

Ara definim la funció sumar perquè la prova passi.

def sumar(a, b):
    return a + b

Si tornem a executar la prova, aquesta hauria de passar.

Pas 3: Refactoritzar

En aquest cas, el codi és prou senzill i no necessita refactorització. Però en projectes més complexos, aquest pas és crucial per mantenir el codi net i mantenible.

Exercicis Pràctics

Exercici 1: Implementar una Funció de Resta

  1. Escriu una prova per una funció restar(a, b) que resti dos nombres.
  2. Implementa la funció restar perquè passi la prova.
  3. Refactoritza el codi si és necessari.

Solució

import unittest

class TestRestar(unittest.TestCase):
    def test_restar(self):
        self.assertEqual(restar(5, 3), 2)

def restar(a, b):
    return a - b

if __name__ == '__main__':
    unittest.main()

Exercici 2: Implementar una Funció de Multiplicació

  1. Escriu una prova per una funció multiplicar(a, b) que multipliqui dos nombres.
  2. Implementa la funció multiplicar perquè passi la prova.
  3. Refactoritza el codi si és necessari.

Solució

import unittest

class TestMultiplicar(unittest.TestCase):
    def test_multiplicar(self):
        self.assertEqual(multiplicar(2, 3), 6)

def multiplicar(a, b):
    return a * b

if __name__ == '__main__':
    unittest.main()

Errors Comuns i Consells

  • No escriure proves suficients: És important cobrir tots els casos possibles, incloent-hi els casos límit i els errors esperats.
  • Refactoritzar sense proves: Sempre assegura't que les proves passen abans i després de refactoritzar el codi.
  • Proves massa complexes: Les proves han de ser simples i fàcils de comprendre. Si una prova és massa complexa, pot ser un senyal que el codi funcional també necessita simplificació.

Conclusió

El Desenvolupament Guiat per Proves és una metodologia poderosa que ajuda a millorar la qualitat del codi i facilita el manteniment del programari. Seguint el cicle "Red-Green-Refactor", els desenvolupadors poden assegurar-se que el seu codi compleix els requisits especificats i és fàcil de mantenir. Practicar TDD requereix disciplina, però els beneficis a llarg termini són significatius.

Curs de Programació en Python

Mòdul 1: Introducció a Python

Mòdul 2: Estructures de Control

Mòdul 3: Funcions i Mòduls

Mòdul 4: Estructures de Dades

Mòdul 5: Programació Orientada a Objectes

Mòdul 6: Gestió de Fitxers

Mòdul 7: Gestió d'Errors i Excepcions

Mòdul 8: Temes Avançats

Mòdul 9: Proves i Depuració

Mòdul 10: Desenvolupament Web amb Python

Mòdul 11: Ciència de Dades amb Python

Mòdul 12: Projecte Final

© Copyright 2024. Tots els drets reservats