La depuració (o debugging) no és només l’acte de “arreglar el que està trencat”. En un entorn de producció, és una estratègia de defensa i una peça clau de l’experiència d’usuari (UX). Un programa que falla sense explicació perd la confiança de l’usuari; un programa que no valida entrades és una porta oberta a atacants.
1. La Depuració com a pilar de Seguretat i UX
Seguretat: El perill de la confiança
Si no depurem i validem, el sistema pot ser vulnerable a injeccions de codi o desbordaments de memòria. La depuració permet identificar on el codi és “fràgil” davant d’entrades inesperades que un atacant podria aprofitar per saltar-se la lògica de negoci.
UX: La fallida silenciosa vs. la fallida graciosa
- Crash (Mala UX): L’usuari prem un botó, l’aplicació es tanca o mostra un error
500 Internal Server Error. L’usuari se sent frustrat i perd les dades no guardades. - Gestió d’errors (Bona UX): El sistema detecta l’error, l’atura abans que bloquegi el servidor i mostra un missatge amable: “Sembla que el format del DNI no és correcte, si us plau, revisa-ho”.
2. Validació d’Entrades i Integritat de Dades
Validar dades com el DNI o el Correu Electrònic no és només per estètica, sinó per garantir la integritat referencial:
- Evitar el “Garbage In, Garbage Out”: Si guardem un DNI malament, mai podrem vincular correctament les tasques d’aquell usuari en el futur.
- Consistència: El format
12345678Zha de ser universal en tota la base de dades per permetre cerques i índexs eficients.
3. Implementació en Python
A continuació, presento un exemple d’un mòdul de registre d’usuaris que utilitza blocs try-except, validacions amb expressions regulars (Regex) i un sistema de logs professional.
Python
import re
import logging
# Configuració del sistema de logs per rastrejar errors complexos
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler("app_errors.log"), # Desa els errors en un fitxer
logging.StreamHandler() # També els mostra per terminal
]
)
def validar_dni(dni):
"""Valida si un DNI té 8 números i una lletra correcta."""
lletres = "TRWAGMYFPDXBNJZSQVHLCKE"
if not re.match(r"^\d{8}[A-Z]$", dni):
return False
# Lògica matemàtica del DNI
numero = int(dni[:8])
lletra = dni[8]
return lletres[numero % 23] == lletra
def validar_email(email):
"""Valida el format d'un correu electrònic."""
regex = r'^[a-z0-9]+[\._]?[a-z0-9]+[@]\w+[.]\w{2,3}$'
return re.search(regex, email)
def processar_registre(dades_usuari):
"""Funció principal amb gestió d'errors."""
try:
logging.info(f"Intentant processar registre per: {dades_usuari.get('email')}")
# 1. Validació de dades
email = dades_usuari.get('email')
dni = dades_usuari.get('dni')
if not validar_email(email):
raise ValueError(f"Format de correu invàlid: {email}")
if not validar_dni(dni):
raise ValueError(f"DNI no vàlid o lletra incorrecta: {dni}")
# Simulació d'inserció a base de dades
logging.info("Usuari validat correctament. Guardant a la BD...")
# Aquí aniria la lògica de la PK i FK comentada anteriorment
except ValueError as ve:
# Errors controlats de validació (UX)
logging.warning(f"Error de validació: {ve}")
return {"status": "error", "message": str(ve)}
except Exception as e:
# Errors crítics (Seguretat/Sistema)
logging.error(f"Error crític inesperat: {e}", exc_info=True)
return {"status": "error", "message": "S'ha produït un error intern. Torni a intentar-ho més tard."}
# --- CAS D'ÚS ---
usuari_exemple = {"email": "alumne@codi.cat", "dni": "12345678Z"}
resultat = processar_registre(usuari_exemple)
print(resultat)
Vegem el procés de depuració de codi Python al Visual studio code.
Primer necessitem un codi, així que demanarem a qualsevol IA (Intel·ligència Artificial) el codi de depuració.Un cop tinguem el nostre codi
Obriu el codi del Visual Studio i a la part superior esquerra hi haurà l’opció d‘obrir un fitxer nou.

Després d’obrir el fitxer, enganxeu el vostre codi de depuració al fitxer.

després d’enganxar el codi al fitxer superior inferior hi haurà l’opció d’Executar(Run) el codi,Feu clic a la primera opció.

Després d’això ens demanen que seleccionem una opció de les llibreria per depuracio del codi.farem clic a la primera opció que també estigui marcada suggerit(Suggested).


I després a la part superior apareixerà un terminal i allà hi haurà escrit que la depuració s’ha fet o si es produeix algun error, que ens ho recordarà.

Justificació dels elements utilitzats:
try-except-else: El bloctryenvolta només el codi perillós. L’ús deValueErrorpermet separar els errors d’usuari (dades mal introduïdes) dels errors de sistema (caiguda de la base de dades).logging.error(..., exc_info=True): Això és vital per a la depuració. Captura el stack trace complet (la línia exacta on ha fallat), facilitant la feina al programador sense mostrar aquesta informació sensible a l’usuari final.- Regex (
re): Garanteix que les dades segueixen un patró estricte abans de ser processades, actuant com un filtre de seguretat.