Ingegneria del software Modulo 1 - Introduzione al processo software Unità didattica 5 -Test e verifica Ernesto Damiani Università degli Studi di Milano Lezione 4 – I fault
Tipi di fault (1) Algorithmic fault – Salti anticipati o ritardati (errori sugli indici: fencepost) – Mancata inizializzazione di variabili – Errori di cast o traduzione di tipi Computation/precision fault – Ad es. aggiungere 1 a Integer.MAX_VALUE in Java Requirements/documentation fault
Tipi di fault (2) Capacity/boundary fault – Troppi processi o file aperti Performance fault – Risposta richiesta in < n msec, arriva tardi Recovery fault – Ad es. file illeggibili dopo un black-out Standard/procedure fault – Linee guida di programmazione non seguite
Commenti (1) È impossibile eseguire un test esaustivo di qualsiasi sistema software non banale – Vincoli tempo/costo – Esplosione combinatoria degli input da provare – Esempio: for i from 1 to 100 do print(if a[i]=true then 1 else 0 endif); – Questo programma ha possibili risultati; un test esaustivo richiederebbe 3 x anni
Commenti (2) Tutti i test devono far riferimento ai requisiti Il principio di Pareto vale anche per il software testing; l’80% di tutti i fault identificati dal testing sono dovuti al 20% dei moduli del programma
Quando fermarsi Il testing in linea di principio non ha mai fine Si possono creare modelli stocastici basati su dati storici per stimare il rischio associato all’interrompere il testing a un certo punto Ancora un’area di ricerca
Test funzionali Creare dei casi di test con dati di test ed eseguire il codice con quelli – I casi di test vanno pianificati già in fase di analisi, compresi gli output attesi Pianificare in anticipo la procedura di test (piano dei test) rispettando un processo di test
Fasi di testing Programmatore Unità Integrazione Componente Sistema Usabilità Regressione Validazione (Accettazione) Alpha/Beta (FUT/OT) FINE