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.

  1. 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.

  1. 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:

luarocks install luaunit

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

  1. Importació de LuaUnit: local luaunit = require('luaunit')
  2. Funció a provar: suma(a, b) que retorna la suma de dos números.
  3. Definició de les proves: Creem una taula TestSuma amb funcions que contenen les proves.
  4. Proves: Utilitzem luaunit.assertEquals per verificar que la funció suma retorna el valor esperat.
  5. Execució de les proves: os.exit(luaunit.LuaUnit.run()) executa totes les proves definides.

  1. 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

  1. 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:

function factorial(n)
    if n == 0 then
        return 1
    else
        return n * factorial(n - 1)
    end
end

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:

function mitjana(a, b)
    return a + b / 2
end

print(mitjana(10, 20))  -- Sortida esperada: 15

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

  1. 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.

© Copyright 2024. Tots els drets reservats