Ingegneria del Software - ICAR
Transcript
Ingegneria del Software - ICAR
Ingegneria del Software Testing - Strategie di Collaudo del Software Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Testing del Software Il testing è quell’ quell’attività attività di “esercizio” esercizio” del software tesa all’ all’individuazione dei malfunzionamenti prima della messa in esercizio Construction Testing Deployment Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Cosa mostra il Testing? malfunzionamenti conformità conformità coi requisiti indicazioni di performance indicazione di qualità qualità Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Faults, Errors e Failures • Failure – Si manifesta quando il servizio offerto dal sistema devia dalle specifiche • Error – Si ha quando il sistema si porta in uno stato scorretto che può essere causa di un fallimento • Fault – E’ la causa che provoca un errore Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Un Esempio di Software Fault • Un sistema di gestione degli accessi a servizi pubblici e privati. Specifiche: – Gli utenti possono avere due livelli di diritti 1 e 0. – I servizi privati richiedono livello di diritti pari ad 1 – L’accesso ad un servizio è accordato se il servizio è disponibile ed il livello di diritti utente coincide col livello richiesto Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Un Esempio di Software Fault (2) Caso 1 Utente Marco Rossi Diritti = 1 Richiede Servizio Pubblico Servizio disponibile Fault Latente Nessun Errore Nessun Fallimento Caso 2 … if(ServizioPrivato) Caso 3 Fault { Utente Giorgio Bianchi … Diritti = 0 if(Diritti = 1) Richiede Servizio Privato Autorizzato = true; Servizio NON disponibile else Autorizzato = false; … if(Autorizzato && ServizioDisponibile) cout<<"Accesso garantito"<<endl; Caso 4 … } Corso di Ingegneria del Software Università “Federico II” di Napoli Fault Mascherato Nessun Errore Nessun Fallimento Utente Marco Rossi Diritti = 1 Richiede Servizio Privato Servizio disponibile Fault Attivo Errore Nessun Fallimento Utente Giorgio Bianchi Diritti = 0 Richiede Servizio Privato Ing. Antonio Coronato Servizio disponibile Consiglio Nazionale delle Ricerche Fault Attivo Errore Fallimento Software Faults nel Ciclo di Vita del Sistema • La presenza di errori nel software sviluppato è da considerarsi una condizione normale – Per sistemi software complessi non è realistico pensare di ottenere dalla fase di sviluppo release immuni da errori – Adottare processi di sviluppo di qualità riduce la quantità di errori presenti nel software sviluppato • E’ necessario eliminare (o quantomeno ridurre) gli errori software prima della messa in esercizio del sistema – Azioni di collaudo guidate da opportune strategie individuano errori presenti nel software – Azioni correttive aumentano la qualità del prodotto finale Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Tesi di Dijkiastra • Il testing NON PUÒ dimostrare l’assenza di difetti, ma può solo dimostrare la presenza di difetti Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Chi Testa il Software? developer independent tester Comprende bene il sistema ma è inconsciamente “gentile” gentile” nell’ nell’attività attività di testing Deve imparare il sistema ma è più più critico ed esigente Testing guidato dalla consegna Testing guidato dalla qualità qualità Sviluppatori e tester indipendenti cooperano e svolgono entrambi attività attività di testing Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Verifica e Convalida • Verifica – Insieme delle attività tese ad accertare la correttezza funzionale • Convalida (o Validazione) – Insieme delle attività tese a verificare la implementazione dei requisiti software Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche ! " #$#%$ ##% & ' (( ' " #$#%$ ##% ' * ) ) (( Strategie di Testing • Le attività di testing necessitanto di una vera e propria strategia – Pianificazione – Progettazione dei test case – Esecuzione dei test case – Raccolta dei risultati – Valutazione dei risultati Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Pianificazione del Testing • Quando possiamo ritenere concluse le attività di testing? • Diversi criteri per decidere quando terminare il testing – Criterio temporale • Si definisce un periodo di tempo massimo per le attività di testing – Criterio di costo • Si assegna un badget massimo per le attività di testing – Criterio di copertura • Percentuale predefinita degli elementi di un modello di programma • Legato ad un criterio di selezione dei casi di test – Criterio statistico • Si ripetono attività di testing fino al raggiungimento di un MTBF (mean time between failures) obiettivo • Legato ad un criterio di selezione dei casi di test Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche + * ,,, " #$#%$ ##% * ' * Progettazione dei Casi di Test • Un caso di test è un sottoinsieme dei possibili dati di input • Un test è formato da un insieme di casi di test • L’esecuzione del test consiste nell’esecuzione del programma per tutti i casi di test • Un test ha successo se rileva uno o più malfunzionamenti del programma Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Progettazione dei Casi di Test (2) • Un test è ideale se l’insuccesso del test implica la correttezza del programma • Un test esaustivo è un test che contiene tutti i dati di ingresso al programma – Un test esaustivo è un test ideale – Un test esaustivo non è pratico e quasi sempre non è fattibile • Obiettivo realistico – Selezionare casi di test che approssimano un test ideale • Obiettivi pratici – Massimizzare il numero di malfunzionamenti scoperti (richiede molti casi di test) – Minimizzare il numero di casi di test (e quindi il costo del testing) Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Valutazione dei Risultati del Test • • Condizione necessaria per effettuare un test: – conoscere il comportamento atteso per poterlo confrontare con quello osservato L’oracolo conosce il comportamento atteso per ogni caso di prova – Oracolo umano • si basa sulle specifiche o sul giudizio – Oracolo automatico • generato dalle specifiche (formali) • stesso software ma sviluppato da altri • versione precedente (test di regressione) Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Strategie di Testing unit test system test integration test validation test Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Approccio Bottom-Up • Si parte dal “testing in piccolo” e si va verso il “testing in grande” Collaudo di Sistema Collaudo di Convalida Collaudo di Integrazione Collaudo Unità Collaudo Unità Collaudo Unità Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Chi fa cosa? • Due ruoli coinvolti Collaudo di Sistema independent tester Collaudo di Convalida Collaudo di Integrazione Collaudo Unità Collaudo Unità Collaudo Unità developer Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Altre Attività di Testing • Testing del produttore – – – – Testing di unità Testing di integrazione Testing di convalida Testing di sistema • Testing cooperativo produttore-cliente (privilegiato) – Alpha testing • uso del sistema da parte di utenti reali ma nell' ambiente di produzione e prima della immissione sul mercato – Beta testing • uso del sistema da parte di utenti reali ma nell' ambiente di produzione e prima della immissione sul mercato • Testing del cliente – Testing di accettazione Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Testing delle Applicazioni • Applicazioni Function-Oriented – Le unità di testing sono rappresentate dai moduli sorgente – Focus sulle funzionalità • Applicazioni Object-Oriented – Le unità di testing sono rappresentate dalle singole classi – Focus sulle comunicazioni e collaborazioni tra classi (oltre che sulle funzionalità) • Applicazioni Component-Based – Le unità di testing sono rappresentate dai singoli componenti o dalle classi dei singoli componenti – Focus sulle problematiche di integrazione (oltre che sulle collaborazioni e sulle funzionalità) Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Testing di Unità Unità Unità da Testare results software engineer test cases Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Testing di Unità (2) Modulo da testare Interfacce Strutture dati locali Cammini indipendenti Cammini di gestione degli errori test cases Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Ambiente di Testing per le Unità • Generalmente le unità di testing non costituisco elementi software eseguibili indipendentemente => E’ necessario definire ambienti di testing Modulo pilota Interfacce Strutture dati locali Modulo Da testare Cammini indipendenti Cammini di gestione degli errori Modulo fittizio Modulo fittizio test cases Risultati Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Strategie di Testing di Integrazione • Testing dell’intero sistema – Si integrano tutte le unità del sistema e successivamente si procede al testing – Può essere particolarmente oneroso nel caso di sistemi complessi • Testing incrementale – Le unità sono integrate in maniera incrementale – Dopo ogni incremento si procede al testing di integrazione Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Integrazione con approccio Top-Down • Passi del processo di integrazione: 1. Testing del modulo di controllo (modulo pilota) 2. Sostituzione di un modulo fittizio con il corrispondente reale 3. Test di integrazione dopo ogni sostituzione 4. Ritorna al passo 2 fino al completamento dell’integrazione • Modi di integrazione: – – Depth-first Breadth-first A Modulo pilota Modulo reale B F G Modulo fittizio C D E Difficoltà Difficoltà di testing per i moduli fittizzi che devono restituire risultati di elaborazione Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Integrazione con approccio Bottom-Up • A Passi del processo di integrazione: 1. Aggregazione delle unità di basso livello in gruppi (cluster) 2. Predisposizione di un modulo pilota per il cluster 3. Test del cluster 4. Sostituzione dei moduli pilota (fittizi) con i moduli reali 5. Ritorna al passo 2 fino al completamento dell’integrazione B C D E cluster Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche F G Integrazione con approccio a Sandwitch A B F I moduli di controllo sono testati con moduli fittizzi G C I moduli che sviluppano funzionalità funzionalità sono ragruppati in cluster D E cluster Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Ulteriori Livelli di Testing • Testing di Convalida – Verifica che il sistema funzioni secondo le aspettative del cliente • Le aspettative del cliente sono stabilite dai requisiti • Le prove di convalida possono essere specificate nel documento SRS • Può includere alpha e beta testing • Alpha/Beta testing – Focus sull’utilizzo da parte dell’utente - Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche . ( + / ( + / ( ) " %$#%$ ##% ) Ulteriori Livelli di Testing (2) • Testing di sistema – Focalizza sull’intero sistema – Può includere testing di affidabilità, sicurezza, performance e stress • Testing di affidabilità – Si forza il sistema a fallire per verificarne le capacità di recovery – Si sollecita il sistema con dati scorretti, iniettando errori, esercitando le sezioni di gestione delle eccezioni Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Ulteriori Livelli di Testing (3) • Testing di sicurezza – Si attenta alle caratteristiche di sicurezza del sistema per evidenziare vulnerabilità – Si esercitano i servizi di: • • • • • Authentication Access control Privacy … Testing di performance – Si esercita il sistema in condizioni operative “normali” per verificarene le performace • Testing di stress – Si sollecita il sistema con volumi di carico particolarmente elevati, ad esempio un ordine di grandezza superiore alle normali condizioni Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Debugging Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Definizione • Il Debugging è il processo di scoperta dei fault a partire dai malfunzionamenti (failures) individuati dal testing • Include l’ispezione del software, cioè l’analisi del codice sorgente Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Risultati del Testing • Nel caso del sistema di gestione degli accessi a servizi pubblici e privati Failure! ? Qual è la causa? Test Case Utente Giorgio Bianchi Diritti = 0 Richiede Servizio Privato Servizio disponibile Grant Access! tester Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Risultati delle Attività di Debugging • Individuare le cause dei fallimenti evidenziati dal testing … if(ServizioPrivato) Fault { … if(Diritti = 1) Autorizzato = true; else Autorizzato = false; … if(Autorizzato && ServizioDisponibile) cout<<"Accesso garantito"<<endl; … } Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Il Processo di Debugging test cases Testing regression tests corrections results new test cases suspected causes Debugging identified causes Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Degugging Effort tempo necessario per correggere l’errore e condurre test di regressione tempo necessario per diagnosticare il fallimento, fallimento, analizzare I sintomi e determinare la causa Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Sintomi e Cause • Sintomi e cause possono essere geograficamente separati • I sintomi possono scomparire quando un altro errore viene corretto – Correlazione tra errori • symptom Casi di failure intermittenti – Sincronizzazione di thread cause • Fault d’ambiente – Malfunzionamenti introdotti da compilatori, sistemi operativi… Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Conseguenze di un Software Fault infectious damage catastrophic extreme serious disturbing mild annoying Bug Type Bug Categories: functionfunction-related bugs, systemsystem-related bugs, data bugs, coding bugs, design bugs, documentation bugs, standards violations, etc. Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Tecniche di debugging brute force / testing backtracking induction deduction Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche Riferimenti Bibliografici • Pressman, cap. 13 Corso di Ingegneria del Software Ing. Antonio Coronato Università “Federico II” di Napoli Consiglio Nazionale delle Ricerche