Il pulsante funziona, ma il sistema no
Un modulo può mostrare «Invio riuscito» e tuttavia non salvare un cognome con apostrofo oppure esporre dati a un utente non autorizzato. La prova del percorso felice non dimostra la qualità del software.
Analizza questo modulo di adesione. Distingui i comportamenti osservati dai problemi soltanto ipotizzati; verifica input con apostrofi, esito reale del salvataggio e autorizzazioni. Proponi una correzione minima e test riproducibili. [incolla codice]
Bug, sicurezza e manutenzione sono lavori diversi
Un bug altera il risultato; una vulnerabilità espone a un abuso; un problema di manutenzione rende più difficile capire e modificare il progetto. Le tre categorie richiedono prove, priorità e interventi differenti.
Classifica i rilievi di questo codice in bug dimostrabili, rischi di sicurezza da verificare e miglioramenti di manutenzione. Per ciascuno spiega le condizioni e non confondere un sospetto con una prova. [incolla codice]
Prima di revisionare: scopo e contratto
Definisci cosa deve fare il programma, quali dati riceve, che cosa restituisce e quali comportamenti devono restare invariati. Una correzione che cambia il requisito non è una correzione.
Prima di proporre modifiche, ricostruisci il contratto della funzione: input, output, casi limite e comportamenti da preservare. Chiedimi i dettagli mancanti. [incolla codice e requisito]
Versioni e ambiente non sono dettagli
Un suggerimento valido per un runtime moderno può bloccare un server precedente. Specifica linguaggio, versione, librerie, database, sistema operativo e limiti di hosting prima di chiedere codice sostitutivo.
Rivedi questo frammento in ambiente PHP 5.5/5.6 su IIS. Non usare sintassi o funzioni introdotte dopo. Indica le dipendenze non mostrate e proponi test di compatibilità. [incolla codice]
Diagnosi prima delle modifiche
Chiedi all’AI di spiegare la causa probabile e di separare ciò che è dimostrabile dal frammento da ciò che richiede log, configurazioni o test. Evita refactoring estesi durante la ricerca di un singolo bug.
Analizza il problema senza riscrivere subito tutto. Riporta posizione, comportamento atteso, comportamento osservato, ipotesi alternative e prova necessaria per ciascuna. [incolla codice]
Priorità e impatto
Un difetto che permette di leggere documenti altrui ha priorità superiore a un nome di variabile poco chiaro. Valuta gravità, condizioni per attivarlo, probabilità e costo di correzione senza inventare punteggi.
Ordina i problemi individuati per impatto e condizioni di sfruttamento. Evidenzia prima perdita di dati, autorizzazioni, sicurezza e indisponibilità. Motiva ogni priorità. [incolla rilievi]
La modifica minima e i test di regressione
Preferisci cambi circoscritti con un test che fallisce prima e passa dopo, quando possibile. Verifica anche le funzioni già corrette: una riscrittura elegante può introdurre regressioni.
Proponi la modifica minima per il problema descritto e una tabella di test: caso ordinario, limite, input invalido e regressione. Se non puoi eseguire i test, dichiaralo. [incolla codice]
Il laboratorio dello sconto percentuale
Nel libro una funzione Python sottrae 20 da 80 e restituisce 60, mentre uno sconto del 20% dovrebbe produrre 64. La sintassi è valida, ma il significato del parametro è interpretato male. Anche la correzione richiede controlli sui valori e, per importi reali, attenzione a Decimal e arrotondamenti.
Esamina la funzione Python def prezzo_scontato(prezzo, sconto): return prezzo - sconto. Il requisito è applicare uno sconto percentuale. Spiega perché 80 e 20 producono erroneamente 60 invece di 64. Proponi una correzione minima, valida il range 0–100 e descrivi almeno cinque test. Per denaro reale discuti Decimal e arrotondamento.
Le sei domande della sicurezza
Da dove arrivano i dati? Chi può invocare la funzione? Come si proteggono token e segreti? Che succede con input assenti o enormi? Che cosa vedono gli utenti in caso di errore? Quali controlli esterni non compaiono nel frammento?
Applica sei controlli al codice: origine input, permessi, segreti, input limite, errori visibili e controlli esterni. Distingui problemi verificati e verifiche ancora necessarie. [incolla codice]
Evitare falsi positivi e false rassicurazioni
Un framework potrebbe già mitigare un rischio apparentemente visibile; viceversa, un frammento può sembrare innocuo perché manca il codice di autorizzazione. L’AI non può certificare sicurezza senza contesto e prove.
Per ogni possibile vulnerabilità indica: evidenza disponibile, condizioni che la renderebbero reale, controllo esterno da verificare e test sicuro per confermarla o smentirla. Non dichiarare che il codice è sicuro. [incolla codice]
Condividere codice senza esporre dati
Prima di incollare codice in una chat rimuovi credenziali, token API, dati personali, chiavi private e log riservati. Usa un esempio minimo riproducibile che mantenga la struttura tecnica senza divulgare informazioni reali.
Aiutami a creare un esempio minimo riproducibile di questo errore. Indicami quali dati sensibili sostituire con segnaposto prima della condivisione. Non chiedermi credenziali o database completi.
Un report di revisione utilizzabile
Ogni rilievo dovrebbe indicare posizione, comportamento atteso, comportamento osservato o ipotizzato, gravità motivata, condizioni, correzione minima e test. Le prove non eseguite vanno dichiarate come tali.
Restituisci un report strutturato: posizione, categoria, evidenza, condizioni, impatto, priorità, modifica minima e test. Se manca il contesto, fai domande. Non inventare esecuzioni, CVE o risultati. [incolla codice]
14 casi pratici · Dalle prime prove alle revisioni profonde
I primi sette casi riguardano errori comuni; i successivi sette affrontano database, autorizzazioni, upload, dipendenze e regressioni. Per ogni scenario trovi un prompt utilizzabile con il tuo codice, dopo aver rimosso credenziali e dati riservati.
Un CSV con importi decimali
Uno script somma male importi con virgole decimali e righe vuote.
Controlla questo script che legge importi da CSV. Cerca errori di conversione tra virgola e punto, righe vuote e valori non numerici. Spiega come riprodurre il problema con dati fittizi e proponi test prima di modificare il codice.
Modulo di contatto senza conferma
Il form nasconde gli errori e mostra messaggi non affidabili.
Analizza il flusso di questo modulo di contatto. Individua controlli mancanti, messaggi di errore poco chiari e possibili problemi nella gestione dell’invio. Non mostrare dettagli tecnici sensibili agli utenti. Proponi test con indirizzi validi e non validi.
Contatore che riparte da zero
Il contatore JavaScript non conserva il valore dopo il reload.
Esamina questo contatore JavaScript. Spiega perché il valore si perde al ricaricamento, quali possibilità di persistenza esistono e i loro limiti. Proponi la soluzione più semplice per un uso non sensibile e test di ricaricamento.
Pulsante fuori schermo
Un controllo mobile scompare oltre la larghezza disponibile.
Rivedi questo HTML e CSS per individuare problemi di layout responsive, dimensioni dei controlli e navigazione da tastiera. Suggerisci modifiche mirate e una checklist di test su schermi diversi.
Promemoria nel giorno sbagliato
Un appuntamento cambia data per una gestione errata dei fusi orari.
Analizza la gestione di date, fusi orari e formati in questo codice. Distingui orari locali da timestamp UTC. Mostra test per cambio d’ora, fine mese e input incompleti.
Quiz con punteggio doppio
Clic ripetuti assegnano più punti del previsto.
Trova perché questo quiz può assegnare punti più di una volta. Verifica lo stato del pulsante, le richieste ripetute e l’eventuale controllo lato server. Proponi una correzione e test per clic multipli.
Lista che perde modifiche
Salvataggi concorrenti sovrascrivono elementi della lista.
Rivedi il codice che modifica e salva questa lista. Individua possibili problemi di sincronizzazione, identificatori duplicati e sovrascritture. Proponi un modo per riprodurre l’errore senza usare dati reali.
Query SQL concatenate
Un input esterno entra direttamente nella stringa SQL.
Rivedi questo accesso al database e segnala dove l’input esterno entra nella query. Proponi query parametrizzate compatibili con il driver e la versione dichiarati. Non inventare la struttura del database. Includi test con apostrofi e input inattesi.
Commenti mostrati come HTML
Testo non fidato viene interpretato come markup.
Analizza i punti in cui dati non fidati vengono inseriti nell’HTML. Indica i contesti di output e le strategie di escaping appropriate. Considera template e librerie realmente utilizzati. Evita di proporre un unico filtro universale.
Documenti di altri utenti
Un endpoint verifica il login ma non la proprietà del documento.
Esamina i controlli di autorizzazione di questo endpoint. Distingui autenticazione da autorizzazione, individua possibili accessi a oggetti di altri utenti e proponi verifiche lato server. Includi test per utenti diversi.
Upload controllato solo per estensione
L’estensione del file non prova che il contenuto sia sicuro.
Rivedi il flusso di upload. Considera tipo effettivo, limiti di dimensione, nome del file, destinazione, permessi e modalità di distribuzione. Proponi difese a più livelli e test sicuri con file di prova innocui.
Dipendenze non mantenute
L’applicazione usa runtime e librerie obsolete.
Prepara una revisione delle dipendenze a partire da manifest e versioni reali. Distingui incompatibilità, problemi noti da verificare in advisory ufficiali e rischi generici. Proponi un piano di aggiornamento progressivo con test di regressione.
Log con informazioni riservate
I messaggi di errore potrebbero contenere token o dati personali.
Analizza la strategia di logging. Cerca possibili esposizioni di segreti, token e dati personali, eccesso di dettagli nelle risposte e mancanza di correlazione tra eventi. Suggerisci mascheramento, livelli di log e test.
Refactoring che rompe una funzione
Una riscrittura fa fallire test prima funzionanti.
Confronta versione precedente e nuova di questa funzione. Identifica differenze di comportamento, contratti impliciti e casi limite. Proponi un piano di rollback e test di regressione. Se non puoi eseguire il codice, dichiaralo esplicitamente.
Sei domande da fare prima di pubblicare
Da dove arrivano i dati? Chi può chiamare la funzione? Come sono protetti i segreti? Che cosa accade con input assenti o inattesi? Quali errori vengono mostrati agli utenti? Quali controlli esterni non compaiono nel frammento?
Una risposta generata dall’AI non sostituisce test, analisi delle dipendenze e revisione umana per sistemi sensibili. La diagnosi deve sempre distinguere prove, ipotesi e consigli.
Agisci come revisore di codice esperto e prudente. Analizza [linguaggio, versione, framework, ambiente, scopo]. Suddividi i rilievi in (A) bug dimostrabili, (B) possibili vulnerabilità da verificare, (C) miglioramenti di qualità. Per ciascuno indica posizione, causa, condizioni, impatto, priorità motivata, correzione minima e test. Non inventare test eseguiti, CVE o componenti non mostrati. [incolla codice]
🔎 Prima e dopo · Quattro esempi inediti
Seleziona uno scenario: una diagnosi professionale descrive il sintomo, formula ipotesi e propone test prima di riscrivere il codice.
Il timer va, quindi il programma è a posto.
Il timer parte, ma dopo il cambio d’ora l’irrigazione si attiva un’ora prima. Prima verifico il fuso orario usato per memorizzare l’orario e preparo test sul cambio d’ora.
Revisiona questo scheduler per irrigazione. Distingui orario locale e UTC, identifica la causa del disallineamento solo se dimostrabile dal codice. Proponi test sul cambio d’ora e modifica minima. [incolla codice]
🛠️ Code Review Lab · Crea il tuo prompt
Incolla soltanto codice che puoi condividere: elimina password, token e dati personali. Il laboratorio costruisce un prompt da utilizzare in ChatGPT, senza inviare codice a servizi esterni.
🧠 Quiz finale · Capitolo 33
Tre domande per verificare i concetti. Dopo la correzione vedrai soltanto ✓ o ✗ accanto alla risposta selezionata.
1. Quale rilievo può essere considerato un bug certo?
2. Come deve comportarsi un revisore AI se manca il contesto di sicurezza?
3. Che cosa accompagna una buona correzione?
Rispondi alle tre domande per vedere il punteggio.
I progressi del quiz sono salvati su questo dispositivo.