Manovra Kluever: correggi i bug in due commit e prova che funzionano
Testo scritto con l’intelligenza artificiale a partire da una fonte citata, senza revisione umana prima della pubblicazione.
Prima aggiungi un test che cattura il comportamento errato, poi commetti la correzione del codice e la modifica del test, così la CI resta verde e la riparazione è dimostrabile.
Correggi ogni bug in due commit: prima aggiungi un test che registra il comportamento errato e che passa, poi inserisci la patch e modifichi il test perché esprima il comportamento corretto. Così dimostri la correzione e la CI resta verde a ogni commit1.
Commit 1: scrivi un test che riproduce il bug e che passa con il codice attuale, proprio perché fotografa l’errore. Commit 2: sistemi il codice e cambi il test per riflettere il comportamento voluto. Due effetti: hai una prova documentata che la patch risolve il problema e la pipeline passa a ogni passaggio della storia. Il post spiega perché un singolo commit con test e fix insieme può ingannare se il test passava già prima1.
L’articolo apre con un esempio: la funzione add somma a + b + 1, che è sbagliato. Nel primo commit si aggiunge un test che registra il comportamento errato, aspettandosi 5 da add(2, 2). Nel secondo commit si toglie l’off-by-one dalla funzione, che torna a a + b, e si “flippa” il test per aspettarsi 4. La coppia di commit mostra la rottura e la riparazione senza ambiguità, e la CI resta verde perché ogni commit è coerente con i test che contiene1.
Poi il caso sottile. Un controllo di età calcola solo la differenza tra gli anni. A ottobre 2026, chi è nato a dicembre 2008 non ha ancora 18 anni. Una patch superficiale cambia solo l’operatore nella funzione can_access, da “18 <=” a “18 <”. Ma il problema sta nel calcolo dell’età, non nella soglia. Quel “fix” non corregge nulla, e il test proposto passa sia prima sia dopo la modifica. È il falso positivo che la manovra vuole evitare1.
Per inquadrare bene il bug, il post propone un test mirato: nato il 31 dicembre 2008, oggi 1 gennaio 2026. Nel primo commit si scrive il test che, con il codice corrente, asserisce il comportamento errato. Nel secondo commit si corregge il calcolo usando dateutil.relativedelta e si ritorna .years. Il test viene ribaltato perché ora, con la correzione, quell’utente non deve avere accesso. La sequenza rende evidente l’errore originale e la sua soluzione1.
C’è anche una prassi operativa per il tracciamento. L’autore suggerisce di aprire un bug nel tracker, citarlo nel primo commit e chiudere il ticket nel secondo. Un esempio: nel test del commit 1 un commento “FIXME: bug #1729”, nel commit 2 un messaggio “fixes: #1729” insieme alla patch e all’aggiornamento del test. Chi legge la storia vede il caso che passa perché cattura il comportamento errato, la correzione che lo ribalta e il collegamento al ticket1.
Se test e fix stanno nello stesso commit, rischi di non vedere che il test non intercetta il bug. Con due commit separati, il primo dimostra l’errore perché il test passa pur essendo sbagliato, il secondo lo corregge e aggiorna l’asserzione: una prova minima e sufficiente, anche quando il difetto è meno ovvio del classico off-by-one1.
Il nome viene da chi l’ha insegnata all’autore, Kurt Kluever. Lui la chiama anche “terrible tests”: test che affermano consapevolmente qualcosa di sbagliato per inchiodare il bug prima di curarlo1.
Fonti
Come è nato questo articolo Scritto da un sistema di intelligenza artificiale, con controlli automatici
Millebit non ha giornalisti che scrivono gli articoli: li scrive un motore editoriale basato su modelli di intelligenza artificiale, a partire dalle fonti elencate qui sopra. Prima di uscire, ogni testo passa questi controlli:
- Rilettura. Un passaggio toglie i tic della prosa generata da un modello, come i contrasti costruiti e le frasi che annunciano invece di informare, senza toccare fatti e fonti.
- Fedeltà alle fonti. Un passaggio dedicato toglie ogni affermazione che le fonti non sostengono. Valutazione su questo pezzo: 9,5/10.
- Anti-cliché. Un filtro scarta frasi fatte, enfasi e tic della prosa artificiale: superato.
- Giudizio editoriale. Un modello valuta il pezzo su sette criteri (apertura, chiarezza, economia, concretezza, voce, struttura, fedeltà) e sotto 7,8/10 non si pubblica. Questo articolo ha preso 8,2/10.
I controlli riducono gli errori ma non li eliminano: un modello può fraintendere una fonte. Per le decisioni importanti, risali alla fonte originale. Se trovi un errore, segnalacelo.
Per vedere Millebit nelle notizie principali di Google, aggiungilo alle tue fonti preferite. Oppure segui l’edizione di oggi, il feed RSS o La Sintesi.