glossario operativo
Glossario del Debugging
107 termini raccolti nel corso. Ogni voce rimanda alla lezione dove viene introdotta.
Fondamenta
- bug
-
Scostamento misurabile tra ciò che il programma promette di fare e ciò che fa davvero.
→ Che cos'è un bug e che cosa non lo è
Vedi anche: specifica, limitazione
- limitazione
-
Comportamento sgradevole ma documentato e accettato. Non è un bug se la documentazione lo dichiara.
- richiesta di funzionalità
-
Qualcosa che il programma non fa e mai ha promesso di fare. Va trattata come nuova feature, non come fix.
- malinteso d'uso
-
Il programma fa esattamente ciò che è stato chiesto, ma l'utente si aspettava altro. Serve migliorare UX, non codice.
- compile-time (parse-time)
-
Momento in cui il codice viene tradotto, analizzato o caricato. Errori che bloccano l'avvio.
- runtime
-
Ambiente che esegue il codice (browser, Node.js, JVM). Anche: momento in cui il programma viene eseguito.
- errore logico (semantico)
-
Il programma gira senza protestare ma produce un risultato sbagliato. Silenzioso, scoperto solo da test o occhio umano.
- DevTools
-
Pannello del browser per ispezionare, profilare e debuggare. Console, Sources, Network, Application, Performance, Memory.
- linter
-
Programma che segnala errori e cattive pratiche nel codice mentre scrivi. Es. ESLint per JavaScript.
Memoria ed esecuzione
- stack
-
Pila delle chiamate in corso (LIFO). Funzione corrente in cima, chiamanti sotto.
→ Glossario operativo del debugger
Vedi anche: stack trace, heap
- heap
-
Zona di memoria capiente e disordinata dove vivono oggetti e dati a vita lunga.
- garbage collector (GC)
-
Meccanismo che libera memoria automaticamente quando nessuno trattiene riferimenti agli oggetti.
- heap snapshot
-
Fotografia dell'heap in un istante. Si confronta con un secondo snapshot per scoprire chi cresce.
- memory leak
-
Memoria mai rilasciata. Listener non rimossi, timer pendenti, sottoscrizioni store aperte.
Errori e stack trace
- stack trace
-
Pila delle chiamate al momento dell'errore. Si legge dall'innermost (in alto) al chiamante più esterno.
- TypeError
-
Stai usando un valore in modo incompatibile col suo tipo. Es. `null.x`, `arr is not a function`.
- RangeError
-
Valore fuori range. Es. array negativo, ricorsione infinita.
- SyntaxError
-
Codice non valido a parse-time. Spesso senza stack utile.
- ReferenceError
-
Stai usando un nome non definito nello scope.
- Error.cause
-
Proprietà per concatenare errori: l'errore alto preserva la causa originaria.
- async stack trace
-
Stack che attraversa await e promise mostrando la catena logica, non solo quella tecnica.
- source map
-
File `.map` che collega bundle minificato a sorgente originale. Senza, errori in produzione illeggibili.
Riproduzione e indagine
- bug report
-
Scheda strutturata: titolo, ambiente, passi, atteso, osservato, evidenze, severità.
- passi (steps to reproduce)
-
Sequenza esatta di azioni per riprodurre il bug.
- severità
-
Impatto tecnico/utente del bug. Da non confondere con priorità.
Vedi anche: priorità
- priorità
-
Urgenza di lavorarci. Decisione business, separata dalla severità tecnica.
- regressione
-
Comportamento che funzionava in una versione precedente e ora non funziona più.
- flaky bug
-
Difetto intermittente, senza causa scatenante chiara. Richiede stabilizzazione prima dell'indagine.
- caso minimo riproducibile (MCVE/MRE)
-
Versione più piccola del problema che conserva il difetto. Risultato della bisezione su codice e dati.
- taccuino di laboratorio
-
Registro cronologico della sessione di debug: ora, ipotesi, prova, esito.
- ipotesi falsificabile
-
Spiegazione che può essere dichiarata sbagliata da una prova specifica. Cuore del metodo scientifico applicato al debug.
- rubber duck
-
Pratica di spiegare il problema a voce alta (anche a un peluche) per esplicitare assunzioni nascoste.
- delta debugging (ddmin)
-
Algoritmo di Andreas Zeller che minimizza automaticamente un input che produce un bug.
- git bisect
-
Strumento Git per ricerca binaria nella cronologia dei commit. Trova in log₂(N) passi il commit colpevole.
- feature flag
-
Interruttore booleano che abilita/disabilita una funzionalità. Utile per indagine reversibile e per kill switch.
Osservazione
- log strutturato
-
Log in JSON con campi chiave-valore. Filtrabile, aggregabile, machine-readable.
- breakpoint
-
Punto del codice dove il debugger ferma l'esecuzione per ispezionare.
- breakpoint condizionato
-
Si attiva solo se una condizione è vera. Risparmia ore in cicli grandi.
- logpoint
-
Come un breakpoint, ma stampa senza fermare. Permette console.log senza toccare i sorgenti.
- watch expression
-
Espressione la cui valutazione si aggiorna ad ogni step del debugger.
- throttling
-
Rallentamento volontario (rete, CPU) per simulare condizioni reali o osservare meglio.
- payload
-
Corpo del messaggio HTTP (request body o response body).
Correzione
- fix minimo
-
Modifica più piccola che corregge il bug e niente altro. Senza refactor opportunistici.
- test di regressione
-
Test scritto per impedire al bug di tornare. Deve fallire prima del fix e passare dopo.
- fixture
-
Dato di prova fissato, riproducibile, usato per produrre sempre lo stesso comportamento.
- boundary value analysis
-
Tecnica di testing che si concentra sui confini del dominio (0, vuoto, max, min).
- equivalence partitioning
-
Divisione del dominio in classi che si comportano uguale. Una fixture per classe.
- fix-forward
-
Applicare un nuovo commit che corregge, senza tornare indietro.
- git revert
-
Comando Git che crea un nuovo commit annullando l'effetto di un commit precedente. Non distrugge la storia.
- hotfix branch
-
Branch dedicato che parte dalla release in produzione, riceve solo il fix urgente, viene rilasciato fuori dal ciclo normale.
- Conventional Commits
-
Convenzione che struttura il messaggio: `<tipo>(<scope>): <subject>`. Tipi: fix, feat, refactor, docs, ecc.
- regola 50/72
-
Subject del commit max 50 caratteri, body max 72 colonne per riga. Garantisce leggibilità ovunque.
Collaborazione
- handoff
-
Passaggio di contesto da una persona all'altra. Include bug report, riproduzione, ipotesi escluse, stato attuale.
- issue triage
-
Classificazione dei ticket per severità, priorità, owner e SLA.
- pair debugging
-
Debug in due con ruoli (driver, navigator, scriba) e rotazione a timer.
- blameless postmortem
-
Retrospettiva che si concentra su sistemi e processi, non su persone. Nome usato anche solo `blameless`.
- 5 whys
-
Tecnica di Toyota: chiedi 'perché?' cinque volte fino ad arrivare alla causa radice.
- causa radice (root cause)
-
Fattore profondo che ha reso possibile il bug, non solo il sintomo immediato.
Asincronia
- event loop
-
Meccanismo single-threaded che alterna esecuzione di task, microtask e rendering.
- microtask
-
Task ad alta priorità (Promise, queueMicrotask, MutationObserver). Eseguito tra macrotask.
- macrotask
-
Task normale (setTimeout, eventi DOM, fetch response). Eseguito dopo le microtask.
- Promise
-
Oggetto che rappresenta un valore futuro. Stati: pending, fulfilled, rejected.
- unhandled rejection
-
Rejection di una Promise senza catch. Catturabile con `unhandledrejection` (browser) o `process.on` (Node).
- race condition
-
Due eventi competono, l'ordine non garantisce coerenza. Esempi: doppio submit, stale closure, setState dopo unmount.
- AbortController / AbortSignal
-
Meccanismo standard per cancellare fetch, listener e altre operazioni asincrone.
- stale closure
-
Closure che cattura un valore vecchio. Bug ricorrente in hook React con dipendenze sbagliate.
- debounce
-
Aspetta che la sorgente di eventi si fermi N ms prima di chiamare il callback.
- throttle
-
Limita a una chiamata ogni N ms indipendentemente dalla frequenza degli eventi.
- Service Worker
-
Script che intercetta le richieste della pagina. Spesso causa di cache aggressiva nei bug 'la vecchia versione torna'.
Backend, dati, integrazioni
- contratto API
-
Accordo esplicito tra producer e consumer di un'API: nomi, tipi, valori, formati.
- JSON Schema
-
Descrizione formale della struttura di dati JSON. Validabile a runtime con librerie come ajv.
- OpenAPI
-
Standard di descrizione di API REST. Genera client tipizzati e validazione automatica.
- 401 Unauthorized
-
'Non so chi sei'. Token mancante, scaduto o invalido. Non confondere con 403.
- 403 Forbidden
-
'So chi sei ma non puoi'. Il ruolo non ha permessi per questa operazione.
- JWT (JSON Web Token)
-
Token firmato in tre parti (header.payload.signature). Claim standard: sub, iat, exp, aud, iss.
- CORS
-
Meccanismo che limita richieste cross-origin lato browser. Risolto con header `Access-Control-*` lato server.
- preflight OPTIONS
-
Richiesta automatica del browser prima di una chiamata cross-origin non semplice. Verifica permessi.
- SameSite cookie
-
Flag che limita l'invio cross-origin dei cookie. Valori: Strict, Lax, None.
- EXPLAIN
-
Comando SQL che mostra il piano di esecuzione di una query. Strumento di base per query lente.
- migrazione
-
Modifica strutturale del database (nuova colonna, indice, vincolo). Da fare in due fasi per evitare downtime.
- UTC
-
Coordinated Universal Time. Fuso 'zero' di riferimento. Regola: salva sempre in UTC, mostra sempre in locale.
- ISO 8601
-
Formato standard per date: `2025-05-16T14:30:00Z`. Universalmente parsabile.
- idempotenza
-
Ripetere l'operazione produce lo stesso risultato del farla una volta. Critica per retry sicuri.
- Idempotency-Key
-
Header HTTP che identifica una richiesta univoca. Permette retry sicuri senza creare duplicati.
- backoff esponenziale
-
Pausa tra retry che cresce esponenzialmente (es. 300, 600, 1200 ms) con jitter casuale.
- dead letter queue (DLQ)
-
Coda dove finiscono messaggi non processabili dopo tutti i retry. Si indaga e reprocessa con calma.
- lock file
-
File (`package-lock.json`, `yarn.lock`, `Cargo.lock`) che fissa versioni esatte di tutte le dipendenze.
Performance e osservabilità
- LCP (Largest Contentful Paint)
-
Tempo di rendering dell'elemento principale del viewport. Target < 2.5s.
- INP (Interaction to Next Paint)
-
Latenza tra interazione utente e prossimo paint. Target < 200ms.
- CLS (Cumulative Layout Shift)
-
Somma degli spostamenti di layout inattesi. Target < 0.1.
- TTFB (Time To First Byte)
-
Tempo dal click al primo byte di risposta. Target < 800ms.
- User Timing API
-
`performance.mark` e `performance.measure` per marcare e misurare blocchi di codice.
- Lighthouse
-
Strumento di audit di performance, accessibilità, SEO. Misura simulata, non utenti reali.
- flamegraph
-
Visualizzazione di stack di chiamata in cui la larghezza = tempo. Rivela hot path.
- hot path
-
Percorso di codice dove si concentra il tempo di esecuzione. Bersaglio dell'ottimizzazione.
- sampling profiler
-
Profiler che registra lo stack ad intervalli regolari. Leggero ma statistico.
- OpenTelemetry
-
Standard per log, metriche e trace distribuiti. Supportato da molti vendor (Jaeger, Honeycomb, Datadog).
- correlation id (trace id)
-
Id univoco che lega log, metriche e trace di una stessa richiesta. Indispensabile in sistemi distribuiti.
- RED
-
Rate, Errors, Duration. Tre metriche di base per ogni servizio.
- USE
-
Utilization, Saturation, Errors. Tre metriche di base per ogni risorsa (CPU, RAM, disco).
- SLI (Service Level Indicator)
-
Misura concreta della qualità di servizio (es. `% richieste < 500ms`).
- SLO (Service Level Objective)
-
Target dell'SLI in un periodo (es. `99% richieste < 500ms in 30 giorni`).
- error budget
-
Margine di errore tollerato dato lo SLO. Esauritо → si ferma il rilascio di feature e si lavora su stabilità.
- incident commander
-
Persona che coordina la war room durante un incidente. Non scrive codice, prende decisioni.
- status page
-
Pagina pubblica dello stato del servizio. Stati: Investigating, Identified, Monitoring, Resolved.
- MTTR (Mean Time To Recovery)
-
Tempo medio di recupero da un incidente. Metrica aggregata di processo.
- postmortem
-
Documento scritto dopo un incidente. Timeline, cause, lezioni, azioni correttive.