Anda di halaman 1dari 8

EJERCICIOS SOBRE PRUEBAS DE CAJA NEGRA

1. RECAPITULACION SOBRE PRUEBAS DE CAJA NEGRA Hemos visto que hay 2 herramientas muy tiles para disear casos de prueba de caja negra, una de ellas es la particin equivalente y la otra es el anlisis de valores lmite. A. Diseo de casos de prueba (para particin equivalente)
PASO 1 : IDENTIFICACIN DE LAS CLASES DE EQUIVALENCIA. Se identifican dividiendo en dos o ms grupos (clases) cada condicin de entrada, la cual es : *Un valor numrico especfico *Un rango de valores *Un conjunto de valores relacionados *Una condicin booleana

Las clases de equivalencia se pueden definir de acuerdo a las siguientes directrices:

Si una condicin de entrada especifica un rango de valores (por ejemplo : valor entre 1 y 999), se definen una clase de equivalencia vlida (1<=valor<=999) y dos invlidas (valor<1 y valor>999). Si una condicin de entrada requiere un valor especfico, (el tamao de un cdigo es de 5 dgitos), se definen una clase de equivalencia vlida (tamao del cdigo 5) y dos invlidas (tamao<5 y tamao>5). Si una condicin de entrada especifica un conjunto de valores de entrada (tipo de vehculo: AUTOBS, TAXI, TURISMO, MOTOCICLETA), se define una clase de equivalencia vlida para cada valor y una clase de equivalencia invlida (por ejemplo PATINES).

Si una condicin de entrada es booleana (el primer carcter de un identificador debe ser una letra), se definen una clase vlida (es letra) y una invlida (no es letra).

PASO 2 : IDENTIFICACIN DE LOS CASOS DE PRUEBA.

Asignar un nmero nico a cada clase de equivalencia.

Escribir casos de prueba hasta que sean cubiertas todas las clases de equivalencia vlidas, intentando cubrir en cada caso tantas clases de equivalencia vlidas como sea posible.

Escribir casos de prueba hasta que sean cubiertas todas las clases de equivalencia invlidas cubriendo en cada caso una y slo una clase de equivalencia an no cubierta.

B. Criterios para la generacin de casos de prueba (para anlisis de valores lmite)


Si una condicin de entrada especifica un rango de valores limitado por a y b, se deben escribir casos de prueba para los lmites del rango, es decir, a y b, y casos de prueba invlidos para situaciones fuera de los lmites. Ej: si el rango vlido de un valor de entrada es -1.0 a +1.0, escribir casos de prueba para las situaciones: -1.0, +1.0, 1.0001, +1.0001

Si una condicin de entrada especifica un nmero de valores, desarrollar casos de prueba para el nmero mximo y mnimo de valores y otros casos para los valores justo por encima y justo por debajo del mximo y del mnimo. Ej: si el nmero de alumnos para calcular su nota final es de 125, escribir casos de prueba para 0, 1, 125 y 126 alumnos.

Aplicar el primer criterio para cada condicin de salida. Por ejemplo, si un programa calcula la deduccin fiscal mensual, siendo el rango permitido entre 0 y 1000 . escribir casos de prueba que proporcionen el resultado de 0 y 1000 . Comprobar si es posible disear casos de prueba que puedan proporcionar u na deduccin negativa o mayor de 1000 .

Es importante examinar los lmites del espacio de resultados pues no siempre ocurre que los lmites de los dominios de entrada representan el mismo conjunto de circunstancias que los lmites de los rangos de salida. (por ejemplo la funcin seno).

Si las estructuras de datos internas tienen lmites preestablecidos, hay que asegurarse de disear casos de prueba que ejerciten la estructura de datos en sus lmites. Por ejemplo, un array que tenga un lmite definido de 100 elementos, habr que probar el hecho de que no existan elementos y el de que se procesen bien 100 elementos. Usar el ingenio para buscar otras condiciones lmite (conjetura de errores).

2. EJEMPLO RESUELTO

Un programa recibe como entrada un nmero entero y positivo de mnimo 2 cifras y de mximo 9 cifras y devuelve el nmero resultante de invertir sus cifras. Si no se introduce un valor acorde a lo descrito rango, etc.), el mdulo devolver el valor error. prueba (no olvide el anlisis de valores lmite). (por ejemplo: flotantes y/o caracteres, valores fuera de Genere la tabla de clases de equivalencia y los casos de prueba)

Asume A B C

Condicin N de parmetros Tipo de los parmetros Intervalo

Clases correctas {n=1}1 {xN}3 { x > 9 , x < 1000000000 } 5

Clases errneas { n < 1 } 2.1 { n > 1 } 2.2 {xN}4 { x < 10 } 6.1 { x > 999999999 } 6.2

Entradas Clases correctas Clases errneas ( 456248 ) () ( 2148 , 215879 , 345872) (254.3689) (z) (8) (1000000001)

Salidas 842654 Error Error Error Error Error Error

Clases Cubiertas 1,3,5 2.1 2.2 4 4 6.1 6.2

Valores Lmite (10) (12) (999999999) (999999998)

Salidas 1 21 999999999 899999999

( 2148 , 215879)

Error

(9) (1000000000)

Error

3. EJERCICIOS
Ejercicio 2. Tenemos un pequeo mdulo que lee una hora en formato de hh:mm e indica si la hora es correcta.

Se anexa a continuacin la pantalla:

: m m

Introduzca la hora (hh : mm)

O K

Si no se introduce un valor acorde a lo descrito (por ejemplo: flotantes y/o caracteres, valores fuera de rango, etc.), el mdulo devolver el valor error. Genere la tabla de clases de equivalencia y los casos de prueba (no olvide el anlisis de valores lmite). Solucin: n = nmero de parmetros A = conjunto de valores permitidos: los nmeros naturales ms el cero. A = N U {0}.

Asume A B

Condicin N de parmetros Tipo de los parmetros

Clases correctas {n=2}1 { hh A , mm A } 3

Clases errneas {n<2}2 { hh A } 4.1 { mm A } 4.2 { hh < 0 } 6.1 { hh > 23 } 6.2 { mm < 0 } 6.3 { mm > 59 } 6.4

A,B

HORA VALIDA

{ hh >= 0 , hh < 24 , mm >= 0 , mm < 60 } 5

De la tabla de particiones obtenemos la siguiente batera de pruebas: Entradas Salidas Clases Cubiertas Valores Lmite Salidas

Clases correctas

( 16 , 43 )

VALIDA

1,3,5

(0,0) ( 23 , 59) ( , 35) Uno nulo

VALIDA VALIDA Error

( , ) ambos nulos ( 11.3 , 38 ) ( h , 38 ) ( 11 , 38.3 ) Clases errneas ( 11 , mm ) ( -3 , 45) (26 , 12) (2 , -5) (2 , 63)

Error Error Error Error Error Error Error Error Error

2 4.1 4.1 4.2 4.2 6.1 6.2 6.3 6.4

(-1 , 45) (24 , 12) (2 , -1) (2 , 60)

Error Error Error Error

Ejercicio

3. Se dispone de un mdulo cuyo objetivo es clasificar como agudo, recto u obtuso el ngulo que forma una determinada lnea con el eje horizontal. La lnea se define como aquella que pasa por el origen de coordenadas y por un punto del semiplano superior. Las coordenadas de este punto son los valores que recibe el mdulo como parmetro.

Para que el mdulo pueda calcular un valor correcto (agudo, recto, obtuso) las entradas deben cumplir los siguientes requisitos: El mdulo debe recibir como entrada dos valores enteros, que representan las coordenadas horizontal y vertical, respectivamente, del punto anteriormente descrito. El punto pertenece al semiplano superior o al eje horizontal. El punto a evaluar es diferente al origen de coordenadas.

De no cumplirse los requisitos anteriores, el mdulo devolver el valor error. Elaborar una batera de pruebas de caja negra para el mdulo descrito.

SOLUCION. Las condiciones que separan entradas correctas de entradas errneas son el nmero de parmetros, el tipo de los parmetros, que el punto pertenezca al semiplano superior y que no sea el origen. Parece lgico que se compruebe que no sea el punto origen antes de comprobar que pertenezca al semiplano superior, ya que la primera condicin es ms general que la segunda. Ya que el mdulo clasifica un ngulo, se supondr que aquellas entradas que dan lugar a resultados distintos se tratan de

forma diferenciada en el mdulo, lo que da lugar a tres condiciones segn la entrada pertenezca al semiplano derecho (ngulo agudo), a la ordenada vertical (ngulo recto) o al semiplano izquierdo (ngulo obtuso). Para estas condiciones, lo mnimo que se puede asumir es que el nmero y tipo de los parmetros es el adecuado. La tabla de particiones de equivalencia resultante sera la siguiente: Asume A B C D Condicin N de parmetros Tipo de los parmetros Punto origen Semiplano superior Clases correctas {n=2}1 {xZ, yZ}3 Clases errneas { n < 2 } 2.1 { n > 2 } 2.2 { x Z } 4.1 { y Z } 4.2 { x = 0 , y = 0} 6 {y<0}8

{ x 0 } 5.1 { y > 0 } 5.2 { y >= 0 } 7

A, B A, B A, B

E F G

Angulo Agudo Angulo Recto Angulo Obtuso

{ x > 0 , y >= 0} 9 {x=0, y > 0} 11

{x>0

, y < 0} 10

{ x = 0 , y < 0} 12 { x = 0 , y = 0} 12.a (6) {x<0 , y < 0} 14

{ x < 0 , y >= 0} 13

De la tabla de particiones se obtiene la siguiente batera de pruebas: Entradas (2,2) Clases correctas (0,2) ( -2 , 2 ) (2) (2 , 2 , 2 ) ( a , 2 ) ( 2 , a ) ( 3.88 , 2 ) Clases errneas ( 2 , 7.24 ) (0,0) (2,- 2) ( 0 , -2 ) ( -2 , -2 ) Salidas agudo recto obtuso error error error error error error error error error error Clases 1 , 3 , 5.1 1 , 3 , 5.2 1 , 3 , 5.1 2.1 2.2 4.1 4.2 4.1 4.2 6 8 , 10 8 , 12 8 , 14 Cubiertas , 5.2 , 7, 9 , 7 , 11 , 5.2 , 7 , 13 Valores Lmite (1,0) (0,1) ( -1 , 0 ) Salidas Agudo Recto Obtuso

Ejercicio 4. Disponemos de un mdulo bsqueda, cuya funcin es buscar un determinado valor entero dentro de un
vector de enteros.

En caso de encontrar el valor, el mdulo devuelve la posicin del vector donde se ha encontrado (al primer componente del vector le corresponde la posicin 1, al segundo la posicin 2, etc). Si existieran varias apariciones del valor buscado dentro del vector, el mdulo devolver la menor posicin donde se encuentre. En caso de no encontrarse dentro del vector, el mdulo devuelve -1. Si no se cumplen los requisitos anteriores, el mdulo devolver el valor error.

Los parmetros del mdulo son, en primer lugar el elemento a buscar y a continuacin el vector. Ejemplos: busqueda ( 5 , [1,9,5,5,3,5,9] ) devolver 3. busqueda ( -7 , [1,-7,3,2,-8,6,0] ) devolver 2. busqueda ( 15 , [1,-7,3,2,-8,6,0] ) devolver -1.

Disear un conjunto de casos de prueba de caja negra. SOLUCION. Algunos smbolos que vamos a utilizar: n Nmero de parmetros del mdulo Ve Vc Vector de caracteres La tabla de particiones de equivalencia sera: Asume A B Condicin N de parmetros Tipo de los parmetros Clases correctas {n=2}1 { x Z , Ve Z } 3 Clases errneas { n < 2 } 2.1 { x Z } 4.1 { n > 2 } 2.2 {Ve Z } 4.2 Vector de enteros x elemento a buscar

A,B

C D

Valor existe en el vector Valor no existe en el vector

{ (x Ve) } 5 { (x Ve) } 6

Una posible batera (genrica) de casos de prueba consistente con la tabla anterior sera: Entradas Clases correctas ( 2 , [1,-7,3,2,-8,6,10] ) ( 15 , [1,-7,3,2,-8,6,10] ) (2) ( [1,-7,3,2,-8,6,10] ) Clases errneas (15 , [1,-7,3,2,-8,6,10] , 8) ( a , [1,-7,3,2,-8,6,10] ) ( 9.54 , [1,-7,3,2,-8,6,10] ) ( 15 , [f , z , e , k] ) Salidas 4 -1 Error Error Error Error Error Error Clases Cubiertas 1,3,5 1,3,6 2.1 2.1 2.2 4.1 4.1 4.2

Valores Lmite: Si las estructuras de datos tienen un lmite preestablecido hay que disear casos que ejerciten estos lmites. Entradas ( V[1] , Ve ) ( 4 , [4,-7,3,2,-8,6,10] ) ( V[tamao] , Ve ) ( 10 , [4,-7,3,2,-8,6,10] ) 1 Tamao 7 1,3,5 1,3,5 Salidas Clases Cubiertas

Ejercicio 5. Elaborar una batera de pruebas para un mdulo que recibe como entrada una cadena de caracteres y
determina si puede ser una clave vlida o no (por lo tanto devuelve un valor lgico, verdadero o falso). Una clave se considera vlida si cumple los requisitos siguientes:

Est formada por ms de 4 y menos de 8 caracteres. Contiene al menos dos alfabticos.

Los caracteres permitidos son los alfabticos a...z, A...Z, los dgitos 0...9 y los caracteres especiales % y #.

Contiene al menos un carcter que es dgito.

El primer y ltimo carcter deben ser alfabticos.

No aparece en un diccionario de palabras prohibidas (user%10, us3r%aa, etc).

SOLUCION. En primer lugar, vamos a nombrar los siguientes elementos relacionados con la entrada para que la escritura de las condiciones sea ms sencilla: n : Nmero total de caracteres de la cadena. K : Conjunto de caracteres que son alfabticos (az) + (AZ) AE: Conjunto del Alfabeto extendido K + E CP : Conjunto de caracteres permitidos AE + CD c : la cadena de caracteres c(i) : Carcter i-simo de la cadena. E : Conjunto de caracteres especiales % y # CD: Conjunto de caracteres que son dgitos (09)

nCD : Nmero de caracteres de la cadena que son dgitos. nK : Nmero de caracteres de la cadena que son alfabticos. D : Conjunto de cadenas de caracteres que pertenecen al diccionario de palabras prohibidas. Est formada por ms de 4 y menos de 8 caracteres. Caracteres permitidos son los alfabticos a..z, A..Z, los dgitos 0..9 y los especiales % y # Contiene al menos dos letras. Contiene al menos un carcter que es dgito. El primer y ltimo carcter deben ser alfabticos. No aparece en un diccionario de palabras prohibidas. n>4 , n<8 c(i) CP nK >=2 nCD >= 1 c[1] K , c[n] K c D

Este problema es especial en el sentido de que el mdulo slo proporciona dos valores de la salida, verdadero o falso. Podemos suponer que el mdulo establece como precondicin que el nmero y tipo de los parmetros es el adecuado, ya que no existe un valor de la salida que permita indicar que ha detectado que un error respecto al nmero y tipo de los parmetros. Por otro lado, existen dos posibilidades a la hora de realizar el anlisis:

Suponer que no hay entradas "errneas". En este caso existiran dos condiciones derivadas de las dos salidas distintas del mdulo, clave vlida y clave no vlida. Suponer que las entradas "correctas" son aquellas que coinciden con claves vlidas y las entradas "errneas" son aquellas que coinciden con claves no vlidas. En este caso slo existir una clase que distingue entre entradas "correctas" y "errneas".

Eligiendo esta ltima posibilidad, la tabla de particiones de equivalencia sera la siguiente: Asume Condicin Clases correctas Clases errneas A Validez de la clave { n>4 , c(i) CP , nCD >= 1 , c[n] K , n<8 , nK >=2 , c[1] K , cD { { { { n <= 4 } 2.1 c(i) CP } 2.3 nCD = 0 } 2.5 c[n] K } 2.7 { n >= 8 } 2.2 { nK < 2 } 2.4 { c[1] K } 2.6 { c D } 2.8

}1

La batera de pruebas que se obtiene es: Entradas Clases correctas Clases errneas ab12%Ec a1b a1234567b ab*1*c 12345 abcdef 1abcde abcde1 us3r%aa Salidas VERDADERO FALSO FALSO FALSO FALSO FALSO FALSO FALSO FALSO

Clases Cubiertas 1 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8

Valores Lmite ab12c ab1234c a1#b G12345%b ab*12c 1u2345

Salidas VERDADERO FALSO FALSO FALSO FALSO

Ejercicio 6. Se desea probar un mdulo que calcula el mximo comn divisor de dos valores enteros mayores que cero

que recibe como entrada. Se sabe que el mdulo utiliza un algoritmo que requiere realizar comparaciones de igualdad, mayor y menor entre los parmetros. Si el mdulo recibe un nmero de parmetros distinto de dos, los tipos de los parmetros no son los adecuados o alguno de ellos es negativo o cero, el resultado devuelto por el mdulo es el valor -1. Crear la tabla de particiones de equivalencia y la batera de pruebas que se deriva de ella, aadiendo los casos de prueba adicionales obtenidos por el anlisis de valores lmite. SOLUCION. La tabla de particiones de equivalencia constar de tres condiciones asociadas a la naturaleza del problema, y otras tres derivadas del control de las entradas cuyos parmetros son iguales entre s, el primero es mayor y el primero es menor se tratan de manera diferenciada en el mdulo. Estas tres ltimas condiciones deben asumir que el nmero de parmetros es dos y que su tipo de datos es entero, ya que si no la formulacin de las condiciones carecera de sentido. Sin embargo, la condicin de que sean mayores que cero no tiene por qu asumirse. Asume A B C A, B A, B A, B D E F Condicin N de parmetros Tipo de los parmetros Parmetros mayores que cero Parmetros iguales Primer parmetro mayor Segundo parmetro mayor Clases correctas {n=2}1 {aN {a>0 , bN}3
,b >0} 5

Clases errneas { n < 2 } 2.1 { { { { a b a b { n > 2 } 2.2 N } 4.1 N } 4.2 Caracteres } 4.3 Caracteres } 4.4

{ a <= 0 } 6.1 {b <= 0 } 6.2 { a = b , a <= 0 } 8 { a > b , b <= 0 , a > 0 } 10.1 { a > b , b <= 0 , a <= 0 } 10.2 { a < b , a <= 0 , b > 0 } 12.1 { a < b , a <= 0 , b <= 0 } 12.2

{a=b, a>0}7 {a>b, b>0}9 { a < b , a > 0 } 11

En la tabla se muestran en negrilla las expresiones que definen la particin derivada del tratamiento diferenciado en el mdulo, y que por lo tanto se mantienen tanto en las clases "correctas" como en las "errneas". La clase 9 se expresara en realidad como { a > b; a > 0; b > 0 }, de ah la conversin en dos clases errneas (10.1 y 10.2), pero se simplifica a la forma en que aparece en la tabla ya que b > 0 y a > b implican el cumplimiento de a > 0 (me refiero a la clase 9). Lo mismo sucede con la clase 11. De la tabla de particiones obtenemos la siguiente batera de pruebas:

Entradas Clases correctas (3 , 3) (27 , 12) (4 , 6) () (2 , 2 , 2 , 2) (4.71 , 2) (2 , 4.71) Clases errneas (a , 2) (2 , a) (-4 , -4) (6 , -4) (-2 , -4) (-4 , 6) (-4 , -2)

Salidas 4 3 2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1

Clases Cubiertas 1 , 3 , 5, 7 1 , 3 , 5, 9 1 , 3 , 5, 11 2.1 2.2 4.1 4.2 4.3 4.4 6.1 , 6.2 , 8 6.2 , 10.1 6.1 , 6.2 , 10.2 6.1 , 12.1 6.1 , 6.2 , 12.2

Valores Lmite (1 , 1) (2 , 1) (1 , 2) (1) (2, 2, 2)

Salidas 1 1 1 -1 -1

(0 , 0) (1 , 0) (0 , -1) (0 , 1) (-1 , 0)

-1 -1 -1 -1 -1

Los casos obtenidos en el anlisis de valores lmite se derivan de elegir valores adicionales lo ms cercanos posibles a las condiciones de las clases. Por ejemplo, dada la condicin a > b, se escoge un caso de prueba donde a = b+1 (suponiendo que tengamos ya un caso de prueba con a > b+1).

Ejercicio 7. En un colegio reciben pagos de pensiones cada mes. Si la persona paga entre el da 1 y 10 no tiene ningn recargo. Si paga entre el 11 y 20 tiene un recargo del 2%. Si paga el da 21 o despus el recargo es del 4%.
Se ha realizado un programa que slo solicita el da del mes en que se paga (en este ejercicio el mes no importa, ya que todos los meses se consideran de 30 dias) y despliega el porcentaje de recargo a cobrar. Se anexa a continuacin la pantalla:

Dia del mes ( 1 30 )

OK
Si no se introduce un valor acorde a lo descrito, el mdulo devolver el valor error. Disee los casos de prueba. SOLUCION. Analizamos posibles entradas de datos: Clases de datos (particin equivalente) Vlidos : Positivo Un valor entre 1-10 Un valor entre 11-20 - Un valor entre 21-30 No Vlidos: Positivo fuera del rango especificado - Alfabticos y Especiales - Nulo - Negativo - Cero - Flotante. Valores lmite a tener en cuenta: Rango 0, 1, 10, 11, 20, 21, 30, 31.

Asume A

Condicin N de parmetros

Clases correctas {n=1}1

Clases errneas { n < 1 (nulo) } 2 { dia N } 4.1

Tipo de los parmetros

{ dia N } 3 (entero)

{ dia Caracteres } 4.2 (alfabticos y especiales)

A, B

Sin recargo (SR)

{ dia > 0 , dia <= 10 } 5

{ dia < 0 { dia = 0

} 6.1 (negativo) } 6.2 (cero)

A, B A, B

D E

Recargo del 2% (R2) Recargo del 4% (R4)

{ dia >= 11 , dia <= 20 } 7 { dia >= 21 , dia <= 30 } 8 { dia > 30 }9

De la tabla de particiones obtenemos la siguiente batera de pruebas: Entradas (4) Salidas SR Clases Cubiertas 1,3,5 Valores Lmite (1) ( 10 ) ( 11 ) ( 20 ) ( 21 ) ( 30 ) Salidas SR

Clases correctas

( 18 ) ( 26 )

R2 R4 Error Error Error Error Error Error

1,3,7 1,3,8 2 4.1 4.2 6.1 6.2 9

R2 R4

Clases errneas

() ( 3.8 ) ( ab ) ( -1 ) (0) ( 32 )

( 31 )

Error