Automazione del testing e Analisi Mutazionale

Documenti analoghi
Testing Automation. Testing Automation 1

Automatic generation of test cases

Testing Automation. Testing Automation 1

Verifica e Validazione del Software

Strumento e tecnica a supporto del crash testing automatico di applicazioni mobili basato sul sistema operativo Android Anno Accademico 2010/2011

Ingegneria del Software 22a. Progettazione delle prove. Dipartimento di Informatica Università di Pisa A.A. 2014/15

Ingegneria del Software Agile Testing. Corso di Ingegneria del Software Anno Accademico 2012/13

Software Testing. Esercizi proposti. Esercizi di Testing 1

Verifica parte IID. Test in grande. Test e modularità. Test di modulo

Prefazione...IX. Ringraziamenti...XIII. Gli autori...xv. Capitolo 1 - Le tecnologie mobili: la nuova generazione di tecnologie dell informazione...

Gui testing automatico di applicazioni Android tramite emulazione di input ed eventi provenienti da sensori

Verifica e Validazione del Software

Ingegneria del Software II. Proposte di progetto d esame. a.a. 2016/17

Software solido e usabile: come integrare ingegneria dell usabilità e del software

Ingegneria del Software

Stato dell arte sulle tecniche di testing di Sistemi Embedded

Università degli Studi di Roma La Sapienza, Facoltà di Ingegneria. Corso di INGEGNERIA DEL SOFTWARE (Ing. Informatica, Nuovo Ordinamento)

Realizzazione di un sistema a supporto del testing automatico di Rich Internet Applications

CODESYS Test Manager: Incrementare la qualità del software con unità di test CODESYS Users' Conference 2014, Fabio Filipponi

IC Test & Design for Testability

Materiale didattico. Sommario

Ingegneria del software

Verifica e Validazione del Software

Verifica e Validazione del Software

Testing di applicazioni flex: uso dello strumento FlexUnit

PROGETTO TG Situazione iniziale e obiettivi:

Collaudo del software

14. Verifica e Validazione

Corso di Ingegneria del Software. Modelli di produzione del software

Software Testing (2 Parte)

MODELLI MATEMATICI PER I SISTEMI DI INFORMAZIONE ALL UTENZA: introduzione ai modelli dell ingegneria dei trasporti

Laboratorio di Calcolo di Aerodinamica: II Lezione

12. Verifica e Validazione del Software

Programmazione con Java

Ingegneria del Software 22b. Altri test e valutazione. Dipartimento di Informatica Università di Pisa A.A. 2014/15

Sviluppo di un'interfaccia grafica per l'automatizzazione di campagne di software fault injection. relatore Ch.mo prof.

Macchine Astratte. Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari. Linguaggi di Programmazione feb, 2016

In passato, occuparsi di informatica era sinonimo di programmare computer

Meccatronica? Flavio Corradini CF3000 Engineering & Electronics Group

Verifica parte IIC. Rif. Ghezzi et al

Ingegneria del software

Progettazione logica

Informatica. Progettazione ed implementazione di un tool per il supporto al debug nella pratica di sviluppo Test Driven

2. Modellazione dei casi d uso

Un linguaggio per la rappresentazione formale di vincoli su scenari d'uso

Robotium Recorder. Un altro ambiente che supporta il capture & replay è Robotium Recorder.

Verifica parte IV. Rif. Ghezzi et al

- qualita' - ce ne sono svariate; parliamo di efficienza, correttezza e robustezza

Verifica e validazione: introduzione

maurizio pizzonia sicurezza dei sistemi informatici e delle reti. la rilevazione automatica dei problemi: IDS e affini

13. Verifica e Validazione del Software

Errori a tempo di compilazione (1) Verifica del Comportamento degli Oggetti. Errori a tempo di compilazione (3) Errori a tempo di compilazione (2)

Ski Ways Piano di Testing

Collaudo basato sui guasti

Correzione degli errori

Analisi e comparazione dei Framework OpenSwing e Google Web Toolkit per lo sviluppo di interfacce utente con paradigma MVC.

Il Concetto Intuitivo di Calcolatore. Esercizio. I Problemi e la loro Soluzione. (esempio)

Componenti principali

Validazione attraverso il TESTING Validazione, verifica, debugging e defensing programming

Dati sperimentali Nella serie di 10 misurazioni di tempo effettuate, si sono ottenuti i seguenti valori espressi in secondi:

Verifica parte IIB. Rif. Ghezzi et al

Il Concetto Intuitivo di Calcolatore. Esercizio. I Problemi e la loro Soluzione. (esempio)

Modelli di recupero. Modello di recupero booleano

la traduzione dei programmi ed introduzione a Java

TECNICHE DI SIMULAZIONE

Introduzione al Project Scheduling

IL PROCESSO di PROGETTAZIONE

Verifica e Validazione del Software

Ingegneria del software

Il linguaggio di programmazione Python

Valutazione delle prestazioni

Valutazione delle prestazioni. Valutazione delle prestazioni. Tempo di risposta e throughput. Prestazioni e tempo di esecuzione

CAPITOLO 1: INTRODUZIONE

Piano di Testing. Fontolan Federico Giacomazzi Andrea Yoshida Kotono Rosada Fabio

Linguaggi di programmazione

Cos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia

Verifica parte IIA. Rif. Ghezzi et al

GESTIONE DELLE AZIONI CORRETTIVE E PREVENTIVE

Corso di Linguaggi di Programmazione + Laboratorio

Programmazione ad Oggetti. Programmazione ad Oggetti. JUnit è un ambiente di test per programmi Java. Sviluppato da Kent Beck

Specifica dei requisiti

Programmazione Orientata agli Oggetti in Linguaggio Java

MODELLI QUANTITATIVI. f x r = c

Corso di Laurea Ingegneria Informatica Laboratorio di Informatica

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 02/07/2015/ Foglio delle domande /VERSIONE 1 Matricola Cognome Nome

Analisi e scelta dei dati di input

Informatica per Statistica Riassunto della lezione del 21/10/2011

Corso di Fondamenti di Informatica Linguaggi di Programmazione

SOFTWARE. Programmi e dati che indicano al computer come svolgere un determinato compito

Progetto e realizzazione di una libreria per la comunicazione sicura di. dati sui fallimenti in ambiente Android. Anno Accademico 2011/2012

Scopo del progetto è la costruzione di un compilatore per il linguaggio descritto qui di seguito.

Banco collaudo pompe ricircolatori. 1/5

Introduzione al Project Scheduling

LINGUAGGI DI ALTO LIVELLO

Rilevazione dei fallimenti nel sistema operativo open source Linux per applicazioni critiche Anno Accademico 2006/2007

Informatica Problema Algoritmo Programma

Sviluppo Applicativi Personalizzati per l Automazione delle Analisi SPC

Transcript:

Automazione del testing e Analisi Mutazionale 1 Il Processo di Software Testing Test cases Test data Test results Test repor ts Design test cases Prepare test data Run pr ogram with test da ta Compare results to test cases 2 1

Automazione del Processo di Testing (Testing Automation) È l insieme delle tecniche e delle tecnologie che consentono di automatizzare (anche parzialmente) alcune attività del Processo di Testing. Alcune aree di intervento: A) Generazione dei Casi di Test B) Preparazione ed Esecuzione del Test C) Valutazione dell esito dei casi di test D) Valutazione dell efficacia di Test Suite e di tecniche di testing 3 A) Tecniche di Generazione dei casi di test Negli approcci al testing fin qui analizzati, si è sempre considerato il task di Test Case Design come un task svolto manualmente dal tester A causa dell elevato numero di casi di test necessari per un testing efficace, l operazione di progettazione manuale dei casi di test può essere molto onerosa Tecniche per la generazione automatica deicasi di test possono ridurre drasticamente i costi e i tempi legati alla fase di test design Può però essere necessaria una fase di valutazione dell efficacia dei casi di test e una fase di riduzione dei casi di test ridondanti 4 2

Generazione automatica dei casi di test I test case possono essere generati automaticamente (alcuni esempi): Dall analisi della documentazione di analisi (specifica dei requisiti) Dall analisi della documentazione di progetto (Model based testing) Dall analisi statica del codice sorgente Dall osservazione di esecuzioni reali dell applicazione (user session testing) 5 Un esempio: Il Testing basato su Sessioni Utente Tecnica per la generazione automatica di casi di test per il testing black box partendo dall analisi delle sessioni utente (User Session), ovvero delle sequenze dei valori di input immessi e di output ottenuti in utilizzi reali del software. In pratica, vengono installati strumenti che siano in grado di mantenere un logdi tutte le interazioni che avvengono tra gli utenti dell applicazione da testare e l applicazione stessa (fase di Capture) A partire da tali dati vengono formalizzati casi di test che replichino le interazioni catturate (fase di Replay) In questo modo è possibile ottenere casi di test che siano rappresentativi deireali utilizzidell applicazione da parte deisuoi utenti Usabili per testing di regressione e di accettazione 6 3

Pregi e difetti dello User Session Testing L efficacia non è altissima I casi di test ottenuti coprono gli utilizzi più frequenti del software Difficilmente coprono i valori limite Non garantiscono contro gli usi maliziosi del software L efficienza non è altissima In termini di numero di casi di test Il costo per la raccolta e la riesecuzione dei casi di test è bassissimo La raccolta dei casi di test avviene automaticamente durante utilizzi reali del software da testare La definizione dei casi di test e la loro riesecuzione sono attività automatizzabili Testing Automation 7 Problemi legati allo User Session Testing Il numero di sessioni da prendere in considerazione al fine di poter avere un insieme significativo di casi di test può essere molto elevato Si possono applicare tecniche di minimizzazione per la riduzione del numero di casi di test Il sistema di logging deve essere in grado di monitorare il più possibile anche gli elementi legati all ambiente di esecuzione Per poter ottenere esecuzioni significative può essere necessario raccogliere sessioni per molto tempo Per ridurre tale tempo, si possono utilizzare tecniche di Testing Mutazionale allo scopo di ottenere nuovi test case da una combinazione di quelli esistenti. 8 4

Un ulteriore Approccio: il Testing Mutazionale Il Testing Mutazionale è una tecnica per la generazione automatica di casi di test. A partire da un sottoinsieme di casi di test, si applicano alcuni operatori di mutazione che vadano a modificare/incrociare i dati dei test case esistenti, in modo da ottenere nuovi test case. Es. Si cambia il segno degli input, si raddoppiano i valori di input, si combinano sequenze di input in nuove sequenze, etc 9 Testing Mutazionale Con tale tecnica si possono ottenere Test Suites più piccole (meno test cases) con maggiore copertura con uno sforzo minore rispetto a quelle ottenute semplicemente collezionando sessioni utente. Bisogna però eliminare tutti i test cases che risultano non applicabili. Questa tecnica è spesso utilizzata per il testing di interfacce o di protocolli. 10 5

B) Preparazione ed Esecuzione del Test Una soluzione per l automazione del testing Black Box consiste nell utilizzare appositi framework di supporto all esecuzione dei casi di test. Tra questi framework, molto noti sono quelli della famiglia XUnit, come ad esempio: JUnit (Java) CppUnit (C++) csunit (C#) NUnit (.NET framework) HttpUnit e HtmlUnit (Web Application) Tali framework sono nati nell ambito della extreme Programming per automatizzare il testing di unità, ma possono essere generalizzati anche alle problematiche di testing black box. 12 Vantaggi dell esecuzione automatica del Test Se la progettazione dei casi di test é un lavoro duro e difficile, l esecuzione dei casi di test é un lavoro noioso e gramo! L automatizzazione dell esecuzione dei casi di test porta innumerevoli vantaggi: Tempo risparmiato (nell esecuzione dei test) Affidabilità dei test (non c é rischio di errore umano nell esecuzione dei test) Riuso (parziale) dei test a seguito di modifiche nella classe 13 6

L approccio di JUnit JUnit [1, 2] é un framework che permette la scrittura di test in maniera ripetibile. Fu sviluppato originariamente da Erich Gamma and Kent Beck, nell ambito degli strumenti a supporto dell extreme Programming. Test Result +failure Test Failure <<Interface>> Test Listener 0..* <<Interface>> Test Assert Test Suite Test Case Fig. 1: Il Modello delle classi del frameworkjunit 14 C) Valutazione dell esito dei casi di test Per poter valutare automaticamente l esito di un caso di test, esso dovrebbe essere stato oggettivamente definito e un metodo per la sua valutazione deve essere disponibile Ad esempio, nel caso degli assert in un test Junit In alcuni casi particolari, l esito di un test non ha bisogno di essere definito, o può essere definito automaticamente: Crash o exception testing Regression Testing 23 7

Crash Testing Testare un software in cerca di eccezioni o errori a run-time che interrompano l esecuzione Non è necessario definire alcun oracolo: esso corrisponde alla semplice terminazione irregolare del caso di test Smoke testing Una varietà del crash testing, nella quale l applicazione viene esplorata e navigata il più possibile, cercando di causare un crash Tipicamente, può essere eseguito durante il processo di sviluppo dell applicazione Ad esempio, un ciclo di smoke testing può essere eseguito durante la notte Originariamente utilizzato per il testing di componenti hardware, è molto diffuso nell ambito dei cicli di sviluppo agili, nei quali una versione integrata e testabile del software dovrebbe essere molto spesso disponibile 24 Testing di regressione e Ripple effect Dopo un intervento di manutenzione, è probabile che la modifica effettuata influisca sul resto del sistema, generando nuovi difetti (è il cosiddetto ripple effect). Chi corregge potrebbe non avere una adeguata conoscenza di tutto il sistema e delle sue connessioni Il sistema può regredire ( invecchiare ) verso uno stato più difettoso Occorre eseguire il Testing di Regressione Particolarmente indicato qualora i test siano stati definiti in modo da poter essere rieseguiti automaticamente 25 8

Testing di regressione Un problema: quali test devono essere riprogettati? E quali test possono essere riusati? Sicuramente devono essere riprogettati tutti i casi di test relativi alla nuova funzionalità implementata (o alla funzionalità modificata) Quali altri test dovranno essere rieseguiti? Per determinare quali test preesistenti devono essere rieseguiti, occorre valutare quali altre funzionalità potrebbero essere state influenzate dalla modifica realizzata, ossia eseguire l Impact Analysis: Quale sarà stato l impatto della modifica sul sistema? 26 Impact Analysis e grafo delle dipendenze L analisi di impatto è la tecnica che permette di conoscere, data una modifica, qualiparti del software possono esserne influenzate (e quindi devono essere ri-testate) Una tecnica semplice per la valutazione dell impatto è basata sul Grafo delle Dipendenze Data una modifica su di un modulo m tutti i moduli m che dipendono da m (per i quali esista un arco m m) sono sicuramente impattati dalla modifica di m Tutti i moduli m che dipendono da uno qualunque dei moduli m saranno a loro volta impattati, e così via I casi di test relativi ai moduli impattati (oppure tutti i moduli, nel caso in cui non sia stato possibile effettuare impact analysis) devono essere rieseguiti L oracolo del testing di regressione è fornito dall esito dei test che si otteneva prima di eseguire la modifica 27 9

Grafo delle dipendenze ed Analisi dell Impatto <<dependency>> m <<dependency>> Se m è stato modificato, occorrerà controllare (e ritestare) tutti i moduli che dipendono da m (direttamente, come m, ed indirettamente, come m e m1 ) m <<dependency>> m m1 Se in fase di progettazione del software, tutte le dipendenze fra artifatti fossero registrate esplicitamente, si potrebbe facilmente eseguire tale Analisi di Impatto [A.R. Fasolino, G. Visaggio Improving Software Comprehension through an Automated Dependency Tracer, IEEE Workshop on Program Comprehension,1999] 28 Analisi Mutazionale Come tecnica per valutare l efficacia di tecniche di testing 29 10

Analisi Mutazionale Una tecnica di testing con massima efficacia dovrebbe riuscire a coprire tutti gli elementi difettosi presenti in un applicazione. Se conoscessimo a priori i difetti di una applicazione, potremmo cercare di costruire una test suite che massimizzi sia efficacia che efficienza Più realisticamente, possiamo solo confrontare l efficacia di diverse test suite tra loro Più in generale, è possibile confrontare la capacità potenziale di rilevazione dei difetti di diverse tecniche di generazione di casi di test L unico modo per conoscere a priori i difetti di un software consiste nell iniettarli appositamente (in un software supposto corretto, per ipotesi) 30 Analisi Mutazionale Il primo passo consiste nell immaginare quali possano essere i possibili errori (fault model) E necessario proporre un modello degli errori e dei corrispondenti operatori di mutazione Un operatore di mutazione introduce in un programma, supposto corretto, un difetto (realizzando un operazione di fault injection), trasformando il programma originale in un mutante Fault Program Mutant 31 11

Analisi Mutazionale I difetti (fault) sono inseriti automaticamente nei programmi, ottenendo dei mutanti Su ogni mutante generato si vanno ad eseguire i test case della test suite da valutare L oracolo per l esecuzione di tali test è dato dall output che veniva generato dal programma originale Se l esito del test è positivo (l output del mutante differisce da quello del programma originale), allora si dice che il mutante è stato ucciso (killed) Altrimenti, il mutante non è stato rivelato dal test, ed è sopravvissuto. I mutanti (ad esempio quelli che causano errori in compilazione) sono detti triviali quando possono essere scoperti da qualunque caso di test. Questi mutanti vengono subito scartati Più mutanti sono uccisi, maggiore fiducia si può avere nella capacità della Test Suite di scoprire difetti! 32 Analisi Mutazionale L efficacia di una test suite si può misurare come TER = # killed Mutants / # Mutants In conclusione: Una test suite che riesca a rivelare il maggior numero possibile di mutanti è da considerarsi piùpromettente nella rivelazione di potenziali difetti nell applicazione Una tecnica di testing generante test suites efficaci nell uccisione dei mutanti è da considerarsi più promettente nel mondo reale Nell ipotesi che i difetti iniettati sono rappresentativi di quelli reali 33 12

Problemi dell analisi mutazionale Difficoltà nella modellazione dei difetti di un sistema software Di solito vengono proposti degli operatori di mutazione Basandosi sull esperienza generica di chi propone il testing mutazionale riguardo le possibili cause di errore Basandosi su di un analisi statistica dei difetti rilevati in altri software Gli operatori proposti sono di solito estremamente generici, per poter essere applicabili ad ogni software, indipendentemente dal linguaggio adottato e dalle caratteristiche della singola applicazione Esempi: Operatore che sostituisce un operazione aritmetica con un altra Operatore che sostituisce un operatore relazionale con un altro Operatore che inverte la posizione di due righe di programma, etc. Con questi operatori, l iniezione di difetti può essere svolta automaticamente Difetti più complessi, legati alla logica dell applicazione, devono essere iniettati manualmente e rimangono significativi solo per quella specifica applicazione 34 Problemi dell analisi mutazionale Il numero di possibili difetti è estremamente elevato, già per un piccolo frammento di software Il numero di mutanti generati da un piccolo insieme di operatori è estremamente elevato Per ogni mutante dovrebbero essere eseguiti tutti i casi di test di una test suite L approccio è possibile solo in presenza di un ambiente per la testing automation, e anche in questo casoè molto oneroso Spesso sidecide di applicare gli operatoridi mutazione solo a campione 35 13

Frequenza degli operatori di mutazione Bisogna stabilire anche con quale frequenza applicare i distinti operatori di mutazione. Due tecniche vengono proposte: Tecnica statistica: si osservano le occorrenze di difetti in applicazioni reali e li si inietta nelle stesse proporzioni Tecnica fair : si analizza il codice, contando tutte le opportunità di iniezione delle diverse tipologie di difetti. I difetti vengono iniettati seguendo queste proporzioni. 36 Problemi dell analisi mutazionale Altri problemi: Non tutti i difetti di un sistema software sono legati ad errori nel codice sorgente Si pensi a difetti del tipo di: mancanza di un requisito, scorretta interpretazione di un requisito, etc. Alcuni difetti portano ad errori sintattici e sono già rivelati dal compilatore Non è possibile proporre operatori generali che riproducano gli errori semantici 37 14

Vantaggi L analisi mutazionale è una tecnica completamente automatica, che può essere eseguita in batch senza l assistenza del tester. Occorre però disporre di strumenti automatici per la generazione dei mutanti, l esecuzione dei test, la valutazione dei risultati ( ) Si rivela utile come banco di prova per il confronto in ambiente sperimentale tra diverse test suite, per valutare quale sia in grado di rilevare più difetti. 38 15