14 / 100 SEO Score

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:

  1. Evitar el “Garbage In, Garbage Out”: Si guardem un DNI malament, mai podrem vincular correctament les tasques d’aquell usuari en el futur.
  2. Consistència: El format 12345678Z ha 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 bloc try envolta només el codi perillós. L’ús de ValueError permet 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.