Vai al contenuto
SDETRole
SDETRole

Glossario · Fondamenti del testing

Oracolo di test (test oracle)

In inglese: Test oracle

Detto anche: oracolo, oracoli di test, problema dell'oracolo, oracle problem

Definizione

La fonte di verità con cui un test decide se un output è corretto, come una specifica, una versione precedente, un modello di riferimento o una regola.

Un oracolo di test (test oracle) è qualunque cosa ti dica qual è la risposta giusta. Eseguire un test produce un output; l’oracolo è il meccanismo che giudica quell’output come superato o fallito. Di solito è il risultato atteso scritto nel test case, ma per molti sistemi capire quale sia il risultato atteso è la parte più difficile del testing. Questa difficoltà è nota come problema dell’oracolo (oracle problem).

Tipi di oracolo

  • Risultato specificato. Un requisito dice che un ordine da 200 $ con il 10% di sconto ha un totale di 180 $. L’asserzione confronta con quel valore.
  • Implementazione di riferimento. Confronta con un’alternativa affidabile: una release precedente, il calcolo di un concorrente o un algoritmo semplice ma lento che verifica uno veloce e ottimizzato.
  • Coerenza e proprietà. Potresti non conoscere l’output esatto, ma conosci le regole che deve rispettare. Un ordinamento deve restituire gli stessi elementi in ordine non decrescente; codificare e poi decodificare deve restituire l’input originale.
  • Baseline salvata. I test snapshot e di visual regression considerano corretto un output precedente approvato.
  • Giudizio umano. Un tester decide se un layout o un testo generato è accettabile. Flessibile, ma lento e poco coerente.

Esempio: un oracolo basato sulle proprietà

Non puoi scrivere a mano l’output atteso per ogni possibile input di una funzione di ordinamento, ma puoi verificare le proprietà che ogni risultato corretto possiede:

function checkSorted(input: number[], output: number[]): boolean {
  const sameLength = input.length === output.length;
  const ordered = output.every((v, i) => i === 0 || output[i - 1] <= v);
  const sameItems =
    [...input].sort((a, b) => a - b).join(',') === output.join(',');
  return sameLength && ordered && sameItems;
}

Perché è importante

Un test vale quanto il suo oracolo. Un test che attraversa il checkout cliccando e verifica solo che non sia comparso alcun errore ha un oracolo molto debole: passerà anche addebitando l’importo sbagliato. Gli oracoli deboli sono uno dei motivi principali per cui un’alta code coverage non garantisce una buona suite. Il problema dell’oracolo è centrale anche nel test dei sistemi di AI, dove gli output variano e i team si affidano a golden dataset, rubriche di valutazione o a un secondo modello che fa da giudice.

Scrivi per cercare in tutto SDETRole.

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