Les proves unitàries són un component fonamental en el procés de desenvolupament de programari, ja que permeten verificar que cada unitat de codi funcioni correctament de manera independent. Aquest mòdul t'introduirà als conceptes bàsics de les proves unitàries, les seves millors pràctiques i com implementar-les efectivament.
Què són les Proves Unitàries?
Les proves unitàries són proves automatitzades que verifiquen el funcionament correcte d'una unitat de codi, com ara una funció o un mètode. Aquestes proves es realitzen per assegurar que cada part del codi compleixi amb les especificacions i funcioni com s'espera.
Objectius de les Proves Unitàries:
- Verificació de Funcionalitat: Assegurar que cada unitat de codi compleixi amb els requisits funcionals.
- Detecció Primerenca d'Errors: Identificar errors en fases inicials del desenvolupament, reduint el cost de correcció.
- Facilitat de Manteniment: Proporcionar una base per a la refactorització segura del codi.
- Documentació del Codi: Servir com a documentació viva que descriu el comportament esperat del codi.
Millors Pràctiques per a les Proves Unitàries
- Provar una Cosa a la Vez: Cada prova unitària ha de centrar-se en una única funcionalitat o cas d'ús.
- Independència de les Proves: Les proves han de ser independents entre si, de manera que el resultat d'una no afecti les altres.
- Execució Ràpida: Les proves unitàries han de ser ràpides d'executar per facilitar la seva execució freqüent.
- Nomenclatura Clara: Utilitzar noms descriptius per a les proves que indiquin clarament què estan provant.
- Cobertura de Codi: Assegurar una alta cobertura de codi, però sense obsessionar-se amb el 100%.
Exemple Pràctic
A continuació, es mostra un exemple de prova unitària utilitzant el llenguatge Python i el framework unittest
.
Codi a Provar
Prova Unitària
import unittest 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ó del Codi
unittest
: És un framework de proves integrat en Python que proporciona eines per crear i executar proves unitàries.TestSuma
: És una classe que hereta deunittest.TestCase
i conté els mètodes de prova.test_suma_positius
: Prova la funciósuma
amb nombres positius.test_suma_negatius
: Prova la funciósuma
amb nombres negatius.test_suma_zero
: Prova la funciósuma
amb zeros.assertEqual
: Comprova que el resultat de la funciósuma
sigui igual al valor esperat.
Exercicis Pràctics
-
Exercici 1: Escriu una funció
multiplica(a, b)
i crea proves unitàries per verificar el seu funcionament amb nombres positius, negatius i zero. -
Exercici 2: Refactoritza la funció
suma
per manejar excepcions quan els arguments no siguin números i escriu proves unitàries per verificar aquest comportament.
Solucions
Solució Exercici 1
def multiplica(a, b): return a * b class TestMultiplica(unittest.TestCase): def test_multiplica_positius(self): self.assertEqual(multiplica(2, 3), 6) def test_multiplica_negatius(self): self.assertEqual(multiplica(-2, -3), 6) def test_multiplica_zero(self): self.assertEqual(multiplica(0, 5), 0) if __name__ == '__main__': unittest.main()
Solució Exercici 2
def suma(a, b): if not isinstance(a, (int, float)) or not isinstance(b, (int, float)): raise ValueError("Els arguments han de ser números") 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) def test_suma_excepcio(self): with self.assertRaises(ValueError): suma("a", 1) if __name__ == '__main__': unittest.main()
Conclusió
Les proves unitàries són essencials per garantir la qualitat del codi i facilitar el manteniment i l'evolució del programari. Implementar proves unitàries de manera efectiva pot ajudar a detectar errors en fases primerenques i assegurar que el codi compleixi amb els requisits funcionals. En el següent tema, explorarem les proves d'integració, que ens permetran verificar la interacció entre diferents unitats de codi.
Qualitat del Programari i Millors Pràctiques
Mòdul 1: Introducció a la Qualitat del Programari
- Què és la Qualitat del Programari?
- Importància de la Qualitat del Programari
- Atributs de Qualitat
- Cicle de Vida del Desenvolupament de Programari (SDLC)
Mòdul 2: Fonaments de les Proves de Programari
- Introducció a les Proves de Programari
- Tipus de Proves
- Planificació i Disseny de Proves
- Execució i Informes de Proves
Mòdul 3: Qualitat del Codi i Millors Pràctiques
- Conceptes Bàsics de la Qualitat del Codi
- Estàndards i Directrius de Codificació
- Revisions de Codi i Programació en Parella
- Tècniques de Refactorització
Mòdul 4: Proves Automatitzades
- Introducció a les Proves Automatitzades
- Proves Unitàries
- Proves d'Integració
- Integració i Proves Contínues
Mòdul 5: Tècniques Avançades de Proves
- Proves de Rendiment
- Proves de Seguretat
- Proves d'Usabilitat
- Marcs de Treball d'Automatització de Proves
Mòdul 6: Processos d'Assegurament de la Qualitat
- Assegurament de la Qualitat vs. Control de Qualitat
- Models de Millora de Processos
- Gestió de Riscos en Projectes de Programari
- Mètriques i Mesurament
Mòdul 7: Millors Pràctiques en el Desenvolupament de Programari
- Pràctiques Àgils i Lean
- DevOps i Lliurament Continu
- Documentació i Compartició de Coneixement
- Consideracions Ètiques en el Desenvolupament de Programari