Caso
de Estudio de Pruebas del SW
1
Descripción del Módulo
Nombre
de la Función: analizarCadena
Entradas: cadena de 1 a 10 caracteres, letra entre ‘a’ y ‘z’
Salidas: ocurrencias de la letra en la
cadena, flag señalando si la cadena contiene sólo dígitos, flag señalando la
condición de finalización del análisis
Descripción: La función
determina cuantas ocurrencias de la letra aparecen en la cadena y si la cadena
contiene sólo dígitos. Si el proceso se realiza con éxito se devuelve el número
de ocurrencias de la letra en la cadena, se señala si la cadena tiene sólo
dígitos y se devuelve el flag de finalización con valor 1, de lo contrario el
número de ocurrencias y el flag de sólo digitos valdrán 0 y el flag de
finalización tendrá un valor asociado a la situación anómala detectada, de
acuerdo con la siguiente codificación:
Valor del indicador
|
Significado del valor
|
-1
|
letra no permitida
|
-2
|
cadena vacía
|
-3
|
cadena excede largo
|
2
Pruebas de Caja Negra
Para las pruebas de caja negra no es
necesario conocer detalles de la función, sólo se requiere saber qué realiza la
función y cuál es el efecto que de ella se espera como salida. Por lo tanto
éstas pruebas pueden prepararse incluso sin disponer del pseudocódigo o código.
Partición
Equivalente
Condiciones de Entrada
|
Clases de Equivalencia Válidas
|
Clases de Equivalencia No Válidas
|
Cadena
|
(1a) cadena de
|
(1b)
cadena vacía
(1c)
cadena de más de 10 letras
|
Letra
|
(2a)
letra entre ‘a’ - ‘z’
|
(2b) carácter que no está entre ‘a’ - ‘z’
|
A continuación se presenta un conjunto de
casos de prueba obtenidos a partir de la combinación de las clases de
equivalencia. Como en este caso no son muchas combinaciones las haremos todas,
sin embargo, la Técnica
de Partición Equivalente sólo propone como mínimo tener casos de prueba que
utilicen varias clases de equivalencia válidas hasta probarlas todas, y además,
un caso de prueba para cada clase de equivalencia no válida.
Casos
de Prueba
|
Condiciones de Entrada
|
Clases de Equivalencia
probadas
|
Resultado Esperado
|
|||
Cadena
|
letra
|
ocurren-cias
|
solo
digitos
|
Retorno
de la Función
|
||
CP-1
|
“mundo”
|
‘n’
|
(1a) (2a)
|
1
|
0
|
1
|
CP-2
|
“mundo”
|
‘1’
|
(1a) (2b)
|
0
|
0
|
-1 (letra no permitida)
|
CP-3
|
“”
|
‘n’
|
(1b)
(2a)
|
0
|
0
|
-2 (cadena vacía)
|
CP-4
|
“”
|
‘1’
|
(1b)
(2b)
|
0
|
0
|
-2 (cadena vacía)
|
CP-5
|
“hola
mi mundo”
|
‘n’
|
(1c) (2a)
|
0
|
0
|
-3 (cadena excede largo)
|
CP-6
|
“hola
mi mundo”
|
‘1’
|
(1c)
(2b)
|
0
|
0
|
-3 (cadena excede largo)
|
Análisis de
Valores Límite
En este caso, la idea es ejercitar los
valores posibles de los parámetros en sus límites o valores extremos. Se
proponen los siguientes casos de prueba adicionales:
Casos
de Prueba
|
Condiciones de Entrada
|
Resultado Esperado
|
|||
Cadena
|
letra
|
ocurren-cias
|
solo
digitos
|
Retorno
de la Función
|
|
CP-7
|
“hola mundos”
|
‘n’
|
0
|
0
|
- 3 (cadena excede largo)
|
CP-8
|
“m”
|
‘n’
|
0
|
0
|
1
|
CP-9
|
“hola
mundo”
|
‘n’
|
1
|
0
|
1
|
CP-10
|
“hola
mundo”
|
‘a’
|
1
|
0
|
1
|
CP-11
|
“hola
mundo”
|
‘z’
|
0
|
0
|
1
|
3
Pruebas de Caja Blanca
En esta parte se establecerán pruebas de caja
blanca para complementar los casos de prueba obtenidos anteriormente. El
propósito de una prueba de caja blanca es probar un módulo abordando sus
posibles situaciones de ejecución y considerando su lógica interna. Para ello
se elaborarán casos de prueba adicionales mediante las Técnicas del Camino
Básico y Prueba de Bucles.
Una primera versión del código fuente de la
función se muestra a continuación.
#include <string.h>
#include <ctype.h>
#define MAXIMO_LARGO 10
#define OK 1
#define LETRA_NO_PERMITIDA -1
#define CADENA_VACIA -2
#define LARGO_EXCESIVO -3
int analizarCadena(char cadena[], char letra, int
*ocurrencias, int *solo_digitos) {
int i = 0,
veces = 0, largo = 0, digitos = 0;
*solo_digitos = 0;
*ocurrencias = 0;
if ((letra <= 'a') || (letra >= 'z')) {
return
(LETRA_NO_PERMITIDA);
}
largo =
strlen(cadena);
if (largo
== 0) {
return
(CADENA_VACIA);
}
if (largo
>= MAXIMO_LARGO) {
return
(LARGO_EXCESIVO);
}
while (i < largo) {
if
(cadena[i] == letra) {
veces = veces + 1;
}
if (isdigit(cadena[i])) {
digitos = digitos + 1;
}
i = i + 1;
}
if (digitos
== largo) {
*solo_digitos = 1;
}
*ocurrencias = i;
return
(OK);
}
Prueba del Camino
Básico
La figura muestra el grafo de flujo asociado al código de nuestro ejemplo. Observando el grafo de flujo se obtiene la siguiente información:
9 Regiones
8 Nodos predicado + 1
24 Aristas – 17 Nodos + 2
Complejidad Ciclomática:
V(G) = 9
Conjunto de Caminos Independientes
C1: 1 – 2 – 17
C2: 1 – 3 – 2 –
17
C3: 1 – 3 – 4 – 5 –
17
C4: 1 – 3 – 4 – 6 –
7 – 17
C5: 1 – 3 – 4 – 6 – 8
– 14 – 16 – 17
C6: 1 – 3 – 4 – 6 – 8
– 9 – 11 – 13 – 8 – 14 – 16 – 17
C7: 1 – 3 – 4 – 6 – 8
– 9 – 10 – 11 – 13 – 8 – 14 – 16 – 17
C8: 1 – 3 – 4 – 6 – 8
– 9 – 11 – 12 – 13 – 8 – 14 – 15 – 16 –
17
C9: Ya se han
recorrido todas las aristas
Casos de Prueba
C1: letra
<= ‘a’
C2: letra
>= ‘z’
C3: ‘a’
< letra < ‘z’, largo == 0
Ya
abordado en el caso de prueba CP-3
C4: ‘a’
< letra < ‘z’, NO(largo == 0), largo >= MAXIMO_LARGO
Ya abordado en el caso de prueba CP-5
C5: ‘a’
< letra < ‘z’, NO(largo == 0), NO(largo >= MAXIMO_LARGO), NO(i <
largo)
NO(cadena[i] == letra),
NO(isdigit(cadena[i])), NO(digitos == largo)
No es posible NO(i
< largo), siendo i igual a 0
inicialmente y largo > 0
C6: ‘a’
< letra < ‘z’, NO(largo == 0), NO(largo >= MAXIMO_LARGO), largo == 1
NO(cadena[i] == letra),
NO(isdigit(cadena[i])), NO(digitos == largo)
Ya abordado en el caso de prueba CP-8
C7: ‘a’
< letra < ‘z’, NO(largo == 0), NO(largo >= MAXIMO_LARGO), largo == 1
cadena[i] == letra, NO(isdigit(cadena[i])),
NO(digitos == largo)
C8: ‘a’
< letra < ‘z’, NO(largo == 0), NO(largo >= MAXIMO_LARGO), largo == 1
NO(cadena[i] == letra), isdigit(cadena[i]),
digitos == largo
Según el análisis anterior, los siguientes
casos de prueba cumplen con las condiciones señaladas (y no cubiertas hasta
ahora).
Camino
|
Caso
de Prueba
|
Condiciones de Entrada
|
Resultado Esperado
|
|||
cadena
|
letra
|
ocurren-cias
|
solo
digitos
|
Retorno
de la Función
|
||
C1
|
CP-12
|
“mundo”
|
‘/’
|
0
|
0
|
- 1 (letra no permitida)
|
C2
|
CP-13
|
“mundo”
|
‘}’
|
0
|
0
|
- 1 (letra no permitida)
|
C7
|
CP-14
|
“n”
|
‘n’
|
1
|
0
|
1
|
C8
|
CP-15
|
“1”
|
‘n’
|
0
|
1
|
1
|
No hay comentarios:
Publicar un comentario