Documentos de Académico
Documentos de Profesional
Documentos de Cultura
DISEO DE SISTEMAS DE
INFORMACIN
Tema
Evaluacin / Pruebas del Software
Tema 3.
Evaluacin / Pruebas del Software
ndice
Introduccin
Objetivos y principios de las pruebas
Caso de prueba
Es un conjunto de entradas de prueba,
condiciones de ejecucin y resultados esperados
Tiene un objetivo concreto (probar algo)
Ejemplo: CASO de PRUEBA CP1 para
CASO de USO Entrada Sistema
ENTRADA: usuario hacker password kaixo
CONDICIONES DE EJECUCIN: no existe en la
tabla CUENTA(usuario,pass,intentos) la tupla
<hacker, kaixo,x> pero s una tupla <hacker,hola,x>
RESULTADO ESPERADO: no deja entrar y cambia la tupla a
<hacker,hola,x+1>
Objetivo del caso de prueba: comprobar que no deja entrar a un usuario existente
con un password equivocado.
Hctor Cuadra, hcuadra@uta.cl
Procedimiento de prueba
Pasos que hay que llevar a cabo para probar uno
(o varios) casos de prueba: cmo probar el caso
de prueba y verificar si ha tenido xito?
Ejemplo: Procedimiento de prueba para CP1
- Ejecutar la clase Presentacion
- Comprobar que en la BD passwords.mdb
existe la tupla <hacker,hola,x>
- Escribir hackeren la interfaz grfica (en el
campo de texto etiquetado Escribe nombre usuario
- Escribir kaixoen la interfaz grfica (en el campo de texto Escribe password)
- Pulsar botn Acceder al sistema
- Comprobar que no deja entrar al sistema y que en la BD la tupla ha cambiado a
<hacker,hola,x+1>
Hctor Cuadra, hcuadra@uta.cl
Componente de prueba
Programa que automatiza la ejecucin de uno (o varios) casos de prueba
Una vez escrito, se puede probar muchas veces (cada vez que haya un
cambio en el cdigo de una clase que pueda afectarle)
public class ComponentePruebaEntrSistema {
InterfaceLogicaNegocio ln; InterfaceOperacionesParaPruebas lp;
public static void main(String[] args) {
lp.aniadirUsuario(hacker,hola,3); // Crea usuario con pass y numInt.
boolean b = ln.hacerLogin(hacker,kaixo);
if (b) System.out.println(Error CP1: Permite entrada);
else { int j = lp.comprobarUsuario(hacker,hola); // Dev. N intentos
if (j!=4) System.out.println(Error CP1: No incr.);
else System.out.println(CP1 correcto);} // Fin caso prueba CP1
10
11
12
Ejemplo: EsPrimo
El mtodo
Esprimo.esPrimo
puede ser llamado
con un array de
Strings
13
ENTRADA
OBJETIVO A PROBAR
-Probar todos los caminos
-Probar todas las condiciones
-Probar bucles
14
15
package PruebasConJUnit;
public class ComponentePruebaEsPrimo {
// Un mtodo por cada caso de prueba
public void testPrimoSinPars() {
num = new String[0];
try {result= Esprimo.esPrimo(num);
assertTrue(false);}
catch (Exception e)
{assertTrue(e instanceof ErrorFaltaParametro);}
}
// RESTO DE CASOS DE PRUEBA...
}
Hctor Cuadra, hcuadra@uta.cl
16
17
18
ENTRADA
OBJETIVO A PROBAR
-Valores lmite
19
20
743
935
1983
8pW
prefijo
contrasea
21
22
Pruebas en entornos y
aplicaciones especializadas
Pruebas de interfaces grficas de
usuario
Pruebas sobre ventanas.
Pruebas sobre mens y uso del
ratn.
Pruebas de entrada de datos.
Pruebas de documentacin y de ayuda.
Hctor Cuadra, hcuadra@uta.cl
23
Ejemplos de
CASOS de
PRUEBA
Hctor Cuadra, hcuadra@uta.cl
Ejercicio
Disear un caso de prueba de caja blanca, un caso de prueba de caja negra basado
en la particin equivalente, un caso de prueba de caja negra basado en los valores
lmites y un caso de prueba de interfaz de usuario grfica para el caso de uso
ENTRAR EN EL SISTEMA que se describe a continuacin.
24
25
26
Elaboracin
Construccin
Transicin
Requisitos
Anlisis
Diseo
Implementacin
Prueba
Iteraciones:
ite r.
#1
ite r.
#2
ite r.
#n
ite r.
# n+ 1
ite r.
# n+2
ite r.
#m
ite r.
#m +1
27
Modelo de pruebas
1
Modelo de pruebas
X
Caso de prueba
Sistema de pruebas
X
Procedimiento
de prueba
Componente
de prueba
28
Modelo de pruebas
Artefacto: caso de prueba
Un caso de prueba especifica una forma de
probar el sistema, incluyendo la entrada y
salida con la que se ha de probar y las
condiciones bajo las que ha de probarse
29
30
31
32
NUM
RESULTADO
CodPr
1
2
3
4
5
6
7
8
9
10
11
NUM
SalidaEsper SalReal ResPrueba
0
no positivo
1
primo
2
primo
3
primo
4
no primo
23
primo
-4
no positivo
78298234
no primo
-123412341234123 no positivo
patata
no positivo
782.98234
no primo
no positivo
primo no
primo
EsPrimo
El Componente Prueba de
Esprimo recorre la tabla
PRU_UNIDAD_ESPRIMO
y llama al mdulo Esprimo
con el valor de entrada
NUM. El resultado obtenido
lo escribe en SalReal y si es
igual al valor de SalidaEsper
deja OK en ResPrueba, en
caso contrario deja ERROR
Tabla PRU_UNIDAD_ESPRIMO
33
NUM
SiguientePrimo
EsPrimo
1
2
3
5
19
17
19
patata
no nmero
17.356
19
....
34
35
EsPrimo
ORDEN EN EL QUE SE HACEN LAS PRUEBAS:
1 ) Prueba de Unidad de EsPrimo
2 ) Prueba de Unidad de SiguientePrimo donde se supone que
el mdulo EsPrimo ya no contiene errores
(en este caso coincide con la prueba de integracin de ambos)
Hctor Cuadra, hcuadra@uta.cl
36
SiguientePrimo
SiguientePrimo
SE PRUEBA AS
EsPrimo
Resguardo de
EsPrimo
37
Algoritmo: SiguientePrimo
Entrada: num (entero)
Salida: entero
SiguientePrimo
Tabla PRU_UNIDAD_ESPRIMO
CodPr
NUM
38
Algoritmo: ResguardoEsPrimo
Entrada: numEnt (entero)
Salida: String (primo, no primo, no positivo)
ResSQL := ejecutarBD(Select SalidaEsper
from PRU_UNIDAD_ESPRIMO
where NUM = %numEnt)
si fin (ResSQL) entonces devolver no primo
sino <SE> := siguiente(ResSQL)
devolver SE CodPr NUM
SalidaEsper SalReal ResPrueba
1
0
no positivo
fin si
2
1
primo
3
2
primo
4
3
primo
.....................................................................
Tabla PRU_UNIDAD_ESPRIMO
39
Creacin de un resguardo
Resguardo
de EsPrimo
Algoritmo: ResguardoEsPrimo
Entrada: numEnt (entero)
Salida: String (primo, no primo, no positivo)
ResSQL := ejecutarBD(Select SalidaEsper
from PRU_UNIDAD_ESPRIMO
where NUM = %numEnt)
si fin (ResSQL) entonces devolver no primo
sino <SE> := siguiente(ResSQL)
devolver SE CodPr NUM
SalidaEsper SalReal ResPrueba
1
0
no positivo
fin si
2
1
primo
3
2
primo
4
3
primo
.....................................................................
Tabla PRU_UNIDAD_ESPRIMO
40
Creacin de un resguardo
Resguardo
de EsPrimo
package resguardo;
public class Esprimo {
public static boolean esPrimo(String args[]) throw
if (args[0].equals(0)) throw new ErrorNoNumeroPositivo();
else if (args[0].equals(1)) return true;
else if (args[0].equals(2)) return true;
else if (args[0].equals(3)) return true;
...
return false; }}
CodPr NUM
SalidaEsper SalReal ResPrueba
1
0
no positivo
2
1
primo
3
2
primo
4
3
primo
.....................................................................
Tabla PRU_UNIDAD_ESPRIMO
Hctor Cuadra, hcuadra@uta.cl
41
Bibliografa
Ingeniera del Software. Un enfoque
prctico (5 edicin)
Roger S. Pressman
Editorial Mc. Graw Hill, 2001
Captulos 17 y 18
42
43
Solucin
public class ComponentePruebaEntrSistema {
InterfaceLogicaNegocio ln; OperacionesParaPruebas lp;
public static void main(String[] args) {
// Obtener lgica negocio y operaciones para pruebas
// CP2: usuario y passwords correctos, n intentos no superado
lp.aniadirUsuario(correcto,acertado,1);
boolean b = ln.hacerLogin(correcto,acertado);
if (!b) System.out.println(Error CP2: No permite entrada);
else {int j = lp.comprobarUsuario(correcto,acertado);
// Dev. N intentos
if (j!=0) System.out.println(Error CP2: No puesto a 0.);
else System.out.println(CP2 correcto);}
}
44
45
Solucin
public class ComponentePruebaEntrSistema {
InterfaceLogicaNegocio ln; OperacionesParaPruebas lp;
public static void main(String[] args) {
// Obtener lgica negocio y operaciones para pruebas
// CP3: usuario y passwords correctos, n intentos superado
lp.aniadirUsuario(correcto,acertado,4);
boolean b = ln.hacerLogin(correcto,acertado);
if (b) System.out.println(Error CP3: Permite entrada);
else {int j = lp.comprobarUsuario(correcto,acertado);
// Dev. N intentos
if (j!=5) System.out.println(Error CP3: No incrementa.);
else System.out.println(CP3 correcto);}
}
Ejercicio
Disear un caso de prueba de caja blanca, un caso de prueba de caja negra basado
en la particin equivalente, un caso de prueba de caja negra basado en los valores
lmites y un caso de prueba de interfaz de usuario grfica para el caso de uso
ENTRAR EN EL SISTEMA que se describe a continuacin.
46
47
Solucin al ejercicio
Caso de prueba de caja blanca:
No se puede ya que el cdigo fuente no est accesible.
Caso de prueba de caja negra basado en la particin equivalente
1) Entrada: usuario pepita password: e445dr Salida: dar paso (usuario y
password vlidos; suponiendo que se encuentran en la BD)
2) Entrada: usuario pepita2 password e445dr Salida: no dar paso (usuario
no vlido por contener caracteres no letras y ms de 5)
3) Entrada: usuario pepi password e445dr Salida: no dar paso (usuario no
vlido por contener menos de 5 letras)
4) Entrada: usuario pep3 password e445dr Salida: no dar paso (usuario no
vlido por contener menos de 5 letras, y algunas no ser letras)
5) Entrada: usuario password e445dr Salida: no dar paso (usuario en
blanco)
6) Entrada: usuario 3432432 password e445dr Salida: no dar paso
(usuario no vlido por no contener ni una sola letra, aunque s ms de 5
caracteres)
7) Entrada: usuario pepita password: Salida: no dar paso (usuario vlido
pero password no, suponiendo que se encuentra en la BD)
48
Solucin al ejercicio
Caso de prueba de caja negra basado en los valores lmite
1) Entrada: usuario pepita password: malPassw Salida: no obtener paso
intentar otra vez: usuario pepita password: malPassw Salida: no obtener paso
intentar otra vez: usuario pepita password: malPassw
Salida: no obtener paso y comprobar que se bloquea // Intenta 4 veces
(suponiendo usuario vlido pero password incorrecto)
2) Entrada: usuario pepita password: malPassw Salida: no obtener paso
intentar otra vez: usuario pepita password: malPassw Salida: no obtener paso
intentar otra vez: usuario pepita password: e445dr
Salida: obtener paso // Intenta 3 veces
(suponiendo usuario vlido pero password incorrecto)
3) Entrada: usuario pepito password: malPassw => no obtener paso
intentar otra vez: usuario pepito password: malPassw => no obtener paso
intentar otra vez: usuario pepito password: malPassw
Salida: no obtener paso pero comprobar que no se bloquea // Intenta 3 veces
(suponiendo tanto usuario como password incorrectos)
4) Entrada: usuario pepita password: malPassw => no obtener paso
intentar otra vez: usuario pepita password: e445dr
Salida: obtener paso // Intenta 2 veces
(suponiendo usuario pepita vlido y password e445dr vlido)
Hctor Cuadra, hcuadra@uta.cl
49
Solucin al ejercicio
50
51
Solucin al ejercicio
Caso de prueba de caja blanca:
No se puede ya que el cdigo fuente no est accesible.
Caso de prueba de caja negra basado en la particin equivalente
1) Entrada: usuario pepita password: e445dr Salida: dar paso (usuario y password vlidos; suponiendo que se encuentran en la BD)
2) Entrada: usuario pepita2 password e445dr Salida: no dar paso (usuario no vlido por contener caracteres no letras y ms de 5)
3) Entrada: usuario pepi password e445dr Salida: no dar paso (usuario no vlido por contener menos de 5 letras)
4) Entrada: usuario pep3 password e445dr Salida: no dar paso (usuario no vlido por contener menos de 5 letras, y algunas no ser letras)
5) Entrada: usuario password e445dr Salida: no dar paso (usuario en blanco)
6) Entrada: usuario 3432432 password e445dr Salida: no dar paso (usuario no vlido por no contener ni una sola letra, aunque s ms de 5 caracteres)
7) Entrada: usuario pepita password: Salida: no dar paso (usuario vlido pero password no, suponiendo que se encuentra en la BD)
Caso de prueba de caja negra basado en los valores lmite
1) Entrada: usuario pepita password: malPassw Salida: no obtener paso
intentar otra vez: usuario pepita password: malPassw Salida: no obtener paso
intentar otra vez: usuario pepita password: malPassw
Salida: no obtener paso y comprobar que se bloquea // Intenta 4 veces
(suponiendo usuario vlido pero password incorrecto)
2) Entrada: usuario pepita password: malPassw Salida: no obtener paso
intentar otra vez: usuario pepita password: malPassw Salida: no obtener paso
intentar otra vez: usuario pepita password: e445dr
Salida: obtener paso // Intenta 3 veces
(suponiendo usuario vlido pero password incorrecto)
3) Entrada: usuario pepito password: malPassw => no obtener paso
intentar otra vez: usuario pepito password: malPassw => no obtener paso
intentar otra vez: usuario pepito password: malPassw
Salida: no obtener paso pero comprobar que no se bloquea // Intenta 3 veces
(suponiendo tanto usuario como password incorrectos)
4) Entrada: usuario pepita password: malPassw => no obtener paso
intentar otra vez: usuario pepita password: e445dr
Salida: obtener paso // Intenta 2 veces
(suponiendo usuario pepita vlido y password e445dr vlido)
Caso de prueba de interfaz grfica de usuario:
1) Entrada: usuario pepita password: malPassw Salida: comprobar passw. NO visible
2) Entrada: pulsar botn acceder al sistema Salida: comprobar que responde
3) Entrada: pulsar icono minimizar ventana Salida: comprobar que se minimiza
Hctor Cuadra, hcuadra@uta.cl
52
Solucin al ejercicio
Caso de prueba de caja blanca:
No se puede ya que el cdigo fuente no est accesible.
Caso de prueba de caja negra basado en la particin equivalente
1) Entrada: usuario pepita password: e445dr Salida: dar paso (usuario y
password vlidos; suponiendo que se encuentran en la BD)
2) Entrada: usuario pepita2 password e445dr Salida: no dar paso (usuario
no vlido por contener caracteres no letras y ms de 5)
3) Entrada: usuario pepi password e445dr Salida: no dar paso (usuario no
vlido por contener menos de 5 letras)
4) Entrada: usuario pep3 password e445dr Salida: no dar paso (usuario no
vlido por contener menos de 5 letras, y algunas no ser letras)
5) Entrada: usuario password e445dr Salida: no dar paso (usuario en
blanco)
6) Entrada: usuario 3432432 password e445dr Salida: no dar paso
(usuario no vlido por no contener ni una sola letra, aunque s ms de 5
caracteres)
7) Entrada: usuario pepita password: Salida: no dar paso (usuario vlido
pero password no, suponiendo que se encuentra en la BD)
53
Solucin al ejercicio
Caso de prueba de caja negra basado en los valores lmite
1) Entrada: usuario pepita password: malPassw Salida: no obtener paso
intentar otra vez: usuario pepita password: malPassw Salida: no obtener paso
intentar otra vez: usuario pepita password: malPassw
Salida: no obtener paso y comprobar que se bloquea // Intenta 4 veces
(suponiendo usuario vlido pero password incorrecto)
2) Entrada: usuario pepita password: malPassw Salida: no obtener paso
intentar otra vez: usuario pepita password: malPassw Salida: no obtener paso
intentar otra vez: usuario pepita password: e445dr
Salida: obtener paso // Intenta 3 veces
(suponiendo usuario vlido pero password incorrecto)
3) Entrada: usuario pepito password: malPassw => no obtener paso
intentar otra vez: usuario pepito password: malPassw => no obtener paso
intentar otra vez: usuario pepito password: malPassw
Salida: no obtener paso pero comprobar que no se bloquea // Intenta 3 veces
(suponiendo tanto usuario como password incorrectos)
4) Entrada: usuario pepita password: malPassw => no obtener paso
intentar otra vez: usuario pepita password: e445dr
Salida: obtener paso // Intenta 2 veces
(suponiendo usuario pepita vlido y password e445dr vlido)
Hctor Cuadra, hcuadra@uta.cl
54
Solucin al ejercicio
55
1-3-10
primo:=true
i:=2
1-2-4-7-8-10
3
2
devolver no positivo
1-2-4-7-9-10
1-2-4-5-6-7-9-10
i<= num-1
1-2-4-5-6-7-8-10
num resto i = 0
i:=i+1
1-2-4-5-4-5-4-7-9-10
primo
1-2-4-5-4-5-4-5-7-9-10
devolver primo
V(G) = 5
Hctor Cuadra, hcuadra@uta.cl
10
9
FIN
5
6
primo:=false
devolver no primo
56
Algoritmo Esprimo
CP 1) Entrada: 1 Salida: primo
CP 2) Entrada: 2 Salida: primo
CP 3) Entrada: 4 Salida no primo
es el primer no primo
Algoritmo Esprimo
CP 1) Entrada: 0 Salida: no positivo
si num <= 0 entonces
devolver no positivo
CP 5) Entrada: 23
Salida: no primo
57
58
Secuencia
Condicin IF
Bucle (While)
Bucle (Hasta)
Sentencia case
59
Prueba de bucles
Bucles
simples
Hctor Cuadra, hcuadra@uta.cl
Bucles
anidados
Bucles
concatenados
Bucles no
estructurados
60
Prueba de bucles
Prueba de bucles simples
Disear casos de prueba para que se ejecute el bucle: 0, 1, 2,
m, n-1, n y n+1 veces (siendo n el n mximo de veces que se
puede ejecutar el bucle y m<n)
61
Prueba de bucles
Prueba de bucles concatenados
En este caso puede ocurrir que el segundo bucle
se ejecute un nmero de veces que depende del
primero.
Si son bucles independientes entonces se
prueban como dos bucles simples, y si no lo son,
entonces se prueban como bucles anidados
62
Prueba de bucles
Por supuesto, no hay por qu considerar el
siguiente bucle como no estructurado:
repetir
accin1
si cond1 entonces salir
accin2
hasta cond2
63
Algoritmo: Esprimo
Entrada: num (entero)
Salida: String (no positivo, primo, no primo)
si num <= 0 entonces
devolver no positivo
si no primo := true
para i de 2 a num - 1 hacer
si num resto i = 0 entonces
primo := false
DISEAR CASOS
salir del bucle
DE PRUEBA DE
fin si
CAJA BLANCA
fin para
si primo entonces devolver primo
si no devolver no primo
fin si
fin si
Hctor Cuadra, hcuadra@uta.cl
64
65
entero
Esprimo
es primo
no primo
no positivo
66
67
68
Introduccin
Las pruebas del software son un elemento crtico
para la garanta de calidad del software y representa
una revisin final de las especificaciones, del diseo
y de la codificacin.
Las pruebas de software son siempre necesarias.
En algunos casos ocupan hasta un 40% del tiempo
de un proyecto informtico.
Hctor Cuadra, hcuadra@uta.cl
69
Requisitos
Diseo
Codificacin
C
U
Prueba de unidad
Prueba de integracin
Prueba de validacin
ST
70
Prueba de unidad
Centra el proceso en el mdulo.
Se prueban los caminos de control
importantes para descubrir errores dentro del
lmite del mdulo.
Est orientado a pruebas de caja blanca.
Puede realizarse paralelamente en varios
mdulos.
Hctor Cuadra, hcuadra@uta.cl
71
Prueba de unidad
Interfaz
Condiciones lmite
Caminos independientes
Caminos de manejo de errores
Casos de
prueba
Mdulo
72
Prueba de unidad
Interfaz
Condiciones lmite
Caminos independientes
Caminos de manejo de errores
Controlador
Mdulo que
se va a probar
Casos de
prueba
Resguardo Resguardo
RESULTADOS
73
Prueba de integracin
Integracin
descendente
M1
M2
M5
M8
Hctor Cuadra, hcuadra@uta.cl
M3
M6
M7
M4
74
Prueba de integracin
Resguardos
Resguardo A
Mostrar un
mensaje de
traza
Resguardo B
Mostrar el
parmetro
pasado
Resguardo C
Resguardo D
Devolver un
valor de una
tabla (o archivo
externo)
Hacer una
bsqueda en
una tabla de un
parmetro de
entrada y
devolver el
parmetro
asociado
75
Prueba de integracin
Integracin
ascendente
Mc
Ma
D1
Mb
D2
D3
Grupo 3
Grupo 1
Grupo 2
Hctor Cuadra, hcuadra@uta.cl
76
Prueba de integracin
Controladores
Controlador A
Controlador B
Controlador C
Y
Invocar al
subordinado
Enviar
el
parmetro
de una tabla
(o archivo
externo)
Mostrar
parmetro
Controlador D
Una combinacin
de los controladores
ByC
77
Prueba de integracin
Prueba de regresin:
Al aadir un nuevo mdulo el software
cambia y se establecen nuevos caminos
de flujo de datos, nueva E/S y nueva lgica
de control.
Puede haber problemas con funciones que
antes iban bien.
Se ejecutarn un conjunto de pruebas que
se han realizado anteriormente para
asegurarse que los cambios no han dado
lugar cambios colaterales.
Hctor Cuadra, hcuadra@uta.cl
78
Prueba de validacin
Se lleva a cabo cuando se ha terminado
la prueba de Integracin: el software
est ensamblado y se han eliminado
todos los errores de interfaz.
La validacin se consigue cuando el
software funciona segn las
expectativas del usuario.
Generalmente son pruebas de caja
negra.
Hctor Cuadra, hcuadra@uta.cl
79
80
Depuracin de errores
La depuracin es el proceso que elimina el error
Ejecucin de casos
Pruebas
adicionales
Casos de
prueba
Resultados
Causas
sospechadas
Pruebas de regresin
Depuracin
Correcciones
Hctor Cuadra, hcuadra@uta.cl
Causas
identificadas