ACCADEMIA AI · CAPITOLO 33 DI 50

Capitolo 33 · Revisore di codice

Trova bug, problemi di sicurezza e suggerisci miglioramenti verificabili.

revisione prudente del codice14 casi praticiPrompt copiabiliCode Review Lab
Progresso di lettura: 0%
Tutte le 50 lezioni
LEZIONE 01

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.

💬 Prompt pronto da copiare

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]

LEZIONE 02

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.

💬 Prompt pronto da copiare

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]

LEZIONE 03

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.

💬 Prompt pronto da copiare

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]

LEZIONE 04

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.

💬 Prompt pronto da copiare

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]

LEZIONE 05

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.

💬 Prompt pronto da copiare

Analizza il problema senza riscrivere subito tutto. Riporta posizione, comportamento atteso, comportamento osservato, ipotesi alternative e prova necessaria per ciascuna. [incolla codice]

LEZIONE 06

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.

💬 Prompt pronto da copiare

Ordina i problemi individuati per impatto e condizioni di sfruttamento. Evidenzia prima perdita di dati, autorizzazioni, sicurezza e indisponibilità. Motiva ogni priorità. [incolla rilievi]

LEZIONE 07

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.

💬 Prompt pronto da copiare

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]

LEZIONE 08

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.

💬 Prompt pronto da copiare

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.

LEZIONE 09

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?

💬 Prompt pronto da copiare

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]

LEZIONE 10

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.

💬 Prompt pronto da copiare

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]

LEZIONE 11

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.

💬 Prompt pronto da copiare

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.

LEZIONE 12

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.

💬 Prompt pronto da copiare

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]

DAL LIBRO

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.

CASO PRATICO 01 · PER CHI COMINCIA

Un CSV con importi decimali

Uno script somma male importi con virgole decimali e righe vuote.

💬 Prompt pronto da copiare

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.

CASO PRATICO 02 · PER CHI COMINCIA

Modulo di contatto senza conferma

Il form nasconde gli errori e mostra messaggi non affidabili.

💬 Prompt pronto da copiare

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.

CASO PRATICO 03 · PER CHI COMINCIA

Contatore che riparte da zero

Il contatore JavaScript non conserva il valore dopo il reload.

💬 Prompt pronto da copiare

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.

CASO PRATICO 04 · PER CHI COMINCIA

Pulsante fuori schermo

Un controllo mobile scompare oltre la larghezza disponibile.

💬 Prompt pronto da copiare

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.

CASO PRATICO 05 · PER CHI COMINCIA

Promemoria nel giorno sbagliato

Un appuntamento cambia data per una gestione errata dei fusi orari.

💬 Prompt pronto da copiare

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.

CASO PRATICO 06 · PER CHI COMINCIA

Quiz con punteggio doppio

Clic ripetuti assegnano più punti del previsto.

💬 Prompt pronto da copiare

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.

CASO PRATICO 07 · PER CHI COMINCIA

Lista che perde modifiche

Salvataggi concorrenti sovrascrivono elementi della lista.

💬 Prompt pronto da copiare

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.

CASO PRATICO 08 · PER CHI PROGRAMMA GIÀ

Query SQL concatenate

Un input esterno entra direttamente nella stringa SQL.

💬 Prompt pronto da copiare

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.

CASO PRATICO 09 · PER CHI PROGRAMMA GIÀ

Commenti mostrati come HTML

Testo non fidato viene interpretato come markup.

💬 Prompt pronto da copiare

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.

CASO PRATICO 10 · PER CHI PROGRAMMA GIÀ

Documenti di altri utenti

Un endpoint verifica il login ma non la proprietà del documento.

💬 Prompt pronto da copiare

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.

CASO PRATICO 11 · PER CHI PROGRAMMA GIÀ

Upload controllato solo per estensione

L’estensione del file non prova che il contenuto sia sicuro.

💬 Prompt pronto da copiare

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.

CASO PRATICO 12 · PER CHI PROGRAMMA GIÀ

Dipendenze non mantenute

L’applicazione usa runtime e librerie obsolete.

💬 Prompt pronto da copiare

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.

CASO PRATICO 13 · PER CHI PROGRAMMA GIÀ

Log con informazioni riservate

I messaggi di errore potrebbero contenere token o dati personali.

💬 Prompt pronto da copiare

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.

CASO PRATICO 14 · PER CHI PROGRAMMA GIÀ

Refactoring che rompe una funzione

Una riscrittura fa fallire test prima funzionanti.

💬 Prompt pronto da copiare

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.

CHECKLIST

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.

💬 Prompt pronto da copiare

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]

LABORATORIO VISIVO

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

✗ Prima

Il timer va, quindi il programma è a posto.

✓ Dopo

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.

💬 Prompt pronto da copiare

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]

STRUMENTO INTERATTIVO

🛠️ 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.

Inserisci il codice o un problema, poi premi «Genera prompt».
VERIFICA

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