Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
PRIMA PARTE
PRIMA PARTE
Il processo di produzione del software
I.
II.
III.
IV.
// File Triangolo.java
import java.io.*;
public class Triangolo {
public static void main (String[] args) throws IOException {
String nome_file = "dati.txt";
FileInputStream istream = new FileInputStream(nome_file);
BufferedInputStream bis = new BufferedInputStream(istream);
int primo = InOut.readInt(bis), secondo = InOut.readInt(bis),
terzo = InOut.readInt(bis);
bis.close();
System.out.println("Triangolo di lati: "+primo+' '+secondo+' '+terzo);
if (primo == secondo && secondo == terzo)
System.out.println("Equilatero");
else if (primo == secondo || secondo == terzo || primo == terzo)
System.out.println("Isoscele");
else
System.out.println("Scaleno");
}
}
Ing. del SW: Prima parte Sez III
altri 2 (2,5,10)
10. le tre permutazioni del caso 9
11. tre zeri
12. un lato reale
13. due lati come input
14. file non esistente o non leggibile
15. per ogni test avete indicato loutput previsto?
Risultati
Secondo Myers [1979], sulla base dei casi ottenuti
sottoponendo il problema a programmatori
esperti, la media delle risposte affermative alle
domande precedenti inferiore a 8 (su 15).
Il test, anche di un programma banale, non
unattivit banale.
Esercizio 1
Casi di test
Caso
1
2
3
4
5
6
7
8
9
10
000
-2 3 3
555
757
10 4 2
-2 2 3
VUOTO
23
5.16 5.26 5.2
A34
errore
numero negativo
equilatero
isoscele
non triangolo
errore su isoscele
errore di formato
solo due interi
reali, non interi
errore di formato
10
11
12
Definizione di test
Le revisioni e le altre attivit di verifica della
qualit tipicamente sono in grado di rilevare errori,
ma non sono sufficienti
Il rilevamento degli errori costa tipicamente il 3040% del totale di un progetto (ma la percentuale
pu essere molto maggiore)
Il test il processo di utilizzo di un programma
con lo specifico intento di trovare errori prima
della consegna allutente finale
Ing. del SW: Prima parte Sez III
13
14
15
16
17
18
19
Probabilit di
trovare altri errori
20
21
22
23
24
25
Test umano
Le tecniche di test umano (o di analisi statica)
non fanno uso del calcolatore
Queste tecniche non sono sostitutive del test al
calcolatore, e vanno utilizzate nel lasso di tempo che
intercorre:
fra la fine della codifica e
linizio del test al calcolatore
26
Ispezioni e walkthrough
27
Errori comuni
Durante il processo di ispezione viene tipicamente
usata una lista di errori pi comuni.
La lista non deve comprendere aspetti dello stile di
programmazione (ad es., ci sono abbastanza
commenti?).
Presentiamo una lista (da [Myers 1979]) che
propone una classificazione di errori indipendente
dal linguaggio di programmazione (alcuni tipi di
errori potrebbero non essere significativi in Java,
ma esserlo in altri linguaggi, ad es., il C).
Ing. del SW: Prima parte Sez III
28
29
30
31
32
33
dei
parametri
(valore,
34
35
36
37
38
39
40
41
42
43
Il caso di test
{x = 7; y = 9}
(in generale,
{x != 0; y = qualsiasi})
copre le istruzioni
Ing. del SW: Prima parte Sez III
x == 0
x != 0
C
Grafo di controllo
per lesempio
Marco Cadoli, Universit La Sapienza, ott 2005
44
45
46
A
B
x == 0
I casi di test
1. {x=20; y=30}
2. {x=0; y=30}
coprono le decisioni (e quindi le istruzioni).
Il secondo scopre lerrore di divisione per 0 in D
Ing. del SW: Prima parte Sez III
x != 0
C
47
Come si manifesta
il problema in
questo esempio?
48
49
50
I casi di test
C3: {t=0;z=0;w=-5} 1a c.=T, 2a c.=F
C2: {t=0;z=5;w= 5} 1a c.=F, 2a c.=T
coprono le condizioni
Ing. del SW: Prima parte Sez III
51
52
53
I casi di test
C1: {t=0;z=0;w=5} 1a c.=T, 2a c.=T, dec.=T
C4: {t=0;z=5;w=-5} 1a c.=F, 2a c.=F, dec.=F
coprono le decisioni e le condizioni e scoprono le
divisioni per 0 in C e in D
Ing. del SW: Prima parte Sez III
54
C1
SI
NO
C2
NO
NO
C3
-5
SI
NO
C4
-5
NO
SI
55
Trova
errore in C
Trova
errore in D
Decisioni
Casi di test
che lo
soddisfano
C2 + C4
NO
SI
Condizioni
C2 + C3
SI
NO
SI
SI
56
Problema metodologico
In generale esistono varie combinazioni di casi di
test che garantiscono la copertura delle decisioni e
delle condizioni, ma non sempre semplice trovarne
una.
Abbiamo bisogno di un metodo semplice ed
efficace per trovare una copertura delle decisioni
e delle condizioni
57
58
arco
A
nodo
B
D
C
E
F
regione
while (A) {
if (B) { C }
else { D }
E
}
F;
Esempio:
V(G) = 7 - 6 + 2 = 3
V(G) = 3
59
until
sequenza
istruzioni
if semplice
while
case
60
False
True
C
D
E
61
if (a || b)
x;
else y;
a==F
b==F b
...
...
b==T
x
a==T
a==T
...
Ing. del SW: Prima parte Sez III
b==T
a==F
b==F
y
x
...
62
/*B*/
/*C*/
/*D*/
/*E*/
if (z == 0 || w > 0)
w = w/z;
else w = w + 2/t;
System.out.println(z+' '+w+' '+t);
False
== 0
<= 0 w > 0
True
C
!= 0
63
64
65
A
z
!= 0
== 0
<= 0 w > 0
C
D
E
V=8-7+2=3
I tre cammini ricoprenti
1. A-z-w-C-E (C2)
2. A-z-C-E
(C3)
3. A-z-w-D-E (C4)
66
67
68
2
7
D
4
C
5
E
while (A) {
if (B) { C }
else { D }
E
}
F;
Archi/
cammini
Cammini
. A-F
. A-B-D-E-A-F
. A-B-C-E-A-F
La matrice ha
rango 3 (il
massimo)
{ } una
base
69
Esercizio
A
B
2
7
D
4
C
5
E
while (A) {
if (B) { C }
else { D }
E
}
F;
{ 2} una
base?
Cammini
. A-F
. A-B-D-E-A-F
2. A-B-D-E-A-B-D-E-A-F
Ing. del SW: Prima parte Sez III
70
A
B
2
7
D
4
C
5
E
F
71
IN
x!=0
x==0
V(G) = 3
3
4
z>1
z<=1
{C1,C2,C3}
una base di
cammini
linearmente
indipendenti
6
7
OUT
Archi/
cammini
C1
C1
C2
C2
C3
C3
72
73
Esercizio
Con riferimento allesempio Java 3:
Trovare tutte le basi di cammini linearmente
indipendenti
Per ogni base trovata, determinare casi di test
corrispondenti ai cammini relativi, specificando per
ognuno di essi linput e loutput
74
75
2
v.length > 0
i < v.length
i >= v.length
76
77
probabilit di esecuzione
occupazione di risorse (memoria/tempo)
78
...
A
B
C
D
E
F
G
H
I
....
int x,y,a,b;
scanf(%d %d,&x, &y);
a=x;
b=y
while (a!=b)
if(a>b)
a=a-b;
else b=b-a;
printf(%d,a);
C
D
E
a==b
a!=b
a>b
G
a<=b
H
79
80
81
82
specifiche)
83
84
85
86
87
88
89
90
Intervallo di valori
Se una condizione di ingresso specifica un intervallo di valori
vanno identificate:
una classe di equivalenza valida (per i valori compresi
nellintervallo)
due classi di equivalenza non valide (una per i valori
inferiori allestremo di variazione minimo, laltra per i
valori superiori allestremo di variazione massimo)
CLASSI DI EQUIVALENZA
CONDIZIONI ESTERNE
VALORE
DEL
CODICE
CLIENTE FRA 1
E 999
Ing. del SW: Prima parte Sez III
VALIDE
NON VALIDE
91
Numero di valori
Se una condizione di ingresso specifica il numero di valori
vanno identificate:
una classe di equivalenza valida (per un numero
compreso fra il minimo ed il massimo specificati)
due classi di equivalenza non valide (una per i numeri
inferiori al minimo, laltra per i numeri superiori al
massimo)
CLASSI DI EQUIVALENZA
CONDIZIONI ESTERNE
NUMERO
DI
PRODOTTI IN UN
SINGOLO
ORDINE
NON PU ESSERE
SUPERIORE A 6
Ing. del SW: Prima parte Sez III
VALIDE
NON VALIDE
92
Insieme di valori
Se una condizione di ingresso specifica un insieme di valori vanno
identificate:
tante classi di equivalenza valide quanti sono gli elementi
dellinsieme (se c motivo di ritenere che ciascuno degli
elementi trattato diversamente, altrimenti conviene
raggruppare gli elementi)
una classe di equivalenza non valida (per un elemento non
appartenente allinsieme)
CONDIZIONI ESTERNE
TIPO DI CLIENTE:
PRIVILEGIATO,
NORMALE O
POTENZIALE
Ing. del SW: Prima parte Sez III
CLASSI DI EQUIVALENZA
VALIDE
TIPO CL. = PRIVILEGIATO
NON VALIDE
93
Condizioni vincolanti
Se una condizione di ingresso specifica una situazione del
tipo deve essere, vanno identificate:
una classe di equivalenza valida (per gli elementi che
verificano la condizione)
una classe di equivalenza non valida (per gli elementi che
non verificano la condizione).
CONDIZIONI ESTERNE
IL TIPO DI
PRODOTTO
DEVE ESSERE
FABBRICATO
Ing. del SW: Prima parte Sez III
CLASSI DI EQUIVALENZA
VALIDE
NON VALIDE
TIPO PRODOTTO =
ACQUISTATO
94
2: b > 0
3: c > 0
5: b <= 0
6: c <= 0
95
96
97
98
99
VALIDE
NON VALIDE
DI
NON
3. IL TIPO PRODOTTO
DEVE ESSERE
FABBRICATO
ESEMPIO:
(4)
(7)
(2)
(3)
(5)
(6)
TIPO PROD. =
ACQUISTATO
(8)
IL CASO DI TEST:
COD. CLIENTE = 5
N.RO DI PROD. = 4
TIPO PROD. = FABBRICATO
COPRE LE CLASSI (1), (4), (7).
Ing. del SW: Prima parte Sez III
100
101
VALIDE
DI
NON
3. IL TIPO PRODOTTO
DEVE ESSERE
FABBRICATO
NON VALIDE
(1)
(4)
(7)
(2)
(3)
(5)
(6)
TIPO PROD. =
ACQUISTATO
(8)
(3)
(5)
(6)
(8)
COD. CLIENTE =
1000
N.RO DI PROD. =
(F)
(F)
(F)
(F)
(A)
TIPO PROD.
102
classi 1,2,3,7,
C7: 2,2,2,2:
classe 8
10, 14, 16
C8: 2,2:
classe 9
C2: 2,2,1:
classe 11
C9: 2,5,10:
classe 13
C3: 5,4,2:
classe 12
classe 17
103
Esercizi
1. Dire se gli 11 casi di test appena riportati per il
programma del triangolo hanno le seguenti
caratteristiche:
104
105
106
107
108
109
estremo superiore
del dominio di output
input
estremo inferiore
della classe valida
estremo superiore
del dominio di output
estremo superiore
della classe valida
110
Esempio
UN ESEMPIO
CLASSI DI EQUIVALENZA
CONDIZIONI ESTERNE
VALIDE
A+B>C
NON VALIDE
A + B <=C
B=4
C=5
A =1
B=2
C=4
111
Esempio (2)
Se nel programma fosse erroneamente presente la condizione
A + B >= C allora i casi di test precedenti non rileverebbero
lerrore.
112
113
Esercizio
Progettare classi di equivalenza per ununit di programma Java per
la ricerca di un valore in un vettore non vuoto
INPUT = vettore vett di N interi (N>0); intero k
OUTPUT=
114
Soluzione
Passi da seguire:
1. Identificare alcuni criteri per caratterizzare classi di
equivalenza, senza prendere in considerazione i valori estremi
2.
3.
Sintetizzare le classi
115
Soluzione: passo 1
1. Identificare alcune classi di equivalenza, senza
prendere in considerazione i valori estremi. Per
semplicit, prendiamo in considerazione solo il criterio
dellintervallo di valori.
Classe non valida: vettore di zero elementi
(N == 0)
Classe valida: vettore con almeno un elemento
(N > 0)
Ing. del SW: Prima parte Sez III
116
Soluzione: passo 2
2. Raffinare/espandere le precedenti classi (solo
la valida):
a) Estremi per le condizioni di ingresso:
N == 0 (lunghezza minima del vettore)
Uno o pi valori nellintorno: 1, 2
Non esiste lunghezza massima del vettore
Va scelta una lunghezza arbitraria (ad es., 10)
Ing. del SW: Prima parte Sez III
117
c) Eventuali ordinamenti:
k il primo in vett
k lultimo in vett
k presente in vett, ma non il primo n
lultimo
118
Soluzione: passo 3
PARTIZIONE IN DIECI CLASSI DI EQUIVALENZA
========================================================
| N=0 | N=1 |
N=2
|
N>2
|
========================================================
K |
/ |CL. 1 | k il primo | k il primo |CL. 4
|
/ |
|CL. 2
|---------------|
presente | /
|
|---------------| k l'ultimo |CL. 5
| /
|
| k l'ultimo |---------------|
|/
|
|CL. 3
| k in mezzo |CL. 6
--------------------------------------------------------|
K non |CL. 7 |CL. 8 |CL. 9
| CL. 10
|
presente |
|
|
|
|
--------------------------------------------------------
119
{ 47 };
{ 47, 9 };
{ 9, 47 };
{ 47, 9, 2, 4, -1, 22, 55, 28, 12, 0 };
{ 9, 2, 4, -1, 22, 55, 28, 12, 0, 47 };
{ 9, 2, 4, -1, 47, 22, 55, 28, 12, 0 };
{ };
{ 2 };
{ 2, -4 };
{ 9, 2, 4, -1, 46, 22, 55, 28, 12, 0 };
{classe1, classe2, classe3, classe4, classe5,
classe6, classe7, classe8, classe9, classe10 };
for (int i = 0; i <= 9; i++)
System.out.println("Caso di test: " + (i+1) +
", risultato: " +
DaTestare.cerca(tutti[i],47));
120
Esercizi
Progettare classi di equivalenza per le seguenti unit di
programma Java:
1. INPUT =
OUTPUT =
2. INPUT =
OUTPUT =
lista di interi l
massimo valore in l
121
Esercizi (2)
3. INPUT =
OUTPUT =
4. INPUT =
OUTPUT =
vettore di N interi
lo stesso vettore, ordinato
122
123
124
125
126
127
AND
A=conto <X
B=in possesso di un documento
C=lassegno non risulta rubato
D=pu pagare con assegno
A B
128
129
Tipologie di test
Test di integrazione
Test di sistema, di accettazione e di regressione
Test di moduli particolari
130
Tipologie di test
Test di unit
Test di integrazione
Test di sistema
Test di accettazione
Test di regressione
131
Test di integrazione
Una volta testati i singoli moduli (ispezione, black e white)
occorre integrarli tra di loro
Il 75% degli errori nel progetto Apollo furono errori di interfaccia
132
Tecniche di integrazione
A
B
Albero delle
chiamate
DRIVER
B
Driver: sostituisce un modulo
chiamante trasmettendo i
parametri (corretti!)
Ing. del SW: Prima parte Sez III
STUB 1
STUB 2
STUB 3
133
Strategie di integrazione
STRATEGIA NON INCREMENTALE
BIG-BANG
STRATEGIA INCREMENTALE
TOP-DOWN
BOTTOM-UP
134
Il test incrementale
Vantaggi
Non un metodo caotico
Gli errori vengono individuati prima e pi facilmente
Svantaggi
Pu richiedere la scrittura di un numero considerevole di
driver o stub
Riduce il parallelismo
135
Approcci incrementali
APPROCCIO TOP-DOWN
APPROCCIO BOTTOM-UP
A
B
C
STUB E
DRIVER A
D
STUB F
DRIVER B
DRIVER D
STUB H
136
Approccio top-down
Vantaggi
Utile quando i difetti o la complessit sono nella parte alta della struttura
Si ottiene rapidamente uno scheletro del prodotto semifunzionante
Approccio pi naturale
Svantaggi
Gli stub da produrre sono tipicamente complessi
Pu ritardare il completamento del test di alcuni componenti
Pi difficile osservare i risultati
137
Approccio bottom-up
Vantaggi
Utile quando i difetti o la complessit sono nella parte
bassa della struttura
Pi facile da realizzarsi
Pi facile osservare i risultati del test
Svantaggi
La produzione di driver meno naturale (ma esistono
tool per la generazione automatica)
Il prodotto non completo sino a quando non vengono
aggiunti i componenti alti
Ing. del SW: Prima parte Sez III
138
Test di sistema
Avviene dopo il test di integrazione (esiste un sistema
minimo integrato)
Si esegue individuando:
casi di test basati sui requisiti che sono sufficienti a coprire il
sistema da una prospettiva black box (funzionale)
ulteriori casi di test che sono richiesti per misurare ed esplorare
le prestazioni del sistema e la misura di attributi di qualit
Esempi: tempo di risposta, spazio occupato, robustezza
139
140
Test di accettazione
Si esegue a valle del test di sistema.
Serve a confermare che il sistema pronto per un uso
operazionale.
In genere il test di accettazione eseguito dallutente che
deve dimostrare leffettiva funzionalit del sistema e della
relativa documentazione.
La selezione dei casi di test eseguita dagli utenti, con laiuto
di un esperto pianificatore (presso lo sviluppatore: test alfa,
presso il cliente: test beta)
La differenza con il test di sistema, risiede nel fatto che ora i
test vengono eseguiti in un contesto quasi operazionale (il
sistema viene testato utilizzando lhardware, il software e
lambiente utente per cui stato sviluppato).
141
Test di regressione
Effettuato a valle di una modifica del programma:
Controllare che il bug sia stato individuato e corretto:
vanno rieseguiti esattamente gli stessi test che erano stati
eseguiti quando era stato trovato il problema, descritto nei
report.
Cercare di trovare bug correlati: una volta scovato il bug
che causava i problemi, e avendo scoperto le cause allinterno
del codice che lo generavano, opportuno chiedersi se
possono esistere altre parti di codice a cui apportare le
medesime modifiche (o perlomeno simili).
142
143
144
145
III.6. Debugging
Princpi di debugging e riparazione
Debugging per forza bruta
Debugging per abduzione
146
Princpi di debugging
Pensare
Se in impasse, dormirci sopra
Se in impasse, parlarne a qualcun altro
Evitare la sperimentazione (ultima scelta)
147
Princpi di riparazione
Se c un errore, forse ce ne sono altri
Riparare lerrore, non il suo sintomo
La probabilit di avere corretto lerrore non il
100%, e diminuisce al crescere del programma
Potremmo avere introdotto altri errori
148
Soluzione esercizio 1
Do
ma
nda
Ri
spo
sta
No Si Si No Si Si No No Si No Si Si Si No Si
Fil e
2,
6
10 11 12 13 14
15
149