Vai al contenuto
SDETRole
SDETRole

Glossario · Fondamenti del testing

White-box testing (test a scatola bianca)

In inglese: White-box testing

Detto anche: test a scatola bianca, white box testing, test white-box, test strutturale

Definizione

Test progettati a partire dalla conoscenza del codice interno, come branch, condizioni e percorsi, per assicurarsi che l'implementazione si comporti correttamente.

Il white-box testing (test a scatola bianca) progetta i test leggendo il codice. Il tester (spesso lo sviluppatore) esamina branch, condizioni, cicli e gestione degli errori e scrive test che li esercitano deliberatamente. Si chiama anche glass-box, clear-box o test strutturale. Gli unit test ne sono la forma più comune e la code coverage è la sua misura abituale.

Esempio

String grade(int score) {
    if (score < 0 || score > 100) {
        throw new IllegalArgumentException("score out of range");
    }
    if (score >= 50) {
        return "PASS";
    }
    return "FAIL";
}

Leggendo il codice vedi tre esiti (eccezione, PASS, FAIL), e il primo if ha due condizioni distinte che possono ciascuna scatenare l’eccezione. Test scelti in base alla struttura:

Input Percorso esercitato
-1 score < 0 vera, eccezione
101 score > 100 vera, eccezione
50 nell’intervallo, score >= 50 vera, PASS
49 nell’intervallo, score >= 50 falsa, FAIL

Questi test danno una copertura completa di branch e condizioni. Testare esattamente 50 e 49 intercetta anche un >= scritto per sbaglio come >.

White-box e black-box testing a confronto

Il white-box chiede “ogni percorso di questo codice si comporta correttamente?” e richiede il sorgente. Il black-box chiede “il sistema fa ciò che dicono i requisiti?” e richiede solo la specifica. Il white-box trova percorsi non testati, codice morto ed errori di logica nei branch. Il black-box trova funzionalità mancanti e comportamenti in disaccordo con i requisiti, che il white-box non può vedere perché per una funzionalità mancante non c’è codice. Le buone suite usano entrambi.

Limiti

  • I test possono copiare gli errori del codice. Se lo sviluppatore ha frainteso il requisito, i test scritti a partire dal codice confermeranno il comportamento sbagliato.
  • Accoppiamento stretto. I test che dipendono da metodi privati o dalla struttura interna si rompono a ogni refactoring anche quando il comportamento non cambia. Dove possibile, testa attraverso le interfacce pubbliche.
  • Coverage non significa correttezza. Eseguire ogni branch non dice nulla sul fatto che le asserzioni siano significative.

Scrivi per cercare in tutto SDETRole.

Ricerca full-text con Pagefind · funziona nel tuo browser Apri la pagina di ricerca →