Вы находитесь на странице: 1из 17

Prctica 2: Pruebas de Software

18 de febrero de 2015

ndice general
1. Introduccin

2. Estrategia de pruebas
2.1. Proceso de pruebas de la clase Empleado . . . . . . .
2.1.1. Pruebas de caja negra . . . . . . . . . . . . . .
2.1.2. Pruebas de caja blanca . . . . . . . . . . . . . .
2.1.3. Conclusiones . . . . . . . . . . . . . . . . . . . .
2.2. Proceso de pruebas de la clase ListaOrdenadaAcotada
2.2.1. Pruebas de void add (E elemento) . . . . . . . .
2.2.2. Pruebas de void remove (int index) . . . . . . .
2.2.3. Pruebas de E set (int indice, E elemento) . . .
2.2.4. Pruebas de clear() . . . . . . . . . . . . . . . . .
2.2.5. Conclusiones . . . . . . . . . . . . . . . . . . . .
2.3. Proceso de pruebas de la clase Empresa . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

2
.
2
.
2
.
5
.
5
.
5
.
6
.
7
.
8
.
9
.
9
. 10

3. Conclusiones

12

A. Pruebas de caja blanca de ListaOrdenadaAcotada

13

B. Segunda versin del programa

14

ndice de cuadros
2.1.
2.2.
2.3.
2.4.

Clases de equivalencia - clase Empleado - sueldoBruto() 3


Casos de prueba - clase Empleado - sueldoBruto() . . . .
3
Casos de prueba (AVL) - clase Empleado - sueldoBruto() 4
Clases de equivalencia - clase Empleado - darDeBaja()
y darDeAlta() . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.5. Pruebas de caja negra - clase Empleado - darDeBaja()
y darDeAlta() . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.6. Clases de equivalencia - clase ListaAcotadaOrdenada add (E elemento) . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.7. Casos de prueba - clase ListaAcotadaOrdenada - add
(E elemento) . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.8. Clases de equivalencia - clase ListaAcotadaOrdenada add (E elemento) . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.9. Casos de prueba - clase ListaAcotadaOrdenada - add
(E elemento) . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
2.10.Clases de equivalencia - clase ListaAcotadaOrdenada set (int indice, E elemento) . . . . . . . . . . . . . . . . . . .
9
2.11.Casos de prueba - clase ListaAcotadaOrdenada - set
(int indice, E elemento) . . . . . . . . . . . . . . . . . . . . .
9
2.12.Clases de equivalencia - clase Empresa - nuevoEmpleado (Empleado e) y listaEmpleados() . . . . . . . . . . . . . 10
2.13.Valores intersantes - clase Empresa - nuevoEmpleado
(Empleado e) y listaEmpleados() . . . . . . . . . . . . . . . 10
2.14.Casos de prueba - clase Empresa - nuevoEmpleado(Empleado
e) y listaEmpleados() . . . . . . . . . . . . . . . . . . . . . . . 11

II

Captulo 1

Introduccin
En los siguientes captulos se detallarn las pruebas realizadas sobre
el software de gestin de las nminas de los trabajadores de la empresa
Miguel y Emilio, Chapuzas a Domicilio.
Dado que uno de los requisitos era utilizar una librera llamada ListaOrdenadaAcotada, tambin probaremos el funcionamiento de sta y
los posibles errores que encontremos.

Captulo 2

Estrategia de pruebas
Las pruebas realizadas se pueden dividir en dos fases: las pruebas unitarias y las pruebas de integracin.
Las pruebas unitarias se han realizado sobre las clases Empleado y
ListaOrdenadaAcotada. Se ha decidido utilizar un criterio de cobertura
de decisiones.
Las clases Empresa y Empleado se han probado en la fase de integracin. Puesto que uno de los requisitos de la clase Empleado era que fuese
comparable y dado que la clase Empresa necesita poder ordenar a los objetos de la clase Empleado, lo ms sencillo para probarlas era hacerlo a la
vez.
Es decir, hemos utilizado la tcnica Incremental Ascendente (Bottom-up)
para este tipo de prueba.

2.1.

Proceso de pruebas de la clase Empleado

Para la clase Empleado se han definido los siguientes casos de prueba


de caja negra y de caja blanca. Al ser totalmente independiente de las dems clases de la aplicacin se ha podido probar su funcionamiento de una
manera sencilla.

2.1.1.

Pruebas de caja negra

Para el mtodo sueldoBruto() se definieron las siguientes clases de equivalencia (Cuadro 2.1).
Los casos de prueba obtenido a partir de estas, tanto de valores en el
medio de los dominios de cada variable de entrada (Cuadro 2.2) como de
valores en el lmite de la variable fechaIncorporacion (Cuadro 2.3).

CAPTULO 2. ESTRATEGIA DE PRUEBAS


PARMETRO

C LASE DE EQUIVALENCIA VLIDA

C LASE DE
EQUIVALENCIA NO
VLIDA

categora

fecha
Incorporacion
estado

1: DIRECTIVO
2: GESTOR
3: OBRERO
4: fechaIncorporacion <= fechaActual + 5 aos
4: fechaIncorporacion <= fechaActual + 5 aos
6: fechaIncorporacion <= fechaActual + 20 aos
7: fechaIncorporacion > fechaActual + 20 aos
8: ACTIVO
9: BAJA

10: !(DIRECTOR |
GESTOR | OBRERO)
11: Formato no vlido
12: fechaIncorporacion
> fechaActual
13: !(BAJA |
ACTIVO)

Cuadro 2.1: Clases de equivalencia - clase Empleado - sueldoBruto()

ID
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

VALOR
DIRECTIVO, 1/1/2012, ACTIVO
DIRECTIVO, 1/1/2012, BAJA
GESTOR, 1/1/2012, ACTIVO
GESTOR, 1/1/2012, BAJA
OBRERO, 1/1/2012, ACTIVO
OBRERO, 1/1/2012, BAJA
DIRECTIVO, 1/1/2006, ACTIVO
DIRECTIVO, 1/1/2006, BAJA
GESTOR, 1/1/2006, ACTIVO
GESTOR, 1/1/2006, BAJA
OBRERO, 1/1/2006, ACTIVO
OBRERO, 1/1/2006, BAJA
DIRECTIVO, 1/1/1998, ACTIVO
DIRECTIVO, 1/1/1998, BAJA
GESTOR, 1/1/1998, ACTIVO
GESTOR, 1/1/1998, BAJA
OBRERO, 1/1/1998, ACTIVO
OBRERO, 1/1/1998, BAJA
DIRECTIVO, 1/1/1986, ACTIVO
DIRECTIVO, 1/1/1986, BAJA
GESTOR, 1/1/1986, ACTIVO
GESTOR, 1/1/1986, BAJA
OBRERO, 1/1/1986, ACTIVO
OBRERO, 1/1/1986, BAJA

C LASE DE EQ.

S ALIDA

PROBADA

ESPERADA

1,4,8
1,4,9
2,4,9
2,4,10
3,4,9
3,4,10
1,5,9
1,5,10
2,5,9
2,5,10
3,5,9
3,5,10
1,6,9
1,6,10
2,6,9
2,6,10
3,6,9
3,6,10
1,7,9
1,7,10
2,7,9
2,7,10
3,7,9
3,7,10

1500
1125
1200
900
100
75
1550
1162,5
1250
937,5
150
112,5
1600
1200
1300
975
200
150
1700
1275
1400
1050
300
225

Cuadro 2.2: Casos de prueba - clase Empleado - sueldoBruto()

CAPTULO 2. ESTRATEGIA DE PRUEBAS


ID
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

VALOR

4
C LASE DE EQ.

DIRECTIVO, fechaActual - 5 aos, ACTIVO


DIRECTIVO, fechaActual - 5 aos, BAJA
GESTOR, fechaActual - 5 aos, ACTIVO
GESTOR, fechaActual - 5 aos, BAJA
OBRERO, fechaActual - 5 aos, ACTIVO
OBRERO, fechaActual - 5 aos, BAJA
DIRECTIVO, fechaActual - 10 aos, ACTIVO
DIRECTIVO, fechaActual - 10 aos, BAJA
GESTOR, fechaActual - 10 aos, ACTIVO
GESTOR, fechaActual - 10 aos, BAJA
OBRERO, fechaActual - 10 aos, ACTIVO
OBRERO, fechaActual - 10 aos, BAJA
DIRECTIVO, fechaActual - 20 aos, ACTIVO
DIRECTIVO, fechaActual - 20 aos, BAJA
GESTOR, fechaActual - 20 aos, ACTIVO
GESTOR, fechaActual - 20 aos, BAJA
OBRERO, fechaActual - 20 aos, ACTIVO
OBRERO, fechaActual - 20 aos, ACTIVO

S ALIDA

PROBADA

ESPERADA

1,4,8
1,4,9
2,4,9
2,4,10
3,4,9
3,4,10
1,5,9
1,5,10
2,5,9
2,5,10
3,5,9
3,5,10
1,6,9
1,6,10
2,6,9
2,6,10
3,6,9
3,6,10

1500
1125
1200
900
100
75
1550
1162,5
1250
937,5
150
112,5
1600
1200
1300
975
200
150

Cuadro 2.3: Casos de prueba (AVL) - clase Empleado - sueldoBruto()


Para los mtodos darDeBaja() y darDeAlta() se han realizado una sola
tabla (Cuadro 2.4) de clases de equivalencia pues ambos mtodos operan
sobre la misma variable.
PARMETRO

C LASE DE EQUIVALENCIA VLIDA

C LASE DE
EQUIVALENCIA NO
VLIDA

estado

1: ACTIVO
2: BAJA

3: !(BAJA | ACTIVO)

Cuadro 2.4: Clases de equivalencia - clase Empleado - darDeBaja() y


darDeAlta()
A partir de esta tabla se han definido los siguientes casos de prueba,
tanto para darDeBaja() (Cuadro 2.5a) como para darDeAlta() (Cuadro 2.5b).

CAPTULO 2. ESTRATEGIA DE PRUEBAS


ID

VALOR

1
2

ACTIVO
BAJA

C LASE DE EQ.

S ALIDA

PROBADA

ESPERADA

1
2

True
False

(a) Casos de prueba - clase Empleado - darDeBaja()

ID

VALOR

3
4

ACTIVO
BAJA

C LASE DE EQ.

S ALIDA

PROBADA

ESPERADA

1
2

True
False

(b) Casos de prueba - clase Empleado - darDeAlta()

Cuadro 2.5: Pruebas de caja negra - clase Empleado - darDeBaja() y


darDeAlta()
Errores detectados
En estas pruebas no se detect ningn error.

2.1.2.

Pruebas de caja blanca

No ha sido necesario aadir ninguna prueba de caja blanca para mejorar


la cobertura pues aquellos mtodos que no han sido probados (constructor,
toString y comparador) van a ser probadas en la fase de integracin pues
es ms sencillo hacerlo de esta manera.

2.1.3.

Conclusiones

La clase Empleado se comporta segn lo esperado por las pruebas realizadas.

2.2.

Proceso de pruebas de la clase ListaOrdenadaAcotada

La clase ListaOrdenadaAcotada se nos ofrece como una librera. No


disponemos de su cdigo pero se nos entreg la documentacin de la clase generada por javadoc, es decir, los comentarios de documentacin y la
interfaz proporcionada.
Para esta batera de pruebas utilizaremos el tipo entero porque es el tipo
ordenable ms natural.
La clase dispone de los siguientes mtodos y constructores:
void add (E elemento )

CAPTULO 2. ESTRATEGIA DE PRUEBAS

void c l e a r ( )
E get ( i n t i n d i c e )
E remove ( i n t i n d i c e )
E s e t ( i n t i n d i c e , E elemento )
int size ( )
ListaOrdenadaAcotada ( )
ListaOrdenadaAcotada ( i n t max)
De todos estos mtodos se han realizado pruebas sobre add, clear, remove y
set pues son los ms interesantes y proclives a errores.

2.2.1.

Pruebas de void add (E elemento)

Como es habitual se han realizado dos tablas, en el cuadro 2.6 tenemos


la tabla con las clases de equivalencia y en el cuadro 2.7 la tabla con los
casos de prueba propuestos. En estos casos de prueba siempre estaremos
aadiendo el entero 5 a nuestra lista.
PARMETRO

C LASE DE EQUIVALENCIA VLIDA

C LASE DE EQUIVALENCIA
NO VLIDA

elemento

1: elemento comparable

2: elemento no comparable

Cuadro 2.6: Clases de equivalencia - clase ListaAcotadaOrdenada add (E elemento)

CAPTULO 2. ESTRATEGIA DE PRUEBAS


ID
1
2
3
4
5
6
7

PARTICIN
Lista vaca

ID
8
9
10
11

PARTICIN
Lista 1 elemento

Lista 1 elemento
Lista 2 elementos
Lista llena

Lista 2 elementos
Lista llena

E STADO I NICIAL L ISTA


[]
[1]
[6]
[1 2]
[6 7]
[2 6]
[1 2 3 4]

S ALIDA ESPERADA
[5]
[1 5]
[5 6]
[1 2 5]
[5 6 7]
[2 5 6]
IllegalStateExcepion

E STADO I NICIAL L ISTA


[5]
[1 5]
[5 7]
[1 2 3 5]

S ALIDA ESPERADA
[5 5]
[1 5 5]
[5 5 7]
IllegalStateException

Cuadro 2.7: Casos de prueba - clase ListaAcotadaOrdenada - add (E


elemento)
Errores detectados
En esta serie de pruebas nos encontramos errores en los casos de prueba
7 y 11.
Para estas pruebas hemos definido una lista de cuatro elementos mediante el constructor al que se le pasa el parmetro max. Al aadir el cuarto
elemento, el mtodo add lanza la excepcin ArrayIndexOutOfBoundsException. Esto quiere decir, por un lado, que hay un problema en la creacin
de la lista, pues no se crea con el tamao indicado sino con espacio para un elemento menos y, por otro, que no se lanza la excepcin prometida
(IllegalStateException) cuando intentamos aadir ms elementos de los que
caben.

2.2.2.

Pruebas de void remove (int index)

Para la operacin remove hemos definido las siguientes clases de equivalencia (Cuadro 2.8) y casos de prueba (Cuadro 2.9).
PARMETRO

C LASE DE EQUIVALENCIA VLIDA

C LASE DE EQUIVALENCIA
NO VLIDA

index

1: 0 <= index < tamao

2: index >= tamao

Cuadro 2.8: Clases de equivalencia - clase ListaAcotadaOrdenada add (E elemento)

CAPTULO 2. ESTRATEGIA DE PRUEBAS


ID

PARTICIN

1
2
3
4
5
6
7
8

Lista vaca
Lista 1 elemento
Lista 2 elementos

Lista llena

E STADO I NICIAL L ISTA Y


PARMETRO
[ ], 0
[1], 0
[1 2], 0
[6 7], 1
[1 2 3 4], 0
[1 2 3 4], 1
[1 2 3 4], 2
[1 2 3 4], 3

8
S ALIDA ESPERADA
IndexOutOfBoundsException
[]
[2]
[6]
[2 3 4]
[1 3 4]
[1 2 4]
[1 2 3]

Cuadro 2.9: Casos de prueba - clase ListaAcotadaOrdenada - add (E


elemento)
Errores detectados
Se detectaron los mismos errores que en las pruebas anteriores.

2.2.3.

Pruebas de E set (int indice, E elemento)

La definicin de este mtodo es confusa.


Por un lado, no se describe qu se retorna. Podemos suponer que es el elemento anterior que hubiese en esa posicin pero no es ms que una conjetura.
Por otro lado, la escritura posicional en una lista ordenada no tiene mucho sentido. Por qu necesitamos introducir un elemento en una posicin
determinada?
Se nos plantean las siguientes dudas:
Slo es posible introducir un elemento reemplazando otro?
Asumimos que sta es la intencin. Es decir, no se puede introducir un elemento si no es reemplazando otro porque consideramos
que el mtodo se utilizara para reemplazar un elemento por otro.
Si se introduce en una posicin incorrecta, se reordena?
Para las pruebas asumimos que ste es el comportamiento deseado. Es decir, si se introduce un elemento reemplazando otro, el
reemplazo se reordena a su posicin correcta.
En los siguientes cuadros (2.10 y 2.11) se establecen las clases de equivalencia y los casos de prueba de ste mtodo.

CAPTULO 2. ESTRATEGIA DE PRUEBAS

PARMETRO

C LASE DE EQUIVALENCIA VLIDA

C LASE DE EQUIVALENCIA

index
elemento

1: 0 <= index < tamao


2: elemento comparable

3: index >= tamao


4: elemento no comparable

NO VLIDA

Cuadro 2.10: Clases de equivalencia - clase ListaAcotadaOrdenada set (int indice, E elemento)
ID
1
2
3
4
5
6
7
8
9

PARTICIN
Lista vaca
Lista 1 elemento
Lista 2 elementos

Lista llena

E STADO I NICIAL L ISTA Y


PARMETROS
[ ], 0, 7
[1], 0, 7
[1 2], 0, 7
[1 2], 1, 7
[2 8], 0, 7
[8 10], 1, 7
[1 2 3 4], 0, 7
[1 2 3 8], 0, 7
[8 9 10 11], 1, 7

S ALIDA ESPERADA
IndexOutOfBoundsException
[7]
[2 7]
[1 7]
[7 8]
[7 10]
[2 3 4 7]
[2 3 7 8]
[7 9 10 11]

Cuadro 2.11: Casos de prueba - clase ListaAcotadaOrdenada - set (int


indice, E elemento)
Errores detectados
Los casos de prueba 3 y 6 no tienen el comportamiento que esperbamos.
La lista no es reordenada una vez se introduce el nuevo elemento.
Los casos 7 a 9 han resultado en los errores descubiertos con las pruebas
de los mtodos anteriores.

2.2.4.

Pruebas de clear()

Este mtodo tampoco est definido claramente. La especificacin dice


que hace nula la lista pero lo que parece hacer de verdad es vaciarla. Al ser
un mtodo sencillo se han definido pruebas informalmente para determinar
si ste era el comportamiento real como as parece ser.

2.2.5.

Conclusiones

Dado que no hemos podido comprobar el correcto funcionamiento de la


clase ListaOrdenadaAcotada hemos decidido no utilizarla en la implementacin de la clase Empresa. De arreglarse las deficiencias se podra
considerar como una alternativa a la implementacin actual.

CAPTULO 2. ESTRATEGIA DE PRUEBAS

2.3.

10

Proceso de pruebas de la clase Empresa

Para probar el funcionamiento de esta clase es necesario utilizarla en


conjunto con la clase Empleado. Definidas las clases de equivalencia del
cuadro 2.12, manejaremos los valores interesantes del cuadro 2.13.
PARMETRO

C LASE DE EQUIVALENCIA VLIDA

C LASE DE
EQUIVALENCIA NO
VLIDA

categora

fechaIncorporacion

1: DIRECTIVO
2: GESTOR
3: OBRERO
4: fechaIncorporacion <= fechaActual + 5 aos
4: fechaIncorporacion <= fechaActual + 5 aos
6: fechaIncorporacion <= fechaActual + 20 aos
7: fechaIncorporacion > fechaActual + 20 aos

Cuadro 2.12: Clases de equivalencia - clase Empresa - nuevoEmpleado (Empleado e) y listaEmpleados()

ID
1
2
3
4
5
6
7
8

VALOR
DIRECTIVO, 1/1/2012, ACTIVO
GESTOR, 1/1/2012, ACTIVO
OBRERO, 1/1/2012, ACTIVO
DIRECTIVO, 1/1/2006, ACTIVO
GESTOR, 1/1/2006, ACTIVO
OBRERO, 1/1/2006, ACTIVO
DIRECTIVO, 1/1/1998, ACTIVO
GESTOR, 1/1/1998, ACTIVO

Cuadro 2.13: Valores intersantes - clase Empresa - nuevoEmpleado


(Empleado e) y listaEmpleados()
Con esto, definimos los casos de prueba del cuadro 2.14.

10: !(DIRECTOR |
GESTOR | OBRERO)
11: Formato no vlido
12: fechaIncorporacion
> fechaActual

CAPTULO 2. ESTRATEGIA DE PRUEBAS


ID
1
2
3
4
5
6
7
8

PARTICIN
Lista vaca
Lista 1 elemento

Lista 2 elementos

E STADO I NICIAL L ISTA Y PARMETROS


[ ], 1
[1], 2
[1], 3
[1], 4
[1 2], 3
[1 3], 6
[4 1], 7
[8 2], 5

11
S ALIDA ESPERADA
[1]
[1 2]
[1 3]
[4 1]
[1 2 3]
[1 6 3]
[7 4 1]
[8 5 2]

Cuadro 2.14: Casos de prueba - clase Empresa - nuevoEmpleado(Empleado e) y listaEmpleados()


El mtodo totalNominas() depende exclusivamente de que el mtodo
sueldoBruto() de la clase Empleado sea correcto, por lo que no es necesario volver a probarlo completamente.

Errores detectados
En estas pruebas no se encontro ningn error.

Captulo 3

Conclusiones
En lo relativo a las pruebas, huelga decir que no se han incorporado
pruebas para probar las clases de equivalencia no vlidas pues las caracteristicas del lenguaje de programacin utilizado (tipado fuerte, etc.) aseguran que no se utilicen tipos incorrectos.
Los cobertura alcanzada en las clases Empleado y Empresa han sido,
respectivamente, del 99, 4 % y del 100 %.
Visto el resultado de las pruebas hay que desaconsejar la utilizacin
de la clase ListaOrdenadaAcotada para la implementacin de las dems
clases. Si es estrictamente necesario utilizarla, recomendamos implementar las operaciones necesarias dejando la implementacin actual intacta y
cumplir con la interfaz requerida aadiendo operaciones segn sea necesario.

12

Apndice A

Pruebas de caja blanca de


ListaOrdenadaAcotada
Como disponemos del cdigo de la clase, hemos procedido a realizar las
pruebas propuestas y a arreglar los errores encontrados.
Se encontraron dos errores, uno en el mtodo add y otro en el remove de
tipo off-by-one. Adems, se ha quitado por completo el mtodo set, pues su
comportamiento no estaba bien definido.
Adems, se ha comprobado que el valor de maxPorOmision crea correctamente una lista de ese tamao.
Tras hacer esto, se ha comprobado el correcto funcionamiento de la clase
y, para no estropear algo que no est roto, se ha optado por comenzar un
nuevo proyecto en el que incorporar este tipo de lista, aprovechando todo el
codigo desarrollado hasta entonces.

13

Apndice B

Segunda versin del


programa
La principal diferencia entre las dos versiones es la forma en la que se
ha implementado el mtodo compareTo de la clase Empleado.
En la primera versin slo se comparaba la fecha de incorporacin mientras que en sta se compara tambin la categora a la que pertenecen. A la
hora de probar este mtodo, no hemos podido encontrar un caso de prueba que ejecute una de las decisiones, aunque todas las pruebas propuestas
anteriormentes se pasan sin problemas.

14

Вам также может понравиться