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

Documenti analoghi
Pratiche di XP [Beck] Extreme Programming (XP) Story Card. Gioco di pianificazione

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

Strumenti per l automazione del testing di applicazioni web Javascript-based

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

Programmazione con Java

Ingegneria del Software

Introduzione al Linguaggio C ed all IDE DEV-C++

Software Testing. Esercizi proposti. Esercizi di Testing 1

Informatica 3. LEZIONE 1: Introduzione. Modulo 1: Introduzione al corso Modulo 2: Introduzione ai linguaggi di programmazione

Automatic generation of test cases

Verifica e Validazione del Software

Informatica 3. Informatica 3. Lezione 1- Modulo 1. LEZIONE 1: Introduzione. Concetti di linguaggi di programmazione. Introduzione

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

Il calcolatore. Architettura di un calcolatore (Hardware)

Verifica e Validazione del Software

Il linguaggio di programmazione Python

NetBeans. Dott. Ing. Rossella Rubino A.A. 2007/2008 Laboratorio II CdL: Operatore Informatico Giuridico

Laboratorio di Progettazione di Sistemi Software Design Patterns

Fondamenti VBA. Che cos è VBA

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

AXO - Architettura dei Calcolatori e Sistema Operativo. organizzazione strutturata dei calcolatori

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

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

Laboratorio di Progettazione di Sistemi Software Progetto: modellazione di un dominio e sue attività

Analisi e Progettazione del Software

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura

Corso di Laurea Ingegneria Informatica Laboratorio di Informatica

Sviluppo software in gruppi di lavoro complessi 1

Nell ambito quindi di un ulteriore potenziamento della propria struttura, Klopotek Software & Technology Services S.r.l.

Introduzione. Sommario. Il software. Definizione di Ingegneria del software

Organizzazione della lezione. Extreme Programming (XP) Lezione 19 Extreme Programming e JUnit. JUnit. JUnit. Test-Driven Development

Applicazioni distribuite e sistemi ad oggetti distribuiti. RPC RMI - Web Services 1

Materiale didattico. Sommario

Concetti Introduttivi. Il Computer

Spring Stack Testing: Continuous integration, Continuous Agitation

Design Principle. immagini da SOLID Motivational Posters, by Derick Bailey

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Software testing. Lezione 7 Test Automation Federica Spiga federica_spiga@yahoo.it. A.A Autori: F.Spiga

Laboratorio di Programmazione Lezione 1. Cristian Del Fabbro

Poca documentazione: uso di Story Card e CRC (Class Responsibility Collabor) Collaborazione con il cliente rispetto alla negoziazione dei contratti

Introduzione al Calcolo Scientifico

La Raccolta dei Requisiti. Corso di Ingegneria del Software Anno Accademico 2012/2013

Correzione degli errori

UI Test Automation with Xamarin

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

Laboratorio di Python

Ingegneria del Software

Cosa è un programma. Informatica di Base -- R.Gaeta 18

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

Correttezza (prima parte)

Attività 12. Gli ordini di marcia I linguaggi di programmazione

Capitolo I1: Laboratorio con DevC++

Ingegneria del Software 1: Eclipse

TEORIE E TECNICHE PER LA COMUNICAZIONE DIGITALE

Algoritmo. La programmazione. Algoritmo. Programmare. Procedimento di risoluzione di un problema

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

LINGUAGGI DI ALTO LIVELLO

Esame Laboratorio di Sistemi Operativi Cognome Nome Mat.

A PROPOSITO DI PRINCE2

Corso di Ingegneria del Software. Modelli di produzione del software

Cosa è l Informatica?

Sviluppo software Agile

14. Verifica e Validazione

Metodi di Analisi dei Dati Sperimentali. AA 2009/2010 Pier Luca Maffettone. Elementi di Matlab

Modelli di programmazione parallela

UML. Il linguaggio UML e ArgoUML. Ingegneria dei sistemi software 2009/ /09/2009

Array. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 11. A. Miola Dicembre 2007

Introduzione al DEV C++

Introduzione alla programmazione. Walter Didimo

Anno Accademico Laboratorio di Tecnologie Web Uso di Firebug

IDE DevC

Lez. 5 La Programmazione. Prof. Salvatore CUOMO

Le basi del linguaggio Java

3. Ciclo di Vita e Processi di Sviluppo

Ingegneria del Software II

Corso di Ingegneria del Software. Activity Diagram

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Analisi e Progettazione del Software

Ingegneria del Software L-A

Sviluppo software guidato dal testing. metodologie e strumenti

I lucidi messi a disposizione sul sito del corso di Analisi e progettazione del software NON sostituiscono il libro di testo

Fasi della programmazione. Gabriella Trucco

Horizone Server IN00B02WEB. Horizone PDK

Linguaggi di Programmazione

Introduzione: informatica. 18/2/2013 Informatica applicata alla comunicazione multimediale Cristina Bosco

PROGETTO TG Situazione iniziale e obiettivi:

Metodologie Agili per lo sviluppo di applicazioni Internet Distribuite. Agile Group DIEE, Università di Cagliari

Modelli di processo. Marina Zanella - Ingegneria del Software Processo 1

Fondamenti di Programmazione

Verifica e Validazione del Software

Corso Programmazione

Una fugace occhiata al Test Driven Development

INTRODUZIONE A VISUAL STUDIO

Introduzione alla Programmazione. Giselda De Vita

MODULO 07. La soluzione dei problemi mediante gli algoritmi

Programma svolto di INFORMATICA. Classe 3M - indirizzo MERCURIO A.S. 2010/2011

PROGRAMMAZIONE STRUTTURATA

Programmazione: Sommario

Il linguaggio macchina

Transcript:

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

Introduzione Le pratiche che descriveremo in questa sezione sono tipiche dell'extreme Programming (XP) L'XP si basa su alcune pratiche fondamentali Automatizzare tutti i test Test Driven Development (TDD) Acceptance Test associati ai requisiti (espressi come User Stories) 2

Test Automatici Nell'XP c'è una forte enfasi, che si trova sia nel TDD che nei test di accettazione, sul fatto che i test devono essere automatici I test stessi sono codice I test devono poter essere fatti girare in qualunque momento, da chiunque con uno sforzo minimo Aumenta la confidenza che il nuovo codice aggiunto non destabilizzi quello che c'era prima 3

Test Automatici I test automatici possono formare una suite di regression test Il regression test è la ripetizione dell'esecuzione dei test dopo che sono state cambiate parti di codice L'obiettivo dei regression test è mostrare che il comportamento del sistema non è cambiato I test automatici fanno risparmiare tempo e denaro, perché il debugging alla cieca può essere molto lungo e costoso 4

Benefici dei Test Automatici Sviluppo di sistemi più affidabili Riduzione dello sforzo per gestire e far girare i test Possibilità di effettuare refactoring e di modificare i requisiti anche in corso d'opera Però: I test non sono gratuiti E' necessario trovare un compromesso tra i costi per automatizzare i test e i loro benefici 5

Test Automation Manifesto (Meszaros et al.) Il manifesto contiene le linee guide per creare i test automatici I test automatici dovrebbero essere: Concisi Il più semplici possibile, ma non banali Self Checking Devono riportare i risultati senza necessità di un interpretazione umana Ripetibili Devono poter essere eseguiti ripetutamente senza intervento umano Robusti I test producono sempre gli stessi risultati. Non sono influenzati da cambiamenti dell ambiente esterno, dalla sequenza in cui sono eseguiti, o dal fatto che un test precedente è fallito 6

Test Automation Manifesto (Meszaros et al.) Sufficienti Devono verificare tutti i requisiti del software sotto test Necessari In ogni test, tutto contribuisce alla specifica del comportamento desiderato Chiari Ogni istruzione è facile da capire Efficienti I test sono eseguiti in un tempo ragionevole Specifici Ogni punto in cui il test può fallire corrisponde ad una funzionalità specifica 7

Stakeholders I tre Stakeholders coinvolti nell'attività di testing automatico sono: Lo sviluppatore che deve tener conto del tempo speso per automatizzare i test sia a livello di unit test che di test di accettazione Il manager deve concedere agli sviluppatori il tempo per implementare i test. Questo tempo diventa un investimento a lungo termine perché i test diventano uno strumento fondamentale per i test di regressione Il cliente deve partecipare alla creazione dei test di accettazione 8

Test-Driven Development Test First Programming Prima di modificare o aggiungere del codice, scrivere i test per verificare il codice stesso La programmazione guidata dai test è una tecnica che riguarda non solo i test, ma è una pratica di progetto Gli sviluppatori iniziano a scrivere i test per una user story e poi scrivono il codice che la implementa Se è difficile scrivere un test, è un problema di progetto e non di codifica 9

Test Driven Development Scrivere i test prima del codice Tutto il codice deve avere Test Unitari Tutto il codice deve superare i test unitari al 100% Quando si trova un bug, si scrivono test I Test di Accettazione sono eseguiti spesso e se ne pubblicano i risultati Tutti i test devono essere automatici 10

TDD in 6 passi E' una tecnica utilizzata dagli sviluppatori che eseguono rapide iterazioni dei seguenti passi: 1. Si esegue una breve sessione di progetto, identificando gli oggetti e le loro proprietà rilevanti per sviluppare la funzionalità in esame 2. Si scrivono alcuni test unitari automatici 3. Si eseguono tali test, verificando che falliscano (non c è ancora il codice!) 4. Si implementa giusto il codice che permette di superare i test 11

TDD in 6 passi 5. Si rieseguono tali test, verificando che ora siano superati 6. Si esegue un refactoring sul codice e sui test, per migliorarne il funzionamento e l architettura 12

TDD: risolve quattro problemi cowboy coding: imporsi di scrivere test, e di farli superare dal codice scritto, evita il c.c. accoppiamento e coesione: il codice a basso accoppiamento e alta coesione è facile da testare fiducia: chi scrive codice e supera i test otterrà la fiducia dei propri compagni ritmo: è facile divagare per ore quando si codifica; se ci si abitua al ritmo: scrivi test, scrivi codice, esegui refactoring, scrivi test... ciò non avviene 13

Test Unitari Sono test scritti per ogni modulo di codice Ogni classe del sistema sviluppato avrà una corrispondente classe di test Sono scritti dagli stessi programmatori del codice L insieme dei test unitari è raggruppato in una suite ed i test sono eseguiti in modo automatico Devono sempre essere superati al 100% 14

Il framework XUnit Per molti linguaggi esiste un framework di test gratuito chiamato Xunit Sviluppato originariamente da Kent Beck per il linguaggio Smalltalk (SUnit) Facilita la scrittura e l esecuzione dei test unitari, permette la ripetibilità e l'automazione dei test Esistono versioni per Java (JUnit), C++, VB Ada, C, Delphi,.Net, Eiffel, Forte, Objective-C, Oracle, Perl, Power Builder, Python, Ruby, VOC 15

X-Unit X-Unit si basa su quattro pattern: Fixture: set di variabili o oggetti, inizializzati a valori opportuni, usati ripetutamente come dati di input per i test. Ogni volta che un test è lanciato, la sua Fixture è rinizializzata. Test-Case: è un singolo test, o una serie di test atomici, definito su una Fixture e implementata in codice, in modo tale da essere ripetibile e trasmissibile ad altri sviluppatori. setup() crea o rinizializza la Fixture teardown() rilascia ogni risorsa usata per il test 16

X-Unit Check: un test case stimola una Fixture e controlla i risultati attesi. Si usano funzioni di controllo (Check) capaci di testare condizioni Booleane e riportare i risultati e lo stato del sistema in caso di fallimenti. assert(boolean expression) equals(expression1, expression2) equalsdouble(num expression1, num expression2) 17

X-Unit Test Suite: i test case sono raggruppati e organizzati in Test Suites, sets di test cases che possono essere lanciati automaticamente e ripetutamente. Quando una Test Suite è lanciata tutti i Test Case sono eseguiti e tutti gli error e i failure sono mostrati. Error: errore di esecuzione che porta a un'eccezione o a un crash di sistema Failure: errore dei dati: un Check non è superato 18

JUnit E' un framework di testing open source per Java scritto da Eric Gamma e Kent Beck Si usa per white box testing Disponibile su www.junit.org Permette di scrivere codice più velocemente, aumentando la qualità Diminuisce i tempi di debug Aumenta la confidenza tra gli sviluppatori Permette il refactoring 19

Test di Accettazione Sono test di tipo black box, sono scritti dal cliente in collaborazione con gli sviluppatori Sono creati a partire dalla storie (User Stories) Sono di proprietà del cliente Sono un potente strumento di documentazione del sistema Quando un test di accettazione passa, il cliente considera la storia implementata La percentuale di TA superati denota lo stato di sviluppo del sistema Dovrebbero essere automatici 20

Test di Accettazionec Hanno lo stesso template dei test case di tipo black box Test ID Description, che descrive le precondizioni del test e i suoi passi Expected Results Actual Results 21

Framework for Integrated Test (FIT) Ideato e scritto da Ward Cunningham E' un framework per scrivere test di accettazione automatici Open Source, basato su Java Utilizza HTML ed un semplice linguaggio: per scrivere i test per specificare i risultati attesi per verificare i risultati 22

Riassumendo... test automatici Test unitari I programmatori comunicano tramite il codice e i test unitari Abilitano la proprietà collettiva del codice Abilitano il refactoring e le modifiche Test di accettazione I clienti comunicano tramite le storie e i test di accettazione Mostrano le aspettative del cliente (semplicità) Mostrano i progressi effettuati (fiducia) 23