Software testing
Lezione 7 – Test Automation
Federica Spiga
[email protected]
A.A. 2010-2011
Autori: F.Spiga
1
"La prima regola di ogni tecnologia è che l'automazione
applicata ad un'operazione efficiente ne aumenterà
l'efficienza.
La seconda è che l'automazione applicata ad
un'operazione inefficiente ne aumenterà l'inefficienza".
Bill Gates
2
Test automation
 È l’insieme delle tecniche e delle tecnologie che consentono di automatizzare
(anche parzialmente) alcune attività del Processo di Testing.
 Alcune aree di intervento:
– Generazione dei Casi di Test;
– Preparazione ed Esecuzione del Test;
– Valutazione dell’efficacia di Test Suite.
 Potenzialmente utile a ridurre i costi
– esempio: capture and replay tools riduce i costi dovuti alla reesecuzione delle test suite
 Utile ad aumentare la produttività del team
3
Approaching Automation
 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 dei casi 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
Vantaggi dell’automazione
Efficienza
• Ridurre I costi del testing
• Ridurre il tempo speso nella fase di test
• Automatizzare smoke test e regressione test
• Aumentare il coverage dei test
5
Svantaggi dell’automazione
Non ci si deve aspettare che la produttività
aumenti immediatamente!!
– L’approccio all’automazione è un approccio strategico
– Nella realtà spesso I vantaggi per l’organizzazione dell’automation si
scoprono nel medio/lungo periodo
– Per creare un test automatico ci vuole da 3 a 10 volte l’effort rispetto ad un
test manuale
– E’ necessario spendere un maggiore effort per la gestione e la
manutenzione dei test automatici
6
I costi dell’automazione
 I costi dell’automazione possono variare enormemente.
 Alcuni tool possono essere molto semplici da sviluppare così che
sia giustificabile automatizzare anche se I benefici possono essere
modesti
 L’acquisto di alcuni tool di test automation potrebbe troppo
oneroso per il budget di un progetto solo
7
I costi possono dipendere dallo scope
 Spesso sviluppare un tool general-purpose tool è solo
marginalmente più difficile da realizzare che produrre un tool
specializzato per un progetto
 Investimenti per tool general purpose (svilupparli o acquistarli)
potrebbero essere ammortizzati tra più progetti
 In altri casi, per grossi progetti, potrebbe essere conveniente
sviluppare dei tool specifici
8
Focalizzarsi dove l’automazione è più conveniente
 Task semplici e ripetitivi sono quelli più convenienti e economici
da automatizzare
– Un uomo tende ad essere lento e fare errori nei task ripetitivi
 Utile quindi nel:
– Regression testing
– Smoke test
– Performance e load test
 Attività che richiedono creatività e attitudine al problem solving
restano fuori dal dominio dell’automazione
9
Generazione dei test automatici – User Session
 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 log
di 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 dei reali utilizzi
dell’applicazione da parte dei suoi utenti.
10
Test 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…
 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.
11
Test Tools
Lezione 8 – Test Tools
Federica Spiga
[email protected]
A.A. 2010-2011
Autori: F.Spiga/A.Di Toro
12
Test Management
 Un tool per la gestione dei test è Test Link
– http://www.teamst.org/
 Facilità di utilizzo / personalizzazione;
 Raggruppamento dei progetti per aree applicative;
 Creazione/Import/Export dei progetti;
 Gestione requisiti funzionali, test, script, piani di esecuzione e report;
 Gestione delle utenze e assegnazioni dei ruoli all’interno dei test plan;
 Salvataggio e riutilizzo delle sessioni di test;
 Controllo sullo stato di avanzamento dei test in corso;
 Gestione dei risultati dei test eseguiti;
 Metriche per la valutazione dello stato attuale del progetto di test nei confronti degli
obiettivi di qualità prefissati;
 Analisi del rischio in base alla priorità delle funzionalità / test;
13
Test Management
 Un tool per la gestione dei test è Test Link
– http://www.teamst.org/
14
Test Management
15
TestLink – Visione Generale
All’interno del singolo progetto, vengono associati i vari oggetti necessari a monitorare e
a gestire tutto il processo di test.
Principali Funzionalità:
 Requirement Management;
 Test Execution;
 Test Plan Management;
 Metrics Dashboard;
 Test Case Management;c
 Documentation;
16
TestLink – Amministrazione
TestLink permette di gestire le utenze e i ruoli e di assegnare determinati ruoli
per Progetto e per Test Plan.
17
TestLink – Requisiti Funzionali
Per i requisiti vengono messe a disposizione le seguenti funzionalità:
 Creazione/Modifica in base ad una struttura ad albero;
 Creazione della struttura dei Test Case a partire dai requisiti;
 Gestione e Analisi copertura requisiti funzionali / test;
 Import / Export nei formati CVS o XML;
 Stampa del documento dei requisiti.
18
TestLink – Test Plan
Per la gestione dei Test Plan vengono fornite le
funzionalità di controllo a diversi livelli:
 Test Plan;
 Build Management;
 Milestone per Test Plan.
19
TestLink – Test Execution
Creazione e gestione dei Test
Case associabili ai Test Plan per
la definizione delle sessioni di
test.
Possibilità di gestione e controllo delle sessioni di esecuzioni dei test.
20
Test Link - Gestione Reportistica
Possibilità di Export nei formati Excel, Word, HTML, OpenOffice
21
Test Automation – Unit Test
 Un tool per i test automation degli Unit test è Junit
– http://www.junit.org/
 E’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.
Modello delle classi
del framework JUnit
22
Junit – Le componenti
Test: É l’interfaccia che tutti I tipi di classi di test devono implementare. Attualmente il
framework JUnit contiene solo due classi di test, TestCase e TestSuite.
TestCase: É la classe fondamentale che deve essere estesa per scrivere nuovi test. Un
TestCase concreto (cioè una classe che estende TestCase) ha sia metodi che
implementano i veri e propri test, sia i metodi opzionali di setUp (che settano le precondizioni necessarie prima dell’esecuzione di un Test) e tearDown (che eseguono le
operazioni necessarie ad azzerare gli effetti prodotti dal test).
TestSuite: classe che implementa l’interfaccia di Test. Il suo scopo è di raggruppare
Tests di TestCases, o TestSuites.
Assert: superclasse di TestCase che fornisce tutti I metodi assert disponibili nel
framework per verificare l’esito del test.
TestFailure: classe che incapsula l’errore o la failure che si verificano durante
l’esecuzione del test. Essa tiene traccia del Test fallito e dell’eccezione responsabile
dell’errore o della failure.
TestResult: contiene tutti i risultati dell’esecuzione dei test.
TestListener: interfaccia che viene implementata da ogni classe che vuole tenere traccia
del progresso dell’esecuzione di un test. Dichiara I metodi per notificare l’inizio e la fine
di ciascun test, e l’occorrenza di errori e failures.
23
Junit – Plugin
 Alcuni ambienti di sviluppo software mettono a disposizione dei Plug-ins che
semplificano il processo di scrittura ed esecuzione dei test JUnit su classi Java.
 Ad esempio, Eclipse é dotato di un plug-in, di pubblico dominio, che supporta
tutte le operazioni legate al testing di unità con JUnit. In particolare, esso
fornisce dei wizard per:
– Creare classi contenenti test cases;
– Automatizzare l’esecuzione di tutti i test cases;
– Mostrare i risultati dell’esecuzione dei casi di test;
– Organizzare i test cases in test suites.
24
Test Automation – Functional Test
 Un tool per i test automation è Selenium
– http://seleniumhq.org/
 Compatibilità con i browser più diffusi (Firefox, IE, Safari);
 Gestione di Test Suite e Test Case;
 Robustezza del linguaggio di script;
 Personalizzazione degli script registrati;
 Gestione del repository dei test script;
 Pubblicazione delle API di interfaccia;
 Gestione dei risultati dei test eseguiti;
 Compatibilità con più linguaggi di programmazione;
 Funzionalità di record & playback;
 Buona documentazione
25
Automation Test – Selenium Suite Tool
Cosa comprende la Suite?
 Possibilità di registrare i test in Firefox, con
Selnium IDE;
 Possibilità di eseguire i test nei browser più
comuni, con Selenium RC;
 Personalizzazione degli script di test con
l’ausilio di molti linguaggi di programmazione
(C#, Java, Perl, PHP, Python, Ruby);
 Distribuzione dei test su server multipli,
Selenium GRID, risparmiando tempo con la
pianificazione in parallelo dei test.
26
Selenium IDE – Visione Generale
Add In di Firefox, permette la registrazione e l’esecuzione degli script, con
la possibilità di personalizzazione.
27
Selenium IDE – Personalizzazione Script
Tra le Options è possibile selezionare un formato
per poter personalizzare lo script. Ad esempio
selezionando “Java – Selenium RC”, lo script
registrato viene convertito in linguaggio Java, che
può essere importato e modificato in un IDE JAVA
per poi essere eseguito da Selenium Remote
Control.
28
Selenium – Test Runner
Gestione dell’esecuzione delle Suite di Test con la possibilità di avere un riscontro sui
risultati.
29
Selenium – Result Esecution Test
Visualizzazione runtime
dell’esecuzione dei test, con
un resoconto dell’esecuzione
rispetto al numero di test
eseguiti e ai comandi
sottomessi.
Viene messa a disposizione
una visualizzazione dei log di
esecuzione per il debug.
30
Apache JMeter
 Applicazione Java stand-alone utile per l'esecuzione di test di performance e per la
misura delle metriche di performance (service-level)
 Originariamente progettato per testare applicazioni Web (http) è stato esteso per:
– FTP
– RDBMS (JDBC)
– etc.
31
JMeter: concetti di base (1/3)
 TestPlan:
– consiste in uno o più ThreadGroups
 ThreadGroup:
– insieme di utenti simulati
 Thread
Ogni thread rappresenta un Virtual User. 1000
Thread rappresentrano 1000 VU concorrenti
32
JMeter: concetti di base (2/3)
 Timer:
– elemento che caratterizza il comportamento di un ThreadGroup
 Constant timer
 Gaussian random timer
 Uniform random timer
– Nota: senza un timer si simulerebbero degli “iper-utenti”
33
JMeter: concetti di base (3/3)
 Sampler
– Interagiscono con l’applicazione testata.
– Esistono diversi Sampler per diversi protocolli (JDBC, HTTP, FTP, ecc.)
– Per le applicazioni web si può utilizzare il Sampler “HTTP Request”
 Logic controller
– Determina l’ordine con cui i Sampler vengono eseguiti.
 Listener:
– L’informazione prodotta dai Sampler è consumata dai Listener
– Esistono listener per rappresentare i risultati in modo diverso: Graph, TreeView,...
34
JMeter: ciclo di vita di un TestPlan
 Definizione del TestPlan
 Avvio del Test:
–
–
–
–
JMeter compila gli elementi di test;
Viene istanziato un oggetto TestPlan;
Viene configurato il JMeterEngine;
Vengono avviati i vari threads.
 “Stampa” dei risultati del test:
– grafici
– xml
– ...
35
Un esempio di utilizzo…
 Obiettivo: testare una Web application.
 Strategia:
–
–
–
–
settare un ThreadGroup
aggiungere dei HTTP request sampler al ThreadGroup
settare un timer
settare alcuni listener
36
1: avvio di JMeter
TestPlan
Contiene TestPlan attivi
e pronti per essere eseguiti
WorkBench
Area di lavoro utile per costruire
e configurare tests.
37
2: aggiungere un Thread group
38
38
3: configurare un Thread group
39
39
4: aggiungere un sampler
40
40
5: aggiungere un timer
41
6: aggiungere un listener
42
42
7: aggiungere altri listener
 View result tree (il listener appena inserito).
– Utile in fase di creazione del test plan per verificare le risposte del server.
 Graph results e Splin visualizer.
– Mostrano i risultati della simulazione sotto forma di grafici.
 Simple data writer.
– Memorizza i dati della simulazione su un file XML
43
Dove eseguire JMeter?
 Sulla stessa macchina che esegue il server web?
– pro: non ci sono ritardi introdotti dalla rete
– contro: Jmeter entra in competizione per le risorse del server.
 Su una macchina remota?
– pro: Jmeter non influisce sulle prestazioni del server
– contro: possibili ritardi introdotti dal traffico del segmento di rete utilizzato
 Su più macchine remote?
– pro: si minimizza il problema dei colli di bottiglia di rete
– contro: configurazione e avvio un po' più laborioso
44
Dove eseguire JMeter?
45
Bug tracking
 Per la gestione del processo di bug tracking si possono utilizzare
– Bugzilla http://www.bugzilla.org/
– Mantis http://www.mantisbt.org/
46
Bugzilla
 Bugzilla è un'applicazione per il monitoraggio e la gestione dei
bug.
 Bugzilla è un bugtracker (programma per tenere traccia di errori
di programmazione) general purpose (cioè non dedicato ad un
solo possibile utilizzo) inizialmente sviluppato e usato dalla
squadra che ha prodotto Mozilla.
 Rilasciato come software open source da Netscape
Communications nel 1998, Bugzilla è stato adottato da varie
organizzazioni per utilizzarlo come strumento per rintracciare
errori (bugs) per progetti di prodotti sia open source sia
proprietari
47
Bugzilla
 Principali funzionalità:
–
–
–
–
–
–
Schema di sicurezza granulare integrato per prodotto
Dipendenze tra i bug e grafici di dipendenza
Capacità avanzate di report
Un back-end RDBMS stabile e robusto
Configurabilità estesa
Un protocollo di risoluzione dei bug facilmente comprensibile e ampiamente
testato
– Interfacce di programmazione via e-mail, XML, console, e HTTP
– Possibilità di integrazione con software di CMS, inclusi Perforce e CVS (attraverso
l'interfaccia e-mail di Bugzilla e script di checkin/checkout)
48
Scarica

Test - Informatica