Sobes.tech
Junior

In cosa consiste il test di scatola bianca?

sobes.tech AI

Risposta dell'AI

Il testing di tipo White-box è un metodo di testing del software che verifica la struttura interna, il design e la logica del codice. Il tester ha accesso al codice sorgente e progetta casi di test basati su di esso.

Principi fondamentali:

  • Copertura del codice: I casi di test vengono sviluppati per raggiungere la massima copertura di vari elementi del codice (operatori, rami, percorsi).
  • Conoscenza della struttura interna: Richiede di capire come funziona internamente il programma.
  • Rilevamento: di errori nella logica, percorsi di esecuzione errati, problemi con cicli e operatori condizionali.
  • Automazione: Spesso utilizzato nei test unitari, test di integrazione e test di sicurezza a livello di codice.

Tipi di copertura:

  • Copertura delle istruzioni (Statement Coverage): Esecuzione di ogni istruzione nel programma almeno una volta.
  • Copertura delle ramificazioni (Branch Coverage): Esecuzione di ogni condizione (if, else, switch) sia come true che come false.
  • Copertura dei percorsi (Path Coverage): Esecuzione di tutti i percorsi possibili attraverso il programma. (La più completa, ma spesso poco praticabile).

Esempio di copertura delle ramificazioni in Python:

# Funzione di esempio
def calculate_discount(price, is_member):
    if price > 100 and is_member: # Ramo 1 (true)
        discount = price * 0.1  # Ramo 2 (viene eseguito se Ramo 1 è 'true')
    else: # Ramo 3 (false)
        discount = 0            # Ramo 4 (viene eseguito se Ramo 1 è 'false')
    return price - discount

# Casi di test per coprire i rami:
# 1. price > 100 e is_member == True (copertura Ramo 1 true, Ramo 2)
# 2. price <= 100 o is_member == False (copertura Ramo 1 false, Ramo 3, Ramo 4)

Vantaggi:

  • Rilevamento precoce degli errori.
  • Garantisce che le parti importanti del codice siano state testate.
  • Aiuta a capire come funziona il codice e a migliorare il suo design.

Svantaggi:

  • Richiede una conoscenza approfondita del codice.
  • Può essere laborioso per sistemi grandi e complessi.
  • Non testa il funzionamento del programma dal punto di vista dell'utente finale (compito dei test di tipo black-box).

L'essenza è verificare "come" funziona il programma, non solo "cosa" fa.