Está en la página 1de 81

1

DISEO DE SISTEMAS DE
INFORMACIN

Tema
Evaluacin / Pruebas del Software

Hctor Cuadra, hcuadra@uta.cl

Tema 3.
Evaluacin / Pruebas del Software

Hctor Cuadra, hcuadra@uta.cl

ndice
Introduccin
Objetivos y principios de las pruebas

Diseo de casos de prueba del software


Cul debe ser el conjunto de casos de prueba
que tenga la mayor probabilidad de descubrir
defectos en el software?
Estudio de tcnicas de diseo de casos de prueba: caja
negra y caja blanca

Las pruebas en el proceso unificado de


desarrollo de software
Cmo integrar las tcnicas de diseo de casos
de prueba en una serie de pasos bien planificados
que obtienen una construccin correcta del
software?
Hctor Cuadra, hcuadra@uta.cl

Introduccin. Objetivos de una prueba


La prueba es un proceso de ejecucin con la intencin de
descubrir errores.
Un buen caso de prueba es aquel que tiene una
probabilidad muy alta de descubrir un nuevo error.
Un caso de prueba no debe ser redundante.
Debe ser el mejor de un conjunto de pruebas de propsito
similar.
No debe ser ni muy sencillo ni excesivamente complejo: es mejor
realizar cada prueba de forma separada si se quiere probar
diferentes casos.

Una prueba tiene xito si descubre un nuevo error


Lo que no hace una prueba
Una prueba no asegura la ausencia de defectos, slo
puede demostrar que existen errores en el software.
Hctor Cuadra, hcuadra@uta.cl

Introduccin. Principios de las pruebas


Se debe hacer un seguimiento hasta ver si se cumplen
los requisitos del cliente.
Las pruebas debern planificarse mucho antes de que
empiecen.
El principio de Pareto es aplicable a la prueba del
software.
El 80% de los errores est en el 20% de los mdulos.
Hay que identificar esos mdulos y probarlos muy bien

Empezar por lo pequeo y progresar hacia lo grande.


No son posibles las pruebas exhaustivas.
Son ms eficientes las pruebas dirigidas por un equipo
independiente.
Hctor Cuadra, hcuadra@uta.cl

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

NOTA: se necesitarn otros mtodos como comprobarUsuario,aniadirUsuario


que pueden pertenecer a la lgica del negocio o no (en este caso se considera que no)
Hctor Cuadra, hcuadra@uta.cl

Cmo escribir componentes de


prueba?
Se puede escribir ad hoc
Por cada caso de prueba, se escribe el
cdigo correspondiente en el componente
(cambiara el cdigo)
Se escribe el cdigo del componente de tal
manera que recorra en una BD los casos de
prueba y los ejecute.
Cada vez que se aada un caso de prueba,
simplemente se aade en la BD, pero el cdigo
del componente no cambiara

Se pueden usar entornos de trabajo


disponibles para pruebas
Ejemplo: JUnit para Java
Hctor Cuadra, hcuadra@uta.cl

10

Diseo de casos de prueba.


Definir los casos de prueba que tengan la mayor
probabilidad de encontrar el mayor nmero de errores
con la mnima cantidad de esfuerzo y tiempo.

Pruebas de caja blanca


Encontrar casos de prueba viendo el cdigo
interno

Pruebas de caja negra


Encontrar casos de prueba viendo los
requisitos funcionales
Hctor Cuadra, hcuadra@uta.cl

11

Pruebas de Caja Blanca:


viendo el cdigo interno
Aseguran que la operacin interna del programa se ajusta a las
especificaciones y que todos los componentes internos se han probado
adecuadamente.
Usa la estructura de control para obtener los casos de prueba.
Intentan garantizar que todos los caminos de ejecucin del programa quedan
probados.

Pruebas de estructura de control:


Del camino bsico: Disear un caso de prueba por cada camino indpte
De condicin: Disear casos de prueba para que todas las condiciones
del programa se evalen a cierto/falso
De bucles: Disear casos de prueba para que se intente ejecutar un
bucle 0,1,,n-1,n y n+1 veces (siendo n el nmero mximo)
Hctor Cuadra, hcuadra@uta.cl

12

Ejemplo: EsPrimo

El mtodo
Esprimo.esPrimo
puede ser llamado
con un array de
Strings

Hctor Cuadra, hcuadra@uta.cl

13

Ejemplo: casos de prueba de caja


blanca para EsPrimo

ENTRADA

OBJETIVO A PROBAR
-Probar todos los caminos
-Probar todas las condiciones

Hctor Cuadra, hcuadra@uta.cl

-Probar bucles

14

Ejemplo: Componente de prueba


para EsPrimo
public class ComponentePruebaEsPrimo { public
static void main(String[] args) {
String[] s1 = new String[0];
try {boolean b1 = Esprimo.esPrimo(s1);
System.out.println(CP1 incorrecto);}
catch (ErrorFaltaParametro e)
{System.out.println(CP1 correcto);}
catch (Exception e) {System.out.println(CP1 incorrecto);}
String[] s2 = new String[2]; s2[0]=xx; s2[1]=yy;
try {boolean b1 = Esprimo.esPrimo(s2);
System.out.println(CP2 incorrecto);}
catch (ErrorSolo1Parametro e)
{System.out.println(CP2 correcto);}
catch (Exception e) {System.out.println(CP2 incorrecto);}
...}
Hctor Cuadra, hcuadra@uta.cl

15

Ejemplo: Componente de prueba


para EsPrimo (usando JUnit)
java junit.swingui.TestRunner PruebasConJUnit.ComponentePruebaEsPrimo

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

Pruebas de Caja Negra


Se centra en los requisitos funcionales del
software.
Permite obtener un conjunto de
condiciones de entrada que ejerciten
completamente los requisitos funcionales
del programa.
No es una alternativa a la prueba de caja
blanca.
Complementan a las pruebas de caja blanca

Mejor disear los casos de prueba


usando los dos tipos de tcnicas
Hctor Cuadra, hcuadra@uta.cl

17

Prueba de Caja Negra

Prueba de los valores lmite


Los errores suelen situarse en los lmites.
Si la entrada se encuentra en el rango a..b
entonces hay que probar con los valores
a -1, a, a + 1, b - 1, b y b + 1
Si la entrada es un conjunto de valores
entonces hay que probar con los valores
max-1, max, max+1, min-1, min y min+1

Hctor Cuadra, hcuadra@uta.cl

18

Ejemplo: casos de prueba de caja


negra para EsPrimo

ENTRADA

Hctor Cuadra, hcuadra@uta.cl

OBJETIVO A PROBAR
-Valores lmite

19

Prueba de Caja Negra


Prueba de la particin equivalente
Mtodo de prueba de caja negra que divide el dominio de
entrada de un programa en un conjunto de clases de datos
de los que se pueden derivar casos de prueba
Si la entrada es un cdigo formado por 2 partes, la primera
un prefijo opcional de 3 dgitos, que empiece por 9 y la
contrasea que sea una cadena de hasta 6 caracteres que
empiece necesariamente por una letra y que puede
contener letras, dgitos y el smbolo $
prefijo
contrasea
Se pueden disear casos de prueba, cada uno de
los cuales representa a un conjunto de casos de
prueba

Hctor Cuadra, hcuadra@uta.cl

20

Prueba de Caja Negra


prefijo puede ser


743
935
1983
8pW

prefijo

contrasea

representa a entrada en blanco


representa a nmero <900
representa a nmero entre 900 y 999
representa a nmero >999
representa a cadena que contiene carcter no dgito

contrasea puede ser


representa a entrada en blanco


4a2cd$ representa a cadena que empieza por dgito y que slo
contiene letras, dgitos y $
4a;2c$ representa a cadena que empieza por dgito y que
contiene algn carcter no letra, dgito o $
$ab4$b
representa a cadena que no empieza por dgito y
que slo contiene letras, dgitos y $
b$$;a5 representa a cadena que no empieza por dgito y que
contiene algn carcter no letra, dgito o $

Hctor Cuadra, hcuadra@uta.cl

21

Ejemplo: casos de prueba de caja


negra para EsPrimo

Los siguientes casos de prueba (que ya estaban) tambin salen


aplicando el criterio particin equivalente

Hctor Cuadra, hcuadra@uta.cl

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

Ejemplo: casos de prueba de


negra para EsPrimo

Ejemplos de
CASOS de
PRUEBA
Hctor Cuadra, hcuadra@uta.cl

-Al cerrar (minimizar,..) la ventana se cierra (minimiza,)


-Al pulsar el botn, aparece en el campo de texto el resultado
-Buscar ayuda de cmo utilizar la interfaz

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.

El flujo de eventos del caso de uso ENTRAR EN EL SISTEMA


-El usuario escribe su nombre y el password
-El sistema comprueba que existe una cuenta con ese nombre y password y, si es as, se le da
permiso para entrar en el sistema.
-Si existe el nombre de usuario pero el password es incorrecto permite reintroducir el
password hasta un mximo de tres veces.

Requisitos no funcionales del caso de uso ENTRAR EN EL SISTEMA


-El password no debe ser visible
-Los nombres de usuarios slo pueden contener letras y como mnimo 5 letras.

Hctor Cuadra, hcuadra@uta.cl

24

25

Ejercicio: Escribir componente de


prueba, que pruebe el siguiente CP
Caso de prueba CP2
Entrada: usuario correcto password acertado
Condiciones de ejecucin: en la tabla existe ese usuario con ese
password y con 1 intento fallido anterior (nmero inferior a 3)
Resultado esperado: dar paso y el nmero de intentos en la tabla
USUARIO(cuenta,passord,numIntentos) para correcto es 0

Hctor Cuadra, hcuadra@uta.cl

26

Pruebas en el proceso unificado


Inicio

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

Objetivos: Planificar // Disear e implementar


// Realizar las pruebas

Hctor Cuadra, hcuadra@uta.cl

27

Modelo de pruebas

1
Modelo de pruebas

X
Caso de prueba

Hctor Cuadra, hcuadra@uta.cl

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

Artefacto: procedimiento de prueba


Un procedimiento de prueba especifica cmo
realizar uno o varios casos de prueba

Artefacto: componente de prueba


Automatiza uno o varios procedimientos de
prueba o partes de ellos.
Hctor Cuadra, hcuadra@uta.cl

Actividad del flujo de trabajo de


Implementacin

29

Actividad: realizar prueba de unidad


Probar componentes implementados como
unidades individuales
prueba de especificacin (de caja negra)
que verifica el comportamiento observable
externamente
prueba de estructura (de caja blanca) que
verifica la implementacin interna

Hctor Cuadra, hcuadra@uta.cl

Actividades del flujo de trabajo de


Prueba
Actividad: planificar prueba
Describir una estrategia de prueba, estimar los
requisitos y planificar el esfuerzo de la prueba

Actividad: disear prueba


identificar casos de prueba y procedimientos de
prueba
disear casos de prueba de integracin (para verificar que
los componentes interaccionan correctamente)
disear la prueba del sistema (para verificar que el sistema
funciona correctamente como un todo)
disear los casos de prueba de regresin
Al aadir un nuevo mdulo puede haber problemas con
mdulos que antes iban bien. Las pruebas de regresin son un
conjunto de pruebas (ya realizadas antes) que aseguran que
los cambios no han dado lugar a cambios colaterales.
Hctor Cuadra, hcuadra@uta.cl

30

31

Actividades del FT de Prueba


Actividad: implementar prueba
Automatizar los procedimientos de prueba, creando componentes
de prueba, si es posible.

Actividad: realizar pruebas de integracin


Realizar las pruebas, comparar con los resultados esperados e
informar de los defectos

Actividad: realizar prueba de sistema


Se comienzan despus de las de integracin y se realizan de
manera anloga (realizar, comparar e informar)

Actividad: evaluar prueba


Se comparan los resultados de las pruebas con los objetivos
esbozados en el plan de prueba. Hay que preparar mtricas que
permitan determinar el nivel de calidad del software y la cantidad
de pruebas a realizar.
Hctor Cuadra, hcuadra@uta.cl

32

Prueba de unidad de EsPrimo


Componente Prueba
de Esprimo
Casos de
prueba

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

Hctor Cuadra, hcuadra@uta.cl

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

Prueba de unidad de EsPrimo


Componente Prueba
de EsPrimo
Algoritmo: ComponentePruebaEsPrimo
ResSQL := ejecutarBD(Select CodPr, NUM, SalidaEsper
from PRU_UNIDAD_ESPRIMO)
mientras no fin (ResSQL) hacer
<CP,N,SE> := siguiente(ResSQL)
ResEsPrimo := EsPrimo(N)
si ResEsPrimo = SE entonces Prueba := OK
sino Prueba := ERROR
ejecutarBD(Update PRU_UNIDAD_ESPRIMO
Set
ResPrueba = %Prueba,
SalReal = %ResEsPrimo
where CodPr= %CP)
Tabla PRU_UNIDAD_ESPRIMO
CodPr
Hctor Cuadra, hcuadra@uta.cl

NUM

SalidaEsper SalReal ResPrueba

Prueba de unidad de SiguientePrimo


Algoritmo: SiguientePrimo
Entrada: num (entero)
Salida: entero

SiguientePrimo

si num <= 0 entonces


devolver 1
si no sig := num + 1
mientras EsPrimo(sig) primo hacer
0
sig := sig + 1
1
fin mientras
2
devolver sig
4
Tabla
finsi
18
PRU_UNIDAD_SIGUIENTEPRIMO

PROBLEMA: si hay errores,


cmo saber a qu mdulo corresponden?
SiguientePrimo o EsPrimo
Hctor Cuadra, hcuadra@uta.cl

EsPrimo
1
2
3
5
19

17

19

patata

no nmero

17.356

19

....

34

35

Prueba de integracin ascendente


de SiguientePrimo y EsPrimo
SiguientePrimo

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

Prueba de integracin descendente


de SiguientePrimo y EsPrimo
(o cmo probar SiguientePrimo si EsPrimo no est disponible)

SiguientePrimo

SiguientePrimo

SE PRUEBA AS
EsPrimo

Resguardo de
EsPrimo

ORDEN EN EL QUE SE HACEN LAS PRUEBAS:


1 ) Prueba de Unidad de SiguientePrimo usando un Resguardo
de Esprimo
2 ) Prueba de Unidad de EsPrimo
3 ) Prueba de integracin de SiguientePrimo con EsPrimo
Hctor Cuadra, hcuadra@uta.cl

37

Prueba de integracin descendente


de SiguientePrimo y EsPrimo
(o cmo probar SiguientePrimo si EsPrimo no est disponible)

Algoritmo: SiguientePrimo
Entrada: num (entero)
Salida: entero

SiguientePrimo

si num <= 0 entonces


devolver 1
Resguardo de
si no sig := num + 1
EsPrimo
mientras EsPrimo(sig) primo hacer
sig := sig + 1
SE LLAMA AL
fin mientras
Resguardo de EsPrimo
devolver sig
finsi

Tabla PRU_UNIDAD_ESPRIMO
CodPr

Hctor Cuadra, hcuadra@uta.cl

NUM

SalidaEsper SalReal ResPrueba

38

Prueba de unidad de SiguientePrimo


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
.....................................................................

Hctor Cuadra, hcuadra@uta.cl

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
.....................................................................

Hctor Cuadra, hcuadra@uta.cl

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

El proceso unificado de desarrollo de


software
Jacobson, Booch, Rumbaugh
Editorial Addison Wesley, 1999
Captulo 11
Hctor Cuadra, hcuadra@uta.cl

42

Ejercicio: Escribir componente de


prueba, que pruebe el siguiente CP
Caso de prueba CP2
Entrada: usuario correcto password acertado
Condiciones de ejecucin: en la tabla existe ese usuario con ese
password y con 1 intento fallido anterior (nmero inferior a 3)
Resultado esperado: dar paso y el nmero de intentos en la tabla
USUARIO(cuenta,passord,numIntentos) para correcto es 0

Hctor Cuadra, hcuadra@uta.cl

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);}
}

Hctor Cuadra, hcuadra@uta.cl

44

Ejercicio: Escribir componente de


prueba, que pruebe el siguiente CP
Caso de prueba CP3
Entrada: usuario correcto password acertado
Condiciones de ejecucin: en la tabla existe ese usuario con ese
password y con 4 intentos fallidos (nmero superior a 3)
Resultado esperado: no dar paso y el nmero de intentos en la tabla
USUARIO(cuenta,passord,numIntentos) para correcto es 5

Hctor Cuadra, hcuadra@uta.cl

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);}
}

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.

El flujo de eventos del caso de uso ENTRAR EN EL SISTEMA


-El usuario escribe su nombre y el password
-El sistema comprueba que existe una cuenta con ese nombre y password y, si es as, se le da
permiso para entrar en el sistema.
-Si existe el nombre de usuario pero el password es incorrecto permite reintroducir el
password hasta un mximo de tres veces.

Requisitos no funcionales del caso de uso ENTRAR EN EL SISTEMA


-El password no debe ser visible
-Los nombres de usuarios slo pueden contener letras y como mnimo 5 letras.

Hctor Cuadra, hcuadra@uta.cl

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

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

50

Hctor Cuadra, hcuadra@uta.cl

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

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

55

Ejercicio Esprimo (camino bsico)


num<= 0

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

CP 4) Entrada: 32342342342341234 Salida: no


primo
nmero muy grande (mayor que el mximo entero)

CP 5) Entrada: 0 Salida: no positivo


CP 6) Entrada: -4 Salida: no positivo
CP 7:) Entrada: -123412341234123 Salida: no
positivo
CP 8) Entrada: patata Salida: no positivo
CP 9) Entrada: 782.98234 Salida: no primo
debe tomar 782 como el nmero de entrada
Hctor Cuadra, hcuadra@uta.cl

Algoritmo Esprimo
CP 1) Entrada: 0 Salida: no positivo
si num <= 0 entonces
devolver no positivo

CP 2) Entrada: 2 Salida: primo


para i de 2 a num - 1 hacer (para que no entre)
si primo entonces devolver primo (que entre)

CP 3) Entrada: 3 Salida: primo


para i de 2 a num - 1 hacer (ejecutar 1 vez)

CP 4) Entrada: 4 Salida: no primo


para i de 2 a num - 1 hacer
si num resto i = 0 entonces (para que entre)
si no devolver no primo (para que entre)

CP 5) Entrada: 23

Salida: no primo

para i de 2 a num - 1 hacer


si num resto i = 0 entonces (para que NO entre)
Hctor Cuadra, hcuadra@uta.cl

57

58

Prueba del camino bsico

Construcciones estructurales en forma de grafo de flujo:

Secuencia

Condicin IF

Bucle (While)

Bucle (Hasta)

Sentencia case

NODO: representa condicin o sentencia procedimental


ARISTA: representa flujo de control
Hctor Cuadra, hcuadra@uta.cl

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)

Prueba de bucles anidados


Si cada bucle se probara como bucle simple aumentara mucho
el nmero de casos de prueba
Probar el bucle ms interno como un bucle simple (0, 1, 2, m, n1, n y n+1 veces) entrando en todos los bucles externos el
nmero mnimo de veces (1)
Ir hacia fuera probando cada bucle externo como un bucle
simple y dejando que sus bucles internos se ejecuten m veces
(valor tpico) y que sus bucles externos se ejecuten 1 vez (valor
mnimo)
Hctor Cuadra, hcuadra@uta.cl

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

Prueba de bucles no estructurados


En este caso, merece la pena transformar el
cdigo de entrada usando bucles estructurados y
hacer las pruebas correspondientes
Hctor Cuadra, hcuadra@uta.cl

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

Se puede probar para que se ejecute 0, 1, 2, m,


n-1, n y n+1 combinando las 2 condiciones de
salida (cond1 y cond2)
Hctor Cuadra, hcuadra@uta.cl

63

Prueba de Caja Negra


Tipos de errores que se encuentran:
Funciones incorrectas o ausentes.
Errores de interfaz.
Errores de estructuras de datos o en
accesos a bases de datos externas.
Errores de rendimiento.
Errores de inicializacin o de terminacin.

Hctor Cuadra, hcuadra@uta.cl

Ejemplo: Algoritmo Esprimo

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

Ejemplo: Algoritmo Esprimo

entero

Esprimo

es primo
no primo
no positivo

DISEAR CASOS DE PRUEBA DE CAJA NEGRA


Hctor Cuadra, hcuadra@uta.cl

66

Ejemplo: Algoritmo Esprimo

DISEAR CASOS DE PRUEBA DE LA INTERFAZ


Y DE LA DOCUMENTACIN
Hctor Cuadra, hcuadra@uta.cl

67

Ejercicio: Tomar en Prstamo la


Copia de un Libro

DISEAR LOS CASOS DE PRUEBA DE ESTE CASO DE USO


Hctor Cuadra, hcuadra@uta.cl

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

Estrategias de prueba de Software


Cmo integrar las tcnicas de diseo de casos de prueba en
una serie de pasos bien planificados que obtienen una
construccin correcta del software?

Ingeniera del sistema

Requisitos

Diseo

Codificacin

Hctor Cuadra, hcuadra@uta.cl

C
U

Prueba de unidad

Prueba de integracin

Prueba de validacin

ST

Prueba del sistema

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

Hctor Cuadra, hcuadra@uta.cl

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

Hctor Cuadra, hcuadra@uta.cl

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

= Direccin del flujo de datos


Hctor Cuadra, hcuadra@uta.cl

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)

= Direccin del flujo de datos


Hctor Cuadra, hcuadra@uta.cl

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

Prueba del sistema


Realizado el software debe integrarse en el
sistema. Estas pruebas sirven para verificar
que se han integrado adecuadamente todos
los elementos del sistema y que realizan las
funciones apropiadas.
Tipos de pruebas:
prueba de recuperacin
prueba de seguridad
prueba de resistencia
prueba de rendimiento
Hctor Cuadra, hcuadra@uta.cl

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

También podría gustarte