En aquest tema, ens centrarem en les tècniques de proves i depuració que són essencials per garantir que el teu projecte final funcioni correctament i estigui lliure d'errors. Aprendrem com identificar i corregir errors, així com assegurar-nos que el codi compleixi amb els requisits especificats.
Objectius d'Aprenentatge
- Comprendre la importància de les proves i la depuració en el desenvolupament de programari.
- Aprendre a escriure proves unitàries per verificar la funcionalitat del codi.
- Utilitzar eines de depuració per identificar i corregir errors en el codi.
- Aplicar tècniques de desenvolupament guiat per proves (TDD).
Contingut
- Importància de les Proves i la Depuració
- Proves: Asseguren que el codi compleixi amb els requisits i funcioni correctament en diferents escenaris.
- Depuració: Identifica i corregeix errors en el codi, millorant la qualitat i la robustesa del programari.
- Tipus de Proves
- Proves Unitàries: Verifiquen la funcionalitat de components individuals del codi.
- Proves d'Integració: Asseguren que diferents components del sistema funcionin correctament junts.
- Proves de Sistema: Verifiquen el sistema complet per assegurar-se que compleix amb els requisits especificats.
- Proves d'Acceptació: Validen que el sistema compleixi amb les expectatives i necessitats de l'usuari final.
- Escriptura de Proves Unitàries amb
unittest
unittest
El mòdul unittest
és una biblioteca estàndard de Python per escriure i executar proves unitàries.
Exemple de Prova Unitària
import unittest def suma(a, b): return a + b class TestSuma(unittest.TestCase): def test_suma_positius(self): self.assertEqual(suma(1, 2), 3) def test_suma_negatius(self): self.assertEqual(suma(-1, -1), -2) def test_suma_zero(self): self.assertEqual(suma(0, 0), 0) if __name__ == '__main__': unittest.main()
Explicació:
unittest.TestCase
: Classe base per crear noves proves.self.assertEqual
: Mètode per verificar que el resultat de la funció és l'esperat.if __name__ == '__main__'
: Permet executar les proves quan el fitxer es corre directament.
- Desenvolupament Guiat per Proves (TDD)
El TDD és una metodologia de desenvolupament on les proves es creen abans del codi funcional.
Passos del TDD
- Escriure una prova que falli.
- Escriure el codi mínim necessari per passar la prova.
- Refactoritzar el codi per millorar la seva qualitat mantenint les proves passant.
- Eines de Depuració
- Print Statements: Inserir declaracions
print
per mostrar valors de variables i fluxos de control. - PDB (Python Debugger): Eina integrada per depurar codi Python.
Exemple d'Ús de PDB
Explicació:
pdb.set_trace()
: Pausa l'execució del programa i obre una sessió interactiva de depuració.
- Exercicis Pràctics
Exercici 1: Escriure Proves Unitàries
Escriu proves unitàries per la següent funció que calcula el factorial d'un nombre.
Solució
import unittest class TestFactorial(unittest.TestCase): def test_factorial_zero(self): self.assertEqual(factorial(0), 1) def test_factorial_positiu(self): self.assertEqual(factorial(5), 120) def test_factorial_un(self): self.assertEqual(factorial(1), 1) if __name__ == '__main__': unittest.main()
Exercici 2: Depuració amb PDB
Depura el següent codi per trobar i corregir l'error.
Solució
import pdb def divideix(a, b): pdb.set_trace() if b == 0: raise ValueError("El divisor no pot ser zero") return a / b print(divideix(4, 0))
- Resum
En aquesta secció, hem après la importància de les proves i la depuració en el desenvolupament de programari. Hem explorat com escriure proves unitàries amb unittest
, aplicar el TDD i utilitzar eines de depuració com PDB. Aquests coneixements són essencials per garantir que el teu projecte final funcioni correctament i compleixi amb els requisits especificats.
Amb això, estàs preparat per abordar la fase de proves i depuració del teu projecte final. Bona sort!
Curs de Programació en Python
Mòdul 1: Introducció a Python
- Introducció a Python
- Configuració de l'Entorn de Desenvolupament
- Sintaxi de Python i Tipus de Dades Bàsics
- Variables i Constants
- Entrada i Sortida Bàsiques
Mòdul 2: Estructures de Control
Mòdul 3: Funcions i Mòduls
- Definició de Funcions
- Arguments de Funció
- Funcions Lambda
- Mòduls i Paquets
- Visió General de la Biblioteca Estàndard
Mòdul 4: Estructures de Dades
Mòdul 5: Programació Orientada a Objectes
Mòdul 6: Gestió de Fitxers
- Lectura i Escriptura de Fitxers
- Treballant amb Fitxers CSV
- Gestió de Dades JSON
- Operacions amb Fitxers i Directoris
Mòdul 7: Gestió d'Errors i Excepcions
Mòdul 8: Temes Avançats
- Decoradors
- Generadors
- Gestors de Context
- Concurrència: Fils i Processos
- Asyncio per a Programació Asíncrona
Mòdul 9: Proves i Depuració
- Introducció a les Proves
- Proves Unitàries amb unittest
- Desenvolupament Guiat per Proves
- Tècniques de Depuració
- Ús de pdb per a la Depuració
Mòdul 10: Desenvolupament Web amb Python
- Introducció al Desenvolupament Web
- Conceptes Bàsics del Framework Flask
- Construcció d'APIs REST amb Flask
- Introducció a Django
- Construcció d'Aplicacions Web amb Django
Mòdul 11: Ciència de Dades amb Python
- Introducció a la Ciència de Dades
- NumPy per al Càlcul Numèric
- Pandas per a la Manipulació de Dades
- Matplotlib per a la Visualització de Dades
- Introducció al Machine Learning amb scikit-learn