Analysis of extra effort for Change in Scope

Transcript

Analysis of extra effort for Change in Scope
Software testing
Lezione 3 – Functional Testing
Federica Spiga
[email protected]
A.A. 2010-2011
Autori: A.Bei/F.Rabini/F.Spiga
1
Functional Testing
•Sotto la dicitura funzionale si raccolgono i criteri di progettazione dei test che si
basano solamente sui requisiti di un programma.
•Sono definiti come criteri black-box
•Nella progettazione dei test interverranno solamente le caratteristiche esterne del
programma: la sua interfaccia di ingresso/uscita e l’ambiente di esecuzione.
•I criteri funzionali prevedono di selezionare l’insieme dei dati di ingresso che
costituirà il test a partire dallo studio delle funzionalità di un programma.
• Si distinguono in base alle regole con cui sono individuati i casi rilevanti che
costituiranno la materia del test.
•Nel caso di specifiche espresse in linguaggio formale i criteri funzionali sono più
facilmente applicabili e spesso è possibile ricorrere a strumenti automatici per
generare direttamente i casi di test o, comunque, è possibile definire delle regole che
rendono il procedimento automatizzabile.
•Se le specifiche non sono espresse formalmente o sono espresse in linguaggio
naturale, i criteri funzionali risultano di più difficile applicazione e diventa
fondamentale l’esperienza dei professionisti incaricati di progettare i test
2
Black Box Vs White Box
3
Come deve essere un buon caso di test??
•Efficace: (in senso statistico) deve essere in grado di rilevare un
bug se questo è presente
•Deve rilevare problemi significativi
•Credibile (no “Corner Case”)
•Esito facilmente interpretabile
•Utile per il troubleshooting
•Complessità appropriata allo stato di maturità
•dell’applicazione
Un Test deve essere ragionevolmente in grado di fornire
Informazioni (Kaner)
4
Strategie di test funzionali black box
5
Smoke testing
• Eseguito non appena l’applicazione viene mandata in Test
•E’ un test non strutturato e non esaustivo che si focalizza solo su un alcune
funzionalità principali
• Valuta la stabilità dell’applicazione ai fini di test successivi
•Il termine “smoke test” deriva dal testing di componenti dell’HW:
inserendo un componente nuovo, se non usciva il fumo il test era
considerato “passed”
6
Function and Domain testing
•L’analisi di dominio (domain analysis) è uno strumento semplice ed efficace
per la selezione dei valori di test.
•Decomposizione delle funzionalità
•Per ogni funzionalità la scelta dei dati di input viene eseguita tramite tecniche
di decomposizione
•La progettazione dei casi di Test è formalizzata nei Test Case
•La scelta dei dati di Test è formalizzata nei TestScript
7
Function and Domain testing – progettazione test case
•Il test funzionale viene condotto a diversi livelli di
integrazione, ed in particolare:
―A livello del singolo modulo
―Al termine dell’integrazione tra due sottosistemi oppure
tra un sottosistema ed un singolo modulo A
―Al termine dell’integrazione dell’intero sistema.
•La metodologia adottata prevede la decomposizione
gerarchica di ciascuna funzionalità in:
―FTR, che indica la funzione a livello più alto
―TR, che descrive il caso di test o la funzione elementare
―TS che rappresenta la parte operativa del test stesso.
8
Function and Domain testing – progettazione test case
•Ad ogni TR può corrispondere uno o più Test Script (TS);
•Il TS rappresenta un’istanza del caso di test definita per
descrivere e soddisfare le condizioni alle quali sottoporre
la funzione applicativa, documentando univocamente i
passi operativi che permettono l’esecuzione del test.
•Gli script rappresentano quindi una sequenza di azioni
compiute sull’applicativo in esame. Dovendo essere
reiterabili, potrà risultare necessario considerare più dati
di input; si avrà, inoltre, l’indicazione delle condizioni di
output da verificare.
9
Function and Domain testing – progettazione test case
•I TS descrivono le condizioni da realizzare per verificare le
situazioni d’uso dell’applicazione sotto i seguenti aspetti:
Requisiti per l’esecuzione dello script;
Stato iniziale e finale dell’applicazione;
Operazioni da svolgere;
Dati di ingresso da utilizzare;
Dati sugli archivi;
Risultati attesi, positivi o negativi, in termini di dati o
messaggi restituiti, stati del sistema e dati sugli
archivi.
10
Function and Domain testing - progettazione test case
11
Scenario testing
•Testa lo scenario di Business
•Coinvolge più feature del sistema => Ad ogni scenario corrispondono più test cases
•È un testing in cui ci si concentra su ciò che fa l’utente, piuttosto che su ciò che fa il
software.
• Richiede che vengano catturati i task eseguibili dall’utente (es. i casi d’uso), per poi usarli
insieme ai loro scenari alternativi come casi di test.
• In pratica, si andranno a coprire con i casi di test tutte le varianti di comportamento di
un caso d’uso.
12
State Model Testing
•L’applicazione di questo criterio si basa sulla costruzione, ottenuta a partire dai
requisiti o dalle specifiche del programma, di un grafo che lega un insieme di
fatti elementari di ingresso (cause) e di uscita (effetti) in una rete combinatoria
che definisce delle relazioni di causa-effetto,
•I casi di test si ricavano risalendo il grafo a partire dalle combinazioni di fatti
elementari d’uscita e ottenendo le combinazioni di fatti elementari di ingresso
che le generano.
•Il grafo causa-effetto può essere costruito durante la fase di
validazione dei requisiti, per mettere in luce contraddizioni ed evidenziare parti
mancanti di logica.
13
State Model Testing
•Significa creare una catena di
test che permetta di visitare tutti i
nodi del grafo con sui sono
rappresentati gli stati
dell’applicazione
14
Exploratory testing
•Il tester non deriva i casi di test da documentazione formalizzata, ma li progetta
nel momento in cui testa l’applicazione
•Approccio incrementale: man mano che procede la test execution vengono
realizzate sempre nuove e migliori prove di test
•Il tester impara continuamente dall’applicazione che sta testando
•Il rischio è che si perda la visione d’insieme e si vada in profondita su parti del
prodotto, mentre se ne trascurano altre
15
Regression testing
•Viene eseguito dopo un generico ciclo di bug fixing
•Ha i seguenti obiettivi:
•Verificare che i bug dichiarati Fixed lo siano effettivamente
•Controllare che i cambiamenti non abbiano introdotto nuovi
bug
•Automatizzabile
•Poco efficace: la percentuale di bug rilevati su test dichiarati OK è
tra 5% e 20%
16
Risk Based testing
•Prioritizzare l’effort di test su aree/ funzionalità dell’applicazione
ritenute più rischiose
•Come valuto il rischio di una funzionalià/area?
•Probabilità della verifica di un fault
•Importanza della funzionalità del processo di Business
•Gravità delle conseguenze del fault
17
Test funzionale – Data based black box testing
 Boundary value
– Input indipendenti ed in quantità numeriche (es: età)
– Si sospettano errori se l’input è inserito nei limiti dell’intervallo consentito
 Equivalence partitioning
– Input indipendenti ed in quantità numeriche
– Si sospettano errori computazionali
– Si può assumere che l’input sia suddivisibile in classi di equivalenza
 Decision table
– Input dipendenti
– Si sospettano errori computazionali
18
Equivalence partitioning
 Per input numerici si suddivide il dominio in sottodomini (classi di
equivalenza). Si esegue un test case per ogni sottodominio
g
 Si assume:
f
 Partizionamento in classi di eq.independenti
e
 Ridondanza in ogni sottodominio
a
b
c
d x
 Il dominio dei dati di ingresso è ripartito in classi di equivalenza: due
valori d’ingresso appartengono alla stessa classe di equivalenza se, in
base ai requisiti, dovrebbero produrre lo stesso comportamento del
programma.
 La progettazione dei casi di test prosegue in modo da esercitare il
programma su valori rappresentanti di ognuna delle classi di
equivalenza. Il criterio è economicamente valido solo per quei
programmi per cui il numero dei possibili comportamenti è
sensibilmente inferiore alle possibili configurazioni d’ingresso.
19
Equivalence partitioning
Se una condizione di ingresso specifica un range di valori, identificare una classe di
equivalenza valida e due invalide.
Esempio: Se abbiamo l’insieme di valori {1, . . . . , 99} allora occorreranno le seguenti classi:

–
–
Classe di equivalenza valida {1, . . . , 99};
Classi di equivalenza invalide {x | x < 1} and {x | x > 99}
Se una condizione di ingresso specifica un insieme di valori di ingresso e ciascuno è
gestito in modo diverso, identificare una classe di equivalenza per ciascun elemento
dell’insieme e una invalida EC (Equivalent Class)
Esempio: Se l’ingresso è selezionato da un insieme di N “distinti” elementi allora
occorreranno N + 1 ECs:

–
–
Una valida EC per ciascun elemento dell’insieme {M1}, . .. , {MN};
Una invalida EC per gli elementi fuori dall’insieme {x | x ∉ {M1, . . . , MN}}.
Se si ritiene che il programma maneggia ciascun ingresso valido in modo distinto, allora
occorre definire una valida EC per ciascun ingresso valido.
Esempio: Se l’ingresso viene da un menu allora si definisce una valida EC per ciascun item
del menu.

21
Equivalence partitioning

Se le specifiche indicano N ingressi validi, si devono definire una valida EC e due invalide
EC per ciascun valore N dell’ingresso
–


Se un condizione di ingresso specifica una situazione del tipo “must be”, identificare una
valida EC e una invalida EC.
Esempio: Il primo carattere di un input deve essere numerico allora occorreranno due
EC
–
–

Classe di equivalenza valida {1, . . . , 99};
una valida EC {s | il primo carattere di s è numerico}
una invalida EC {s | il primo carattere non è numerico}
Se gli elementi in una EC sono trattati in modi diversi dal programma, allora la EC deve
essere splittata in EC più piccole.
22
Boundary value testing
 Anche questo criterio è basato su una partizione dei dati di ingresso.
 Le classi di equivalenza possono essere realizzate o in base all’eguaglianza del
comportamento indotto sul programma o in base a considerazioni inerenti il tipo dei
valori d’ingresso.
 Come dati di test sono considerati i valori estremi di ogni classe di equivalenza.
 Questo criterio richiama i controlli sui valori limite tradizionali in altre discipline
ingegneristiche per cui è vera la proprietà del comportamento continuo.
maximal value 
nominal value 
y
d
minimal value  c
a
b
x
23
Boundary value testing
Utilizza come input i valori limite del dominio
Boundary value
 Per input interi nel dominio [a,b], testare
nell’intorno di a and b
maximal value 
nominal value 
y
d
minimal value  c
 # test = per n variabili di input, 4n+1
combinazioni di input
Robustness boundary value
a
b
x
d
 Input fuori dal dominio
 # tests = per n variabili, 6n+1 combinazioni
di input
c
a
b
x
24
Varianti
y
d
Worst-case boundary value
Ipotizza fault multipli
# tests = per n variabili di input
c
n
5 test case
a
b
x
a
b
x
y
Worst-case robustness boundary value
d
 ipotizza fault multipli, test anche fuori dal dominio
 # tests = per n variabili di input
n
test7case
c
25
Decision table testing
 Conosciuto anche come grafo causa effetto
 Rileva difetti relativi ad errori computazionali
 Il dominio di Input è partizionato tramite condizioni
 Ipotesi: variabili dipendenti
 #tests = dipende dalla granuralità di condizioni/azioni
conditions/actions
rule 1
c1: x>=0?
y
c2: x<=y?
y
c3: z even?
_
a1: correct answer type 1
x
a2: correct answer type 2
a3: faulty inputs
rule 2-3
n
n
rule 4
y
n
n
x
rule 5-8
y
- : don’t care
_ : fixed value
x
x
26
Bibliography
 Lecture notes of “Software Testing” (2IW30) course (technisce universiteit
eindhoven) by Judi Romijn (2006).
27