Le procedure di testing e analisi non sono automatizzabili (indecidibile), quindi cosa possiamo fare? Possiamo agire in 3 dimensioni:
- Approssimazione ottimistica tramite il testing ("funziona con un dataset di test, funzionerà anche con altri dati")
- Approssimazione pessimistica ("mi fido solo di quello che sono riuscito a dimostrare") tramite analisi e dimostrazione di una regola / teorema.
- Semplificare le proprietà: far si che i programmi non possano essere scritti in tutti i modi, ma devono rispettare delle proprietà intrinseche (ES: ogni variabile deve avere un determinato tipo)
Software testing and analysis (T&A): è il processo che consiste in tutte le attività del ciclo di vita che hanno a che fare con pianificazione, preparazione e valutazione di prodotti software per determinare se i requisiti sono soddisfatti.
Software Testing
E' una tecnica dinamica: richiede l'esecuzione di codice o di artifatti.
E' caratterizzato dall'approssimazione ottimistica, che costituisce una potenziale inaccuratezza.
Dati di test VS casi di test
I dati di test sono degli ingressi. Sono facili da generare, quello che è meno facile è generare l'uscita corrispondente, dato che non può essere generata automaticamente (problema dell'oracolo).
Un caso di test è la coppia (ingresso, uscita) corrispondente.
Evoluzione delle definizioni di "testing"
- 1979: processo di esecuzione di un programma o sistema con lo scopo di trovare errori [Myers]
- 1983: qualsiasi attività con lo scopo di valutare un attributo di un programma o sistema. Il testing è la misurazione della qualità del software [Hetzel]
- 1990: il processo di operare su un componente o su di un sistema sotto specifiche condizioni, osservando o registrando i risultati, e facendo una valutazione di alcuni aspetti del sistema o componente [IEEE]
- 2002: un processo di ciclo di vita concorrente di ingegnerizzare, utilizzare e mantenere il "testware" (software oggetto di test) con lo scopo di misurare e migliorare la qualità del software testato [Craing and Jaskiel]