domingo, 13 de abril de 2014

CASOS DE PRUEBAS


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 1 a 10 letras
(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