Google avverte: i valori di default possono far passare test rotti
Testo scritto con l’intelligenza artificiale a partire da una fonte citata, senza revisione umana prima della pubblicazione.
Radion KhaitA, in un episodio Google Tech on the Toilet, raccomanda di usare valori non di default per rendere i test più robusti.
Un test che chiama my_map.insert(1, 0) passa anche se insert non salva il valore. Il metodo crea la chiave e inizializza la voce con il valore predefinito. Non usa mai il secondo parametro. Il controllo EXPECT_EQ(my_map.get(1), 0) risulta verde solo perché il default degli interi nella mappa è 0. Non perché l’inserimento funzioni. L’esempio arriva da un episodio di Google Tech on the Toilet, adattato sul blog di testing di Google e firmato da Radion KhaitA1.
Il punto è semplice. Se il test usa un valore che coincide con il default del tipo o della struttura, può segnalare un successo inesistente. Il sistema è rotto ma il test non se ne accorge. Qui la mappa inizializza l’entry con il valore predefinito e ignora il dato passato. La verifica trova comunque 0. Il bug resta invisibile perché il test non distingue tra “valore inserito” e “valore di default”1.
La raccomandazione è diretta. Scegli valori non di default quando scrivi i test. Evita lo zero per i numeri. Evita la stringa vuota. Evita il primo elemento per le enum. Questi esempi compaiono nelle linee guida che accompagnano il caso della mappa. L’obiettivo è chiaro: evitare che un valore predefinito mascheri un errore nell’implementazione. Se il codice si limita a inizializzare per default o ignora un parametro, un test con valori non predefiniti lo mette in evidenza1.
Applicare il consiglio è immediato. Usa numeri diversi da zero quando verifichi l’assegnazione di un campo numerico. Usa stringhe non vuote quando controlli che un valore testuale sia stato propagato. Scegli un valore di enum che non sia quello all’indice 0 quando verifichi percorsi condizionali. Nel caso della mappa, un valore intero non predefinito avrebbe reso evidente che insert non memorizza il parametro passato e che la verifica passava solo grazie all’inizializzazione di default1.
C’è anche una lezione operativa. Non affidarti ai default delle strutture che usi. Se una struttura fornisce automaticamente un valore, non impostare test che possano coincidere con quel valore senza esercitare davvero la logica sotto test. Scegliendo valori che si discostano dal default, riduci la possibilità che il test confonda uno stato iniziale con un effetto della funzione. L’esempio della mappa mostra come un test possa risultare fuorviante quando il dato atteso coincide con ciò che il contenitore fornisce da sé1.
Il post chiarisce l’origine del materiale. Nasce da un episodio Google Tech on the Toilet, adattato per il blog. Include anche una risorsa pronta all’uso: una versione stampabile dell’episodio, disponibile per il download, pensata per stare in ufficio e ricordare la regola quando si scrivono test1.
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:
- Fedeltà alle fonti. Un secondo passaggio toglie ogni affermazione che le fonti non sostengono.
- Anti-cliché. Un filtro scarta frasi fatte, enfasi e tic della prosa artificiale.
- 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.
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.