Testing

Transcript

Testing
Testing
Definizioni
Problemi del testing:Criterio di selezione dei casi di test
Test Funzionale: suddivisione in classi di equivalenza e analisi
dei valori limite
Test Strutturale: basato sul flusso di controllo e dei dati
Valutazione dei risultati del testing
Criterio di terminazione del testing
Livelli di testing
Test di programmi OO
Pianificazione, Specifica, esecuzione e rapporto del test
Anna Rita Fasolino- Ingegneria del Software Testing
1
Definizioni
•
Errore (umano)
– incomprensione umana nel tentativo di comprendere o risolvere un
problema, o nell’uso di strumenti
•
Difetto (fault o bug)
– Manifestazione nel software di un errore umano, e causa del
fallimento del sistema nell’eseguire la funzione richiesta
•
Malfunzionamento (failure)
– incapacità del software di comportarsi secondo le aspettative o le
specifiche
– un malfunzionamento ha una natura dinamica: accade in un certo
istante di tempo e può essere osservato solo mediante esecuzione
Anna Rita Fasolino- Ingegneria del Software Testing
2
1
Relazione fra Errore, Difetto e
Malfunzionamento
causa
errore
1..*
causa
Difetto
1..*
Malfunzionamento
1..*
Anna Rita Fasolino- Ingegneria del Software Testing
3
Definizioni
• Il Testing (collaudo) è un processo di esecuzione del
software allo scopo di scoprirne i malfunzionamenti
– osservando i malfunzionamenti possiamo dedurre la
presenza di difetti
– Tesi di Dijkstra:
Il testing non può dimostrare l’assenza di difetti, ma può solo
dimostrare la presenza di difetti
• Il Debugging è il processo di scoperta dei difetti a partire
da malfunzionamenti noti
• L’Ispezione è un processo di analisi del software per
scoprirne i difetti
Anna Rita Fasolino- Ingegneria del Software Testing
4
2
Problemi del testing
• Criterio di selezione dei casi di test
• Valutazione dei risultati del test
• Criterio di terminazione del testing
Anna Rita Fasolino- Ingegneria del Software Testing
5
Valutazione dei risultati del test
Casi di test
•
Condizione necessaria per
effettuare un test:
– conoscere il comporatmento
atteso per poterlo confrontare con
quello osservato
•
•
L’oracolo conosce il
comportamento atteso per ogni
caso di prova
Oracolo umano
Software
da
testare
Oracolo
– si basa sulle specifiche o sul
giudizio
•
Oracolo automatico
– generato dalle specifiche (formali)
– stesso software ma sviluppato da
altri
– versione precedente (test di
regressione)
Anna Rita Fasolino- Ingegneria del Software Testing
Comparatore
Risultati del test
6
3
Terminazione del testing
• Quando il programma si può ritenere analizzato a
sufficienza
– Criterio temporale: periodo di tempo predefinito
– Criterio di costo: sforzo allocato predefinito
– Criterio di copertura:
• percentuale predefinita degli elementi di un modello di
programma
• legato ad un criterio di selezione dei casi di test
– Criterio statistico
• MTBF (mean time between failures) predefinito e confronto con
un modello di affidabilità esistente
Anna Rita Fasolino- Ingegneria del Software Testing
7
Problema della selezione dei casi di test
•
•
•
•
•
•
•
Un programma è corretto se è corretto per ogni dato d’ingresso
Un programma è esercitato da un caso di test (sottoinsieme dei dai 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
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
Anna Rita Fasolino- Ingegneria del Software Testing
8
4
Criterio di selezione di test
•
•
•
•
•
Specifica le condizioni che devono essere soddisfatte da un test
Consente di selezionare più test per uno stesso programma
Un criterio di selezione di test è affidabile per un programma se
per ogni coppia di test selezionati, T1 e T2, se T1 ha successo
anche T2 ha successo e viceversa (ossia ogni insieme di casi di
test che sddisfano il criterio rilevano gli stessi errori)
Un criterio di selezione di test è valido per un programma se,
qualora il programma non è corretto, esiste almeno un test
selezionato che ha successo
Teorema di Goodenough e Gerhart
Il fallimento di un test T per un programma P, selezionato da un
criterio C affidabile e valido, permette di dedurre la correttezza
del programma P
Anna Rita Fasolino- Ingegneria del Software Testing
9
Esempio
Program raddoppia
(input, output);
var x, y: integer;
begin
read(x);
y:= x*x;
write(y);
end
Anna Rita Fasolino- Ingegneria del Software Testing
Criterio affidabile ma non valido:
• T deve contenere sottoinsiemi
di {0, 2}
Criterio valido ma non affidabile:
• T deve contenere sottoinsiemi
di {0,1, 2, 3, 4}
Criterio valido e affidabile:
• T deve contenere almeno un
valore maggiore di 3
10
5
Selezione dei casi di test
•
Teorema di Howden
– Non esiste un algoritmo che, dato un programma arbitrario P,
generi un test ideale finito, e cioè un test definito da un criterio
affidabile e valido
•
•
Al di là di casi banali, non è possibile costruire un criterio di
selezione generale di test valido e affidabile che non sia il test
esaustivo
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)
•
E’ preferibile usare più di un criterio di selezione dei test
Anna Rita Fasolino- Ingegneria del Software Testing
11
Classi di criteri di selezione
•
Criteri black-box o funzionali
•
– dipendono solo dalle
specifiche del software
•
•
•
Suddivisione in classi di
equivalenza
Analisi dei valori limite
Grafi causa-effetto
Criteri white-box o strutturali
– dipendono dalla struttura
interna del software
•
•
•
Criteri basati sul flusso di
controllo
Criteri basati sul flusso dei
dati
Analisi mutazionale
Sono spesso usati in maniera complementare
Anna Rita Fasolino- Ingegneria del Software Testing
12
6
Suddivisione in classi di equivalenza
• Il dominio dei dati di ingresso è suddiviso in classi di
casi di test in modo tale che, se il programma è
corretto per un caso di test, si possa dedurre
ragionevolmente che è corretto per ogni caso di test
in quella classe
• Una classe di equivalenza rappresenta un insieme di
stati validi o non validi per una condizione sulle
variabili d’ingresso
Anna Rita Fasolino- Ingegneria del Software Testing
13
Definizione delle classi di equivalenza
• Se la condizione sulle variabili d’ingresso specifica:
– intervallo di valori
• una classe valida per valori interni all’intervallo, una non valida
per valori inferiori al minimo, e una non valida per valori
superiori al massimo
– valore specifico
• una classe valida per il valore specificato, una non valida per
valori inferiori, e una non valida per valori superiori
– elemento di un insieme discreto
• una classe valida per ogni elemento dell’insieme, una non
valida per un elemento non appartenente
– valore booleano
• una classe valida per il valore TRUE, una classe non valida per
il valore FALSE
Anna Rita Fasolino- Ingegneria del Software Testing
14
7
Selezione dei casi di test dalle classi di
equivalenza
• Ogni classe di equivalenza deve essere coperta da
almeno un caso di test
– Un caso di test per ogni classe non valida
– Ciascun caso di test per le classi valide deve comprendere il
maggior numero di classi valide ancora scoperte
Anna Rita Fasolino- Ingegneria del Software Testing
15
Esercizio
• L’utente può chiamare la banca usando il proprio
computer collegato via modem, digitare una password di
6 cifre, e digitare vari comandi che consentono di
accedere alle varie funzioni bancarie (trasferimento fondi,
estratto conto, saldo, fine sessione). L’utente non può
trasferire meno di 100.000 lire e più di un milione per
telefonata
• Selezionare i casi di test mediante partizione in classi di
equivalenza
Anna Rita Fasolino- Ingegneria del Software Testing
16
8
Le condizioni sull’input ‘password’
Condizioni d’ingresso :
• La password può avere una valore compreso tra
“000000” e “999999”
Classi di equivalenza:
• Valida
CE1 : 000000 ≤ PASSWORD ≤ 999999
• Non valide
CE2 : COD < 000000
CE3 : COD > 999999
Anna Rita Fasolino- Ingegneria del Software Testing
17
Le condizioni sull’input ‘comando’
Condizioni di ingresso:
– Il comando può essere di tipo : trasferimento fondi, estratto
conto, saldo, fine sessione
Classi di equivalenza
Valide
CE5: COMANDO = trasferimento fondi
CE6: COMANDO = estratto conto
CE7: COMANDO = saldo
CE8: COMANDO = fine sessione
•
Non valida
CE9: COMANDO = moltiplica
Anna Rita Fasolino- Ingegneria del Software Testing
18
9
Le condizioni sull’input ‘importo’
Condizioni di ingresso:
– L’importo non può essere maggiore di 1.000.000 nè minore
di 100.000
Classi di equivalenza
Valida
CE10: 100.000<= IMPORTO<=1.000.000
•
Non valide
CE11: IMPORTO< 100.000
CE12: IMPORTO> 1.000.000
Anna Rita Fasolino- Ingegneria del Software Testing
19
Selezione dei casi di test
CONDIZIONI
CLASSI DI EQUIVALENZA
# CE
Valide
# CE
Non valide
Valore della
CE1 000000 ≤ password CE2 password< 000000
password tra 000000
CE3 password > 999999
AND
e 999999
password ≤ 999999
Tipo di comando:
L’importo deve
essere tra 100.000 e
1.000.000
CE4
CE5
CE6
CE7
CE9
Trasferimento
CE8 Moltiplica
Estratto conto
Saldo
Fine sessione
100.000 ≤ importo CE 10 importo< 100000
CE 11 importo > 1000000
AND
importo ≤ 1.000.000
Anna Rita Fasolino- Ingegneria del Software Testing
20
10
Scelta dei casi di test ...
Test case
TC1
TC2
TC3
password
123456
123456
123456
comando
trasferimento
estratto conto
saldo
importo
800.000
800.000
800.000
Classi coperte
CE1, CE4, CE9
CE1, CE5, CE9
CE1, CE6, CE9
Test case
TC4
TC5
TC6
password
123456
123
1234567
comando
fine sessione
estratto conto
saldo
importo
800.000
800.000
800.000
Classi coperte
CE1, CE7, CE9
CE2, CE5, CE9
CE3, CE6, CE9
Anna Rita Fasolino- Ingegneria del Software Testing
21
… Scelta dei casi di test
Test case
TC7
TC8
TC9
password
123456
123456
123456
comando
moltiplica
estratto conto
saldo
importo
800.000
50.000
10.000.000
Classi coperte
CE1, CE8, CE9
CE1, CE5, CE10
CE1, CE6, CE11
Anna Rita Fasolino- Ingegneria del Software Testing
22
11
Analisi dei valori limite
• I casi di test che esplorano condizioni limite spesso
rilevano la presenza di malfunzionamenti
• Le condizioni limite:
– sono direttamente agli estremi
– immediatamente al di sopra
– immediatamente al di sotto
degli estremi di:
– classi di equivalenza di ingresso
– classi di equivalenza di uscita
• Le condizioni limite possono essere molto sottili
– usare la creatività per cercare altre situazioni estreme
Anna Rita Fasolino- Ingegneria del Software Testing
23
Criteri basati sul flusso di controllo
Criteri di selezione
• Copertura dei comandi
(statement test)
• Copertura delle decisioni
(branch test)
• Copertura delle condizioni
(condition test)
• Copertura delle decisioni e
delle condizioni
• Copertura dei cammini (path
test)
• Copertura dei cammini
indipendenti
Anna Rita Fasolino- Ingegneria del Software Testing
Criteri di adeguatezza
•
•
•
•
n.ro comandi eseguiti/
n.ro comandi eseguibili
n.ro archi percorsi/
n.ro archi percorribili
n.ro cammini percorsi/
n.ro cammini percorribili
n.ro cammini indip. percorsi/
n.ro ciclomatico
24
12
UN MODELLO DI RAPPRESENTAZIONE DEI
PROGRAMMI: il Control-Flow Graph
Il grafo del flusso di controllo (Control-Flow Graph) di un programma P:
CFG (P) = <N, AC, nI, nF>
dove:
<N, AC> è un grafo diretto con archi etichettati,
{nI, nF} ⊆ N, N- {nI, nF} = Ns∪
∪ Np
Ns e Np sono insiemi disgiunti di nodi istruzione e nodi predicato;
AC ⊆ N-{nF}×
× N-{nI } × {vero, falso, incond} rappresenta la relazione flusso
di controllo; nI ed nF sono detti rispettivamente nodo iniziale e nodo finale.
•
Un nodo n∈
∈ Ns ∪ {nI} ha un solo successore immediato e il suo arco uscente
è etichettato con incond.
•
Un nodo n∈
∈Np ha due successori immediati e i suoi archi uscenti sono
etichettati rispettivamente con vero e falso.
Anna Rita Fasolino- Ingegneria del Software Testing
25
I
procedure Quadrato;
var x, y, n: integer;
begin
1. read(x);
2. if x > 0
then begin
3.
n := 1;
4.
y := 1;
5.
while x > 1 do
begin
6.
n := n + 2;
7.
y := y + n;
8.
x := x - 1;
end;
9.
write(y);
end;
end;
I
1
1,2
2
true
true
false
3
false
3,4,5
true
4
5
true
6
false
6,7,8
false
7
9
8
F
9
F
Anna Rita Fasolino- Ingegneria del Software Testing
26
13
•
Copertura dei comandi (statement test)
– ogni nodo del CFG deve essere eseguito almeno una volta durante il testing; è un
criterio di copertura debole, che non assicura la copertura sia del ramo true che
false di una decisione
•
Copertura delle decisioni (branch test)
– ciascun arco del CFG deve essere attraversato almeno una volta; ogni decisione è
valutata sia nel caso true che false; un limite è legato alle decisioni in cui più
condizioni (legate da operatori logici AND ed OR) sono valutate
•
Copertura delle condizioni (condition test)
– ciascuna condizione nei nodi decisione di un CFG deve essere valutata sia per
valori true che false.
int check (x);// controlla se un intero è fra 0 e 100
int x;
{
if ((x>=0) && (x<= 200))
check= true;
else check = false;
}
TC={x=5, x=-5 } valuta la decisione sia per valori True che False, ma non le condizioni
•
Copertura delle decisioni e delle condizioni
– non basta assicurare la copertura delle condizioni, ma anche quella delle decisioni
Anna Rita Fasolino- Ingegneria del Software Testing
27
Criteri di copertura dei cammini
•
Copertura dei cammini (path test)
– spesso gli errori si verificano eseguendo cammini che includono
particolari sequenze di nodi decisione
– non tutti i cammini eseguibili in un CFG possono essere eseguiti
durante il test (un CFG con loop può avere infiniti cammini eseguibili)
•
Copertura dei cammini indipendenti
– ci si limita ad eseguire un insieme di cammini indipendenti di un CFG,
ossia un insieme di cammini in cui nessun cammino è completamente
contenuto in un altro dell’insieme, nè è la combinazione di altri cammini
dell’insieme
– ciascun cammino dell’insieme presenterà almeno un arco non presente
in qualche altro cammino
– il numero di cammini indipendenti coincide con la complessità
ciclomatica del programma
Anna Rita Fasolino- Ingegneria del Software Testing
28
14
Complessità ciclomatica di un programma
Dato un grafo G di n nodi ed e archi
il numero ciclomatico è dato da:
0
1
true
false
V(G) = e- n+ 2
oppure:
V(G)= d + 1
d= # nodi branch
2
true
false
3
V(G)= 3 =>3 cammini indipendenti
4
5
Compessità ciclomatica
del programma è 3
c1= 0-1-2-4-5
c2= 0-1-2-3-2-4-5
c3= 0-1-5
Anna Rita Fasolino- Ingegneria del Software Testing
29
Livelli di testing
Principi
• I test vanno pianificati in
anticipo
• I test devono cominciare
in piccolo e proseguire in
grande
Bisogni
del cliente
Requisiti
Test di
sistema
Progetto
Test di
integrazione
Codice
Modifiche
Anna Rita Fasolino- Ingegneria del Software Testing
Test di
accettazione
Test di unità
Test di regressione
30
15
LIVELLI DI TESTING
livello produttore
unit testing (Testing di Unità)
integration testing (Testing di Integrazione)
system testing (Testing di Sistema)
livello cooperativo produttore-cliente privilegiato
alpha testing
beta testing
livello cliente o utente
acceptance testing (Testing di accettazione)
Anna Rita Fasolino- Ingegneria del Software Testing
31
Testing di unità (..detta anche di modulo..)
•
il testing é applicato isolatamente ad una unità o
ad un modulo di un sistema software;
•
obiettivo fondamentale é quello di rilevare errori
(logica e dati) nel modulo;
•
prassi diffusa é che esso venga realizzato dal
programmatore che ha prodotto l'unità sotto test.
•
unità: elemento definito nel progetto di un
sistema software e testabile separatamente;
•
nel testing unità e modulo sono spesso usati
come sinonimi.
Anna Rita Fasolino- Ingegneria del Software Testing
32
16
Testing d’integrazione
•
il testing é applicato ad un aggregato di due o più unità di
un sistema software;
•
l'obiettivo é quello di rilevare errori nelle interazioni fra le
unità e nelle funzioni che l'aggregato deve assolvere;
•
non é compito dei programmatori che hanno prodotto le
unità componenti
•
le unità da integrare sono selezionabili in base a criteri
funzionali ricavabili dal progetto (architettura del sistema);
•
partendo da una architettura organizzata gerarchicamente,
le integrazioni possono essere realizzate con approccio
top-down o bottom-up
Anna Rita Fasolino- Ingegneria del Software Testing
33
Testing di sistema
• il testing é applicato al sistema software completo
ed integrato;
• l'obiettivo è quello di valutare l'adesione del sistema
ai requisiti specificati;
• va effettuato dal team addetto al testing
• i requisiti del sistema non sono solo le funzionalità
esterne;
• fondamentali sono i requisiti di qualità, stabiliti ad
esempio sulla base di un modello di qualità del
prodotto opportunamente istanziato
Anna Rita Fasolino- Ingegneria del Software Testing
34
17
Testing di accettazione
•
testing effettuato sull'intero
sistema sulla base di un piano
e di procedure approvate dal
cliente (o utente);
•
l'obiettivo é quello di mettere il
cliente, l'utente o altri a ciò
preposti ( collaudatori o enti ad
hoc) in condizione di decidere
se accettare il prodotto;
•
é a carico del committente;
•
segna il passaggio del
sistema dal produttore
all'ambiente operativo;
•
..é più 'una dimostrazione che
un test'
Anna Rita Fasolino- Ingegneria del Software Testing
35
2 livelli di test di accettazione
• alpha testing
uso del sistema da parte di utenti reali ma
nell'ambiente di produzione e prima della immissione
sul mercato
• beta testing:
installazione ed uso del sistema in ambiente reale
prima della immissione sul mercato
tipicamente adottati dai produttori di packages per mercato di massa
Anna Rita Fasolino- Ingegneria del Software Testing
36
18
Testing di programmi orientati agli oggetti
• I criteri black-box non sono influenzati
• La struttura OO può avere impatto sui criteri white-box
• Test di unità
– operazioni di una classe: stessi criteri applicabili
– classe di oggetti:sono necessari altri criteri
• è l’oggetto che può essere testato, non la classe
• all’interno di una classe non c’è un unico flusso di controllo (a
causa dello scambio di messaggi)
• lo stato di un oggetto influenza il risultato
• problemi dovuti all’uso di ereditarietà
• problemi legati all’uso di binding dinamico
Anna Rita Fasolino- Ingegneria del Software Testing
37
Piano di test
• Documento relativo all’intero progetto
• Struttura
– specifica delle unità di test (per un dato livello di test) Es.
Modulo, gruppi di moduli, programma, sottosistemi, intero
sistema
– Caratteristiche da testare: funzionalità, prestazioni, vincoli di
progetto, sicurezza…
– Approccio: criterio di selezione dei test, criterio di
terminazione, strumenti
– Prodotti del test: es. Casi di test, rapporto finale, diario del
test, statistiche di copertura…
– Schedulazione: quando effettuare il testing e lo sforzo per
attività
– Allocazione del personale
Anna Rita Fasolino- Ingegneria del Software Testing
38
19
Specifica dei casi di test
• Per ogni livello di test
–
–
–
–
n.ro di caso di test
input
condizione da testare
output atteso
• Effettuato il test, si può completare con
– output osservato
• Le specifiche ed i casi di test possono essere riusati per il
test di regressione
Anna Rita Fasolino- Ingegneria del Software Testing
39
Esecuzione del test
• Costruzione di Moduli guida (invocano l’unità sotto test)
• Moduli fittizi (sono invocati dall’unità sotto test)
Modulo
guida
Unità
sotto test
Modulo
fittizio
Anna Rita Fasolino- Ingegneria del Software Testing
40
20
Rapporti sul test
• Diario del test
– descrive i dettagli del test per come si è svolto effettivamente
– la specifica dei casi di test può essere completata e usata
come diario
• Riepilogo del test
– Rivolto al management del progetto
• numero totale di casi di test eseguiti
• numero e tipo di malfunzionamenti osservati
• numero e tipo di difetti scoperti
• Sommario dei malfunzionamenti
– Rivolto a chi deve effettuare il debugging o la correzione
Anna Rita Fasolino- Ingegneria del Software Testing
41
21