Lezione 2 – Il test Ingegneria del software Modulo 1 - Introduzione al processo software Unità didattica 5 – Test e verifica Ernesto Damiani Università degli Studi di Milano Il software testing (1) • Test = processo di verifica delle funzionalità e della correttezza del software attraverso esecuzioni di prova – Un test ha successo quando trova un errore non ancora individuato – Non è possibile dimostrare l’assenza di errori Il software testing (2) In un mondo perfetto • La correttezza dei programmi sarebbe una conseguenza logica (dimostrabile a priori) del loro contenuto • Testare sarebbe inutile Nel mondo reale • Testare è indispensabile Visioni sbagliate del testing (di Boris Beizer) • Il capo: “Se foste dei programmatori decenti come dite di essere non fareste tutti questi errori!” • Il programmatore: “Testare un programma così semplice? Lo considero un insulto personale!” Paradosso del testing Qualsiasi metodo venga utilizzato per individuare i fault lascia un residuo di fault per cui il metodo scelto non è efficace. Tipi di test (1) Non-execution-based testing • Walk-through – Ispezione diretta del codice • Cleanroom – Nel ciclo di vita incrementale, letture e controlli di qualità del codice • Verifica di correttezza – Tecniche formali logico-matematiche Tipi di test (2) Execution-based testing • Testing rispetto alle specifiche (black box testing) – Considera i requisiti nel derivare i casi di test – Non considera la struttura del software • Testing to code (white box testing) – Casi di test basati sul codice – Considera la struttura del software nel derivare i casi di test – Valutato in termini di coverage (statement, branch, path ecc.) Testing e fasi di sviluppo • Il testing non è una fase dello sviluppo; va previsto in tutte le fasi, con significato e modalità diverse Tipi di testing • Strutturale (White box) • Funzionale (Black box) • Statistico (Random) • Mutazionale • Object-oriented (test degli stati) Categorie di test • Unit, Module, Component testing – White box e black box • Integration testing – Test di interoperabilità tra componenti • System testing – Test funzionale – Test di performance – Test di installazione • User Acceptance testing FINE