En aquest tema, aprendrem com assegurar-nos que el nostre codi funcioni correctament mitjançant proves i com identificar i corregir errors (depuració). Aquestes habilitats són essencials per a qualsevol programador, ja que ajuden a garantir que el codi sigui robust i fiable.
- Importància de les Proves
Les proves són una part fonamental del desenvolupament de programari. Ens permeten verificar que el nostre codi fa el que esperem i que no introdueix errors nous quan fem canvis. Hi ha diversos tipus de proves, però ens centrarem en les proves unitàries.
Tipus de Proves
- Proves Unitàries: Verifiquen el funcionament de components individuals del codi.
- Proves d'Integració: Verifiquen que diferents components del sistema funcionen correctament junts.
- Proves de Sistema: Verifiquen el sistema complet per assegurar-se que compleix els requisits especificats.
- Proves de Regressió: Asseguren que els canvis en el codi no introdueixen nous errors.
- Eines de Proves en Lua
Per a les proves unitàries en Lua, una de les eines més populars és LuaUnit. LuaUnit és un framework de proves unitàries que ens permet escriure i executar proves de manera senzilla.
Instal·lació de LuaUnit
Per instal·lar LuaUnit, podem utilitzar LuaRocks, el gestor de paquets de Lua:
Exemple de Prova amb LuaUnit
A continuació, es mostra un exemple de com escriure una prova unitària amb LuaUnit:
-- Importem LuaUnit local luaunit = require('luaunit') -- Funció a provar function suma(a, b) return a + b end -- Definim les proves TestSuma = {} function TestSuma:testSumaPositiva() luaunit.assertEquals(suma(1, 2), 3) end function TestSuma:testSumaNegativa() luaunit.assertEquals(suma(-1, -2), -3) end -- Executem les proves os.exit(luaunit.LuaUnit.run())
Explicació del Codi
- Importació de LuaUnit:
local luaunit = require('luaunit')
- Funció a provar:
suma(a, b)
que retorna la suma de dos números. - Definició de les proves: Creem una taula
TestSuma
amb funcions que contenen les proves. - Proves: Utilitzem
luaunit.assertEquals
per verificar que la funciósuma
retorna el valor esperat. - Execució de les proves:
os.exit(luaunit.LuaUnit.run())
executa totes les proves definides.
- Depuració
La depuració és el procés d'identificar i corregir errors en el codi. Lua proporciona diverses eines i tècniques per ajudar-nos en aquest procés.
Eines de Depuració
- print: La manera més senzilla de depurar és utilitzar la funció
print
per mostrar valors de variables i missatges de depuració. - debug: Lua té una biblioteca de depuració integrada anomenada
debug
que proporciona funcions avançades per inspeccionar l'estat del programa.
Exemple de Depuració amb print
function divideix(a, b) print("a:", a, "b:", b) -- Mostrem els valors de les variables if b == 0 then error("Divisió per zero!") end return a / b end print(divideix(10, 2)) -- Sortida esperada: 5 print(divideix(10, 0)) -- Provoca un error: Divisió per zero!
Exemple de Depuració amb la Biblioteca debug
function divideix(a, b) if b == 0 then debug.debug() -- Inicia una sessió de depuració interactiva error("Divisió per zero!") end return a / b end print(divideix(10, 2)) -- Sortida esperada: 5 print(divideix(10, 0)) -- Provoca una sessió de depuració interactiva
- Exercicis Pràctics
Exercici 1: Escriure Proves Unitàries
Escriu proves unitàries per a la següent funció que calcula el factorial d'un nombre:
Solució
local luaunit = require('luaunit') TestFactorial = {} function TestFactorial:testFactorialZero() luaunit.assertEquals(factorial(0), 1) end function TestFactorial:testFactorialPositiu() luaunit.assertEquals(factorial(5), 120) end os.exit(luaunit.LuaUnit.run())
Exercici 2: Depuració d'Errors
Depura el següent codi que conté un error:
Solució
function mitjana(a, b) print("a:", a, "b:", b) -- Mostrem els valors de les variables return (a + b) / 2 -- Corregim l'error de precedència d'operadors end print(mitjana(10, 20)) -- Sortida esperada: 15
- Resum
En aquesta secció, hem après la importància de les proves i la depuració en el desenvolupament de programari. Hem vist com utilitzar LuaUnit per escriure proves unitàries i com utilitzar tècniques de depuració per identificar i corregir errors en el nostre codi. Aquestes habilitats són essencials per garantir que el nostre codi sigui fiable i robust.
Curs de Programació en Lua
Mòdul 1: Introducció a Lua
Mòdul 2: Conceptes Bàsics
Mòdul 3: Conceptes Intermedis
Mòdul 4: Conceptes Avançats
- Coroutines
- Programació Orientada a Objectes en Lua
- Tècniques de Depuració
- Optimització del Rendiment
- Ús de l'API C de Lua
Mòdul 5: Aplicacions Pràctiques
- Construcció d'un Joc Simple
- Scripting en Motors de Joc
- Automatització de Tasques amb Lua
- Integració de Lua amb Altres Llenguatges