Sei sulla pagina 1di 31

Universit`

a degli Studi di Roma La Sapienza, Facolt`


a di Ingegneria
Corso di
INGEGNERIA DEL SOFTWARE
(Ing. Informatica, Nuovo Ordinamento)
Prof. Marco Cadoli, Canale M-Z
A.A. 2005-06

ESERCITAZIONE SUL TEST A SCATOLA BIANCA

Versione definitiva

Obiettivo dellesercitazione
Verificare la comprensione dei concetti principali del test a scatola bianca
(copertura delle istruzioni, delle decisioni, . . . ) su un programma Java di
esempio di alcune decine di righe.
Il programma scelto `
e quello del calcolo della data del giorno successivo,
che:
riceve da tastiera tre interi, che rappresentano un giorno, un mese ed
un anno, e
stampa sullo schermo la data successiva, secondo le regole del calendario
gregoriano (quello in uso in Italia dal 4 ottobre 1582).
Per semplicit`
a, si assume che la data in input sia corretta (ad esempio,
sono proibiti numeri negativi, numeri reali, date inesistenti, . . . ).
Ing. del SW: Esercitazione test scatola bianca. Marco Cadoli. Univ. La Sapienza. A.A. 2005-06 1

Programma in Java
// File DataSuccessiva.java
public class DataSuccessiva {
public static void main (String[] args) {
int giorno, mese, anno, giorni_del_mese = 0;
System.out.println("Data (giorno, mese, anno)?");
giorno = InOut.readInt(); mese = InOut.readInt();
anno = InOut.readInt();
System.out.println("Il giorno successivo al "+ giorno+/
+mese+/+anno+" e ");
switch (mese) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
giorni_del_mese = 31;
break;
case 4: case 6: case 9: case 11:
giorni_del_mese = 30;
break;
case 2:
if ((anno % 4) == 0 && (anno % 400 == 0 || anno % 100 != 0))
giorni_del_mese = 29;
else
giorni_del_mese = 28;
}
Ing. del SW: Esercitazione test scatola bianca. Marco Cadoli. Univ. La Sapienza. A.A. 2005-06 2

if (giorno == giorni_del_mese) {
giorno = 1;
if (mese == 12) {
mese = 1;
anno = anno + 1;
}
else mese = mese + 1;
}
else
giorno = giorno + 1;
System.out.println(giorno + "/" + mese + "/" + anno);
}
}

Obiettivi specifici
Progettare casi di test secondo i criteri di:

1. copertura delle istruzioni

2. copertura delle decisioni

3. copertura delle condizioni

4. copertura delle decisioni e delle condizioni

5. copertura tramite cammini


Ing. del SW: Esercitazione test scatola bianca. Marco Cadoli. Univ. La Sapienza. A.A. 2005-06 3

Obiettivo 1: copertura delle istruzioni


Passi principali:

1. identificazione delle istruzioni nel testo del programma

2. costruzione del grafo di controllo del programma (senza rappresentazione delle condizioni)

3. progettazione dei casi di test secondo il criterio di copertura delle


istruzioni

4. verifica della effettiva copertura

Ing. del SW: Esercitazione test scatola bianca. Marco Cadoli. Univ. La Sapienza. A.A. 2005-06 4

Obiettivo 1, passo 1: identificazione istruzioni


// File DataSuccessiva2.java
public class DataSuccessiva2 {
public static void main (String[] args) {
/* 1 */ int giorno, mese, anno, giorni_del_mese = 0;
System.out.println("Data (giorno, mese, anno)?");
giorno = InOut.readInt(); mese = InOut.readInt();
anno = InOut.readInt();
System.out.println("Il giorno successivo al "+ giorno+/
+ mese+/+anno+" e ");
/* 2 */ switch (mese) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
/* 3 */ giorni_del_mese = 31;
break;
case 4: case 6: case 9: case 11:
/* 4 */ giorni_del_mese = 30;
break;
case 2:
/* 5 */ if ((anno % 4) == 0 && (anno % 400 == 0 || anno % 100 != 0))
/* 6 */ giorni_del_mese = 29;
else
/* 7 */ giorni_del_mese = 28;
}
Ing. del SW: Esercitazione test scatola bianca. Marco Cadoli. Univ. La Sapienza. A.A. 2005-06 5

/* 8 */ if (giorno == giorni_del_mese) {
/* 9 */ giorno = 1;
/* 10 */ if (mese == 12) {
/* 11 */ mese = 1;
anno = anno + 1;
}
/* 12 */ else mese = mese + 1;
}
else
/* 13 */ giorno = giorno + 1;
/* 14 */ System.out.println(giorno + "/" + mese + "/" + anno);
}
}

Obiettivo 1, passo 2: costruzione grafo

non
bisestile

5
mese ==
2

mese ==
4,6,9,11

bisestile

... continua

mese ==
1,3,5,7,8,10,12

Ing. del SW: Esercitazione test scatola bianca. Marco Cadoli. Univ. La Sapienza. A.A. 2005-06 6

Obiettivo 1, passo 2: costruzione grafo (2)

mese ==
12

giorni ==
g d m
...

10

11

mese != 12

12

14

giorni !=
g d m

13

Nota: la complessit`
a ciclomatica di questo grafo `
e pari a 6.

Ing. del SW: Esercitazione test scatola bianca. Marco Cadoli. Univ. La Sapienza. A.A. 2005-06 7

Obiettivo 1, passo 3: progettazione casi test

caso
C1
C2
C3
C4

variabili di input
giorno mese anno
31
12
1999
30
4
1999
18
2
2004
18
2
2003

variabile locale
giorni del mese
31
30
29
28

output previsto
1/1/2000
1/5/1999
19/2/2004
19/2/2003

Ing. del SW: Esercitazione test scatola bianca. Marco Cadoli. Univ. La Sapienza. A.A. 2005-06 8

Obiettivo 1, passo 4: verifica copertura

istruzione
coperta da
C1
coperta da
C2
coperta da
C3
coperta da
C4
coperta da
almeno un caso

10

11

12

13

14

Ogni istruzione `
e coperta, abbiamo raggiunto lobiettivo 1

Ing. del SW: Esercitazione test scatola bianca. Marco Cadoli. Univ. La Sapienza. A.A. 2005-06 9

Obiettivo 2: copertura delle decisioni


Passi principali:
0. le decisioni del programma sono identificate da alcuni degli archi del
grafo di controllo del programma (quelli uscenti dai nodi con outdegree
> 1)
1. verifica se i casi di test precedenti (C1-C4) coprano le decisioni
(a) in caso affermativo, abbiamo terminato
(b) in caso negativo, `
e necessaria:
i. la progettazione dei casi di test secondo il criterio di copertura
delle decisioni
ii. la verifica della effettiva copertura
Ing. del SW: Esercitazione test scatola bianca. Marco Cadoli. Univ. La Sapienza. A.A. 2005-06 10

Obiettivo 2, passo 1: verifica copertura

decisione
coperta da
C1
coperta da
C2
coperta da
C3
coperta da
C4
coperta da
almeno un caso

2-3

2-4

2-5

5-6

5-7

8-13

10-11

10-12

8-9

Ogni decisione `
e coperta, abbiamo raggiunto lobiettivo 2

Ing. del SW: Esercitazione test scatola bianca. Marco Cadoli. Univ. La Sapienza. A.A. 2005-06 11

Obiettivo 3: copertura delle condizioni


Passi principali:

1. identificazione delle condizioni nel testo del programma

2. costruzione del grafo di controllo del programma con rappresentazione


delle condizioni

3. verifica se i casi di test precedenti (C1-C4) coprano le condizioni

4. eventuale riprogettazione dei casi di test

Nota: i passi 3 e 4 verranno raffinati in seguito


Ing. del SW: Esercitazione test scatola bianca. Marco Cadoli. Univ. La Sapienza. A.A. 2005-06 12

Obiettivo 3, passo 1: identificazione condizioni


// File DataSuccessiva3.java
public class DataSuccessiva3 {
public static void main (String[] args) {
/* 1 */ int giorno, mese, anno, giorni_del_mese = 0;
System.out.println("Data (giorno, mese, anno)?");
giorno = InOut.readInt(); mese = InOut.readInt();
anno = InOut.readInt();
System.out.println("Il giorno successivo al "+ giorno+/
+ mese+/+anno+" e ");
/* 2 */ switch (mese) {
/* A */ case 1:
/* B */ case 3:
/* C */ case 5:
/* D */ case 7:
/* E */ case 8:
/* F */ case 10:
/* G */ case 12:
/* 3 */ giorni_del_mese = 31;
break;
/* H */ case 4:
/* I */ case 6:
/* J */ case 9:
/* K */ case 11:
/* 4 */ giorni_del_mese = 30;
Ing. del SW: Esercitazione test scatola bianca. Marco Cadoli. Univ. La Sapienza. A.A. 2005-06 13

break;
case 2:
/* 5 */ if (/* L */ (anno % 4) == 0 &&
(/* M */ anno % 400 == 0 || /* N */ anno % 100 != 0))
/* 6 */ giorni_del_mese = 29;
else
/* 7 */ giorni_del_mese = 28;
}
/* 8 */ if (giorno == giorni_del_mese) {
/* 9 */ giorno = 1;
/* 10 */ if (mese == 12) {
/* 11 */ mese = 1;
anno = anno + 1;
}
/* 12 */ else mese = mese + 1;
}
else
/* 13 */ giorno = giorno + 1;
/* 14 */ System.out.println(giorno + "/" + mese + "/" + anno);
}
}

Obiettivo 3, passo 2: costruzione grafo

Occorre ricostruire alcune parti del grafo di controllo visto in precedenza,


in maniera che vengano rappresentate tutte le condizioni.
In particolare, vanno ricostruiti:

il sottografo comprendente i nodi {5, 6, 7, 8}


il sottografo comprendente i nodi {2, 3, 4, 5}

Ing. del SW: Esercitazione test scatola bianca. Marco Cadoli. Univ. La Sapienza. A.A. 2005-06 14

Obiettivo 3, passo 2: costruzione grafo (2)


Il sottografo comprendente i nodi {5, 6, 7, 8} va ricostruito tenendo conto
della valutazione di corto circuito degli operatori booleani presenti nella
decisione
5L

5
F

N
F

Ing. del SW: Esercitazione test scatola bianca. Marco Cadoli. Univ. La Sapienza. A.A. 2005-06 15

Obiettivo 3, passo 2: costruzione grafo (3)


Il sottografo comprendente i nodi {2, 3} va ricostruito tenendo conto delle
etichette di case multiple

mese!=1
==3

!=7

!=5

2A

==1

!=3
C

==5

!=8
E

==7

==8

!=10
F

==10

==12

mese!=12
H

nel grafo successivo

Ing. del SW: Esercitazione test scatola bianca. Marco Cadoli. Univ. La Sapienza. A.A. 2005-06 16

Obiettivo 3, passo 2: costruzione grafo (4)

Il sottografo comprendente i nodi {3, 4} va ricostruito tenendo conto delle


etichette di case multiple

nel grafo precedente


G

mese!=12
!=4

!=6

==4

!=9

==6

!=11

==9

5L

==11

Ing. del SW: Esercitazione test scatola bianca. Marco Cadoli. Univ. La Sapienza. A.A. 2005-06 17

Obiettivo 3: copertura delle condizioni (2)


Le condizioni del programma sono identificate da alcuni degli archi nuovi
introdotti con la ricostruzione del grafo (quelli uscenti dai nodi con outdegree > 1)
Raffinamento dei passi 3 e 4:

3. verifica se i casi di test precedenti (C1-C4) coprano le condizioni;


in caso affermativo, abbiamo terminato,
in caso negativo, `
e necessario il passo successivo

4. riprogettazione dei casi di test

Ing. del SW: Esercitazione test scatola bianca. Marco Cadoli. Univ. La Sapienza. A.A. 2005-06 18

Obiettivo 3, passo 3: verifica copertura


Verifichiamo la copertura dei nuovi archi uscenti dai nodi L, M, N (introdotti
con la ricostruzione del grafo)

condizione
coperta da
C1
coperta da
C2
coperta da
C3
coperta da
C4
coperta da
almeno un caso

L-7

L-M

M-N

M-6

N-6

N-7

NO

NO

Due condizioni non sono coperte


Ing. del SW: Esercitazione test scatola bianca. Marco Cadoli. Univ. La Sapienza. A.A. 2005-06 19

Obiettivo 3, passo 3: verifica copertura (2)


Verifichiamo la copertura dei nuovi archi uscenti dai nodi A, B, C, D, E, F,
G, H (introdotti con la ricostruzione del grafo)

condizione
coperta da
C1
coperta da
C2
coperta da
C3
coperta da
C4
coperta da
almeno un caso

A-3

NO

A-B

B-3

B-C

C-3

C-D

D-3

D-E

E-3

E-F

F-3

F-G

G-3

G-H

NO

NO

NO

NO

NO

Sei condizioni non sono coperte

Ing. del SW: Esercitazione test scatola bianca. Marco Cadoli. Univ. La Sapienza. A.A. 2005-06 20

Obiettivo 3, passo 3: verifica copertura (3)


Verifichiamo la copertura dei nuovi archi uscenti dai nodi H, I, J, K (introdotti con la ricostruzione del grafo)

condizione
coperta da
C1
coperta da
C2
coperta da
C3
coperta da
C4
coperta da
almeno un caso

G-H

H-4

H-I

I-4

I-J

J-4

J-K

K-4

K-5

NO

NO

NO

Tre condizioni non sono coperte


Ing. del SW: Esercitazione test scatola bianca. Marco Cadoli. Univ. La Sapienza. A.A. 2005-06 21

Obiettivo 3, passo 4

Per rendere pi`


u semplice il raggiungimento degli obiettivi 3 e 4, progettiamo
casi di test per la copertura di tutti gli archi del grafo di controllo con
rappresentazione delle condizioni tramite cammini opportuni.
In altre parole, passiamo direttamente allobiettivo 5.

Ing. del SW: Esercitazione test scatola bianca. Marco Cadoli. Univ. La Sapienza. A.A. 2005-06 22

Obiettivo 5: copertura tramite cammini

Passi principali:

1. progettazione dei cammini ricoprenti e dei relativi casi di test

2. verifica della effettiva copertura

Ing. del SW: Esercitazione test scatola bianca. Marco Cadoli. Univ. La Sapienza. A.A. 2005-06 23

Obiettivo 5, passo 1: progettazione cammini


I cammini corrispondenti ai quattro casi di test visti in precedenza sono:

caso
C1
C2
C3
C4

variabili di input
giorno mese anno
31
12
1999
30
4
1999
18
2
2004
18
2
2003

output
previsto
1/1/2000
1/5/1999
19/2/2004
19/2/2003

cammino
1-2-B-C-D-E-F-G-3-8-9-10-11-14
1-2-B-C-D-E-F-G-H-4-8-9-10-12-14
1-2-B-C-D-E-F-G-H-I-J-K-L-M-N-6-8-13-14
1-2-B-C-D-E-F-G-H-I-J-K-L-7-8-13-14

Per quanto riguarda la progettazione dei nuovi cammini, i criteri da prendere


in considerazione sono i seguenti:
1. Per coprire i nuovi archi uscenti dai nodi A-K, dobbiamo prevedere un
cammino per ognuno dei nove mesi non considerati in C1-C4.
2. Per coprire i nuovi archi uscenti dai nodi M ed N, dobbiamo prevedere
un cammino per ognuna delle due tipologie di anno bisestile non
considerate in C1-C4.
Ing. del SW: Esercitazione test scatola bianca. Marco Cadoli. Univ. La Sapienza. A.A. 2005-06 24

Obiettivo 5, passo 1: progettazione cammini (2)

Per il soddisfacimento dei due criteri esposti in precedenza, i cammini


proposti sono i seguenti:

caso
C5
C6
C7
C8
C9
C10
C11
C12
C13
C14
C15

variabili di input
giorno mese anno
10
1
2009
11
3
2008
12
5
2007
13
7
2006
14
8
2005
15
10
2004
16
6
2003
17
9
2002
18
11
2001
28
2
2000
28
2
2100

output
previsto
11/1/2009
12/3/2008
13/5/2007
14/7/2006
15/8/2005
16/10/2004
17/6/2003
18/9/2002
19/11/2001
29/2/2000
1/3/2100

cammino
1-A-3-8-13-14
1-A-B-3-8-13-14
1-A-B-C-3-8-13-14
1-A-B-C-D-3-8-13-14
1-A-B-C-D-E-3-8-13-14
1-A-B-C-D-E-F-3-8-13-14
1-A-B-C-D-E-F-G-H-I-4-8-13-14
1-A-B-C-D-E-F-G-H-I-J-4-8-13-14
1-A-B-C-D-E-F-G-H-I-J-K-4-8-13-14
1-A-B-C-D-E-F-G-H-I-J-K-L-M-6-8-13-14
1-A-B-C-D-E-F-G-H-I-J-K-L-M-N-7-8-13-14

Ing. del SW: Esercitazione test scatola bianca. Marco Cadoli. Univ. La Sapienza. A.A. 2005-06 25

Obiettivo 5, passo 2: verifica copertura

La verifica che i cammini/casi di test C1-C15 ricoprano tutti gli archi del
grafo di controllo con rappresentazione delle condizioni viene lasciata
per esercizio.

Ing. del SW: Esercitazione test scatola bianca. Marco Cadoli. Univ. La Sapienza. A.A. 2005-06 26

Esercizi
Progettare casi di test, utilizzando la metodologia vista, per i programmi
descritti nel seguito.

1. Il programma Java per il calcolo del massimo comun divisore (cfr.


esercizio 5 dei lucidi su Complessit`
a ciclomatica).

2. Il programma Java per la classificazione dei triangoli, nelle due versioni


degli esercizi 11 e 12 dei lucidi su Complessit`
a ciclomatica.

3. Un programma Java (da scrivere) che acquisisca da tastiera tre interi


che rappresentano giorno, mese ed anno e determini se essi corrispondono effettivamente ad una data del calendario gregoriano (ovvero non
precedente al 4 ottobre 1582). Ad esempio, h31, 4, 2000i e h-2, 4,
2000i non corrispondono a date.
Ing. del SW: Esercitazione test scatola bianca. Marco Cadoli. Univ. La Sapienza. A.A. 2005-06 27