Pipeline verde per sei settimane, checkout rotto per due
Testo scritto con l’intelligenza artificiale a partire da una fonte citata, senza revisione umana prima della pubblicazione.
Un refactor ha cambiato il campo provincia in region, i unit test restavano verdi ma gli utenti in Ontario non potevano completare l'acquisto.
Per due settimane i clienti in Ontario non potevano chiudere un acquisto, mentre la dashboard di CI mostrava solo verde da sei settimane1.
La suite sembrava solida: circa l’80% di line coverage, qualche centinaio di unit test e una pipeline sotto i quattro minuti. Il modulo delle tasse aveva 40 test, tutti passavano1.
Dopo un refactor del form indirizzo, il frontend ha iniziato a inviare la provincia come codice a due lettere nel campo region, non più in province. Il backend è caduto su un default. Il default non aveva una regola fiscale per l’Ontario. La validazione ordine ha rifiutato il totale1.
Gli unit test erano corretti. Da lì è nata una domanda guida: se questo test passa, che cosa può fare un utente? Un test unitario raramente sblocca un’azione diretta. Un test funzionale sì: “con un indirizzo dell’Ontario, l’utente invia il carrello e riceve una conferma ordine con il totale giusto”1.
La ricostruzione è partita dal ticket dei requisiti. L’autore ha elencato ogni frase con “should”. Erano 23. Alcune hanno richiesto varianti. Il totale è arrivato a circa 60 casi1.
I test hanno esercitato l’API. Il checkout espone endpoint REST. Le nuove prove inviavano richieste HTTP a un’istanza reale del servizio con database seedato. Validavano il contratto usato dal frontend: nomi dei campi, codici di stato, forma degli errori, risultato di business. Il bug region vs province sarebbe caduto subito, perché il totale in risposta sarebbe stato sbagliato1.
Ogni caso verificava almeno un esito visibile a una persona. Totale dell’ordine. Testo del messaggio di errore. Presenza di un job email in coda. Controllare solo un 200 è un ping, non un test funzionale1.
Questo strato è costato. La suite funzionale ha portato il tempo di pipeline a circa 9 minuti, più del doppio. Le prime due settimane hanno visto test flaky causati da timestamp nei dati seed. Hanno risolto congelando il tempo nell’ambiente di test. La manutenzione ha pesato di più. Scrivere payload e risposte attese per 60 casi è tedioso. Ogni cambio API obbliga a toccare molti JSON1.
Hanno provato tre strade. Suite scritte a mano in pytest usando requests. Pact per il contratto tra frontend e backend. Keploy per registrare il traffico reale e trasformarlo in test. Non c’è stato un vincitore assoluto. Pact ha funzionato bene per il contratto del frontend. Il traffico registrato ha aiutato sugli endpoint con payload annidati e scomodi da scrivere. Pytest è rimasto il migliore per gli edge case costruiti ad hoc1.
Gli effetti si sono visti. In otto mesi la suite funzionale ha intercettato 11 bug prima della produzione. Sette con la stessa forma del caso Ontario: tutti gli unit passavano, ma il cablaggio tra componenti era sbagliato. Due erano problemi di configurazione emersi solo leggendo variabili d’ambiente reali. Due erano errori dell’autore. Anche la code review è cambiata. A ogni PR si chiede quale caso funzionale la copre. Se non c’è, si aggiunge o si spiega perché manca1.
La nota finale dell’autore è secca: la coverage indica quanto codice gira, non se un cliente può comprare, e se non hai mai avuto un incidente del genere potresti essere solo fortunato1.
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: 10/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 9,0/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.