appuntiDiIngegneria
Testing
Argomenti: Verifica e Validazione, Black Box, White
Box e Grey Box testing, Test di Unità, Test di
Integrazione, Test di Accettazione e Validazione, Test
di Sistema, Test di regressione, Test Strutturale e
Funzionale, Test di Robustezza 1
1.1. Testing
Il Testing è qualcosa che inizia ancora prima di vincere una gara per un progetto e continua finché
il SW non viene dismesso. Il termine Testing è legato al SW ma per sistemi complessi si parla di
verifica e validazione V&V:
o Validazione: si riferisce ai requisiti informali di utente, si occupa di esaminare se il sistema
risolve il problema applicativo per cui è stato prodotto, cioè di dimostrare all’utente che il
prodotto fa quello che egli si aspettava. Sarebbe ciò che in altri contesti è chiamato
collaudo, si fa insieme al cliente;
o Verifica: si occupa di stabilire se il SW è corretto rispetto alle specifiche dell’analista, cioè
rispetto ai diagrammi UML o ai documenti di progetto.
Per effettuare la verifica occorrono 2 tecniche: Analisi e Testing:
Analisi: non verifica il singolo stato del sistema, ma che una singola proprietà sia garantita
in tutti i possibili stati (es: una variabile x non deve essere mai < 0 in tutta l’esecuzione).
L’analisi consiste nella valutazione di una proprietà su tutto lo spazio di stato. Siccome
vengono coperti tutti gli stati è più costoso ed efficiente del Testing, per cui lo si applica
solo laddove ci sono delle criticità. L’analisi può essere statica se viene ispezionato il codice
o il progetto, o dinamica se viene esaminata l’esecuzione del programma;
Testing: è puntuale rispetto all’analisi, cioè deve verificare che dato un input preciso il
sistema dia un output preciso, cioè che il sistema si porti allo stato finale che atteso. Il
Testing permette di rilevare dei fault ma non è esaustivo, se un test case dà errore non è
indicativo della qualità del SW, un test case che dà pochi errori potrebbe essere inefficace.
Quindi facendo n test individuali (che richiedono l’esecuzione del codice), sarà esaminato il
sistema in n possibili stati, più test vengono fatti e più stati saranno coperti, tuttavia non
sarà mai possibile coprire tutti gli stati. È apparentemente meno costoso dell’analisi ma
meno efficiente, perché se ad un certo punto si decide di fermarsi lo si può fare
tranquillamente, quanto si và avanti con il Testing dipende da quanto l’azienda ha deciso di
pagare per il Testing.
Diamo alcune definizioni:
o Il Testing è un processo di esecuzione del SW allo scopo di rilevare i failure, mentre il
Debugging è un processo che parte dal failure (cioè dall’output del Testing), ed ha come
scopo di risalire al fault che ha generato quel failure.
o Test case è un caso di prova del test, cioè l’insieme di input e condizioni di esecuzione con
il quale eseguiamo un singolo test. Invece la Test Suite è l’insieme dei casi di test, per
essere buono deve avere al suo interno almeno un test case che riesce a rilevare un failure
del sistema. Nei test case devo specificare anche l’Oracolo, cioè la descrizione del
2
comportamento atteso del programma, perché devo osservare se il comportamento
osservato coincide con quello atteso;
o Dijkstra nella sua tesi di laurea dimostrò matematicamente che il Testing non può mai
dimostrare l’assenza di difetti, ma solo la loro presenza, qualsiasi sia la tecnica che
useremo. Perciò non posso certificare il SW se non ho u
-
Testing software
-
Dynamic testing
-
Report completo testing psicologico
-
Appunti di Automated Software Testing