Você está na página 1de 8

lOMoARcPSD|2960045

Ejercicio de seminario - Prueba de caja blanca

Ingeniería del software (Universitat Politecnica de Valencia)

StuDocu no está patrocinado ni avalado por ningún colegio o universidad.


Descargado por Anuski a (noavisnu@gmail.com)
lOMoARcPSD|2960045

Metodología y Tecnología de la Programación Cuestiones y Problemas

Problema 62. (Pruebas)


Construya el grafo de flujo para el pseudocódigo adjunto, calcule la complejidad ciclomática, el conjunto
de caminos básico y los casos de prueba asociados.
INICIO
Leer_Nota_de_Teoría (NT);
Leer_Nota_de_Prácticas (NP);
Leer_Nota_de_Trabajos (NTR);
SI NP = No Apto
ENTONCES NF = 4;
SINO
SI NT<4.5
ENTONCES NF=NT
SINO NF = NT + NTR;
FINSI
SI NF>10
ENTONCES NF = Matricula de Honor;
FINSI
FINSI
FIN

Problema 63. (Pruebas)


Dado el siguiente pseudocódigo construya: el grafo de flujo, el conjunto básico de caminos
independientes y un conjunto de casos de prueba para dicho conjunto básico:
INICIO;
LEER (a); LEER (b);
t = 0;
SI (a < b) ENTONES
MIENTRAS (a > 0) HACER
t = t + b; a = a – 1;
FinMIENTRAS
SI NO
MIENTRAS (b > 0) HACER
t = t + a; b = b – 1;
FinMIENTRAS;
FinSI
ESCRIBIR (t);
FIN;

Problema 64. (Pruebas)


A partir del código siguiente y utilizando un grafo de flujo, construya un conjunto de casos de prueba
de caja blanca.
#define nombrefichero "numeros"
/* Calcula la media de los numeros positivos contenidos en un archivo*/
void CalcularMedia( float *media )
{ FILE *fichero;
int valor, numvalores, suma;
*media = 0.0;
numvalores = 0; suma = 0;
if ((fichero = fopen(nombrefichero, "rb"))==NULL)
{ printf("\nEl fichero no se encuentra\n");
return; }
while (fread(&valor, sizeof(valor), 1, fichero))
{ if (valor>0)
{ numvalores = numvalores + 1;
suma = suma + valor;
}

55

Descargado por Anuski a (noavisnu@gmail.com)


lOMoARcPSD|2960045

Metodología y Tecnología de la Programación Cuestiones y Problemas

}
/* calcular la media e imprimir resultados */
if (numvalores>0)
{ *media = suma/numvalores;
printf("\n Se leyeron %d: \n", numvalores);
}
else printf("\nNo se encontraron valores positivos\n");
fclose(fichero);
}

Problema 65. (Pruebas)


Dado el siguiente código en C especifique un conjunto de casos de prueba mediante la técnica de caja
blanca del camino básico. Defina los casos de prueba según los siguientes datos:
Cod_Película Título Formato Alquilada
00001 “Star Wars” DVD SÍ
00002 “Star Wars” VHS SÍ
00003 “Matrix” DVD SÍ
00004 “Matrix” VHS NO

int Obtener_Pelicula_Disponible (char cod_pelicula[5])


{
char formato[10], resp;
int disponible=0, formato_valido=0;
do
{
LEER_FORMATO(formato);
formato_valido= VALIDAR_FORMATO(formato);
if (!formato_valido)
return (FORMATO_NO_EXISTENTE);
else
{
LEER_TITULO_PELICULA(titulo);
if (! EXISTE_PELICULA(titulo))
return (PELICULA_NO_EXISTENTE);
else
{
disponible= VALIDAR_PELICULA_DISPONIBLE (formato, titulo, cod_pelicula);
if (!disponible)
return (PELICULA_NO_DISPONIBLE);
else
{
printf(“Ha escogido la pelicula\n %s, en formato %s”, titulo,
formato);
printf(“¿Está seguro? (s/n)\n”);
scanf(“%c”,&resp);
}
}
}
} while (resp!=’s’);
}

56

Descargado por Anuski a (noavisnu@gmail.com)


lOMoARcPSD|2960045

Metodología y Tecnología de la Programación Cuestiones y Problemas

Problema 66. (Pruebas)


Dado la siguiente función en C construir el grafo de flujo, determinar un conjunto básico de caminos
independientes y un conjunto de casos de prueba para dicho conjunto básico.

int buscar_en(char cadena[10], char letra)


// la función busca si una letra aparece en una determinada cadena
// entradas: cadena : la cadena donde se realiza la búsqueda
// letra: el carácter a buscar
// devuelve el número de ocurrencias de la letra.

{ int contador, n, lon;


n=0; contador=0;
lon = strlen (cadena); // devuelve la longitud de la cadena
if (lon > 0) {
do {
if (cadena[contador] == letra) {
n++; // incrementa el número de ocurrencias
}
contador++; // pasa a la siguiente letra de la cadena
lon--; // disminuye el tamaño de la cadena que queda por revisar
} while (lon > 0);
}
return n;
}

Problema 67. (Pruebas)


Dado la siguiente función en C construye el grafo de flujo, deriva un conjunto de caminos básicos
independientes y define un conjunto de casos de prueba para dicho conjunto básico.

int hay_mayor_tira (char tira [4], char letra)


//la función comprueba si en tira hay un carácter mayor que letra
// entradas: tira : la cadena donde se realiza la comprobación
// letra : carácter a comparar

{
int encontrado,j,lon;
encontrado=0; j=0;
lon=strlen(tira); // devuelve la longitud de la cadena
while ((!encontrado) && (j<lon))
{
if (tira[j]>letra) encontrado=1; // ha encontrado un carácter mayor
j++; // pasa a la siguiente letra de la cadena
}
return encontrado;
}

57

Descargado por Anuski a (noavisnu@gmail.com)


lOMoARcPSD|2960045

Metodología y Tecnología de la Programación Cuestiones y Problemas

Problema 68. (Pruebas)


Construya los casos de prueba utilizando la técnica del camino básico para la siguiente función.

int validar_cliente_existe (Codigo_Cliente cc)


/* Entrada: cc, Código de Cliente a buscar
Salida: 1 si cc existe; 0 si no existe;
-1 si no encuentra el archivo
*/
{
FILE *ArchivoClientes;
int encontrado = 0;
int fin_archivo = 0;
Reg_Cliente rc;
if ((ArchivoClientes=fopen("Clientes","rb"))==NULL) return -1;
else {
fin_archivo = fread((&rc,sizeof(rc),1,ArchivoClientes);
while (!fin_archivo){
if (!strcmp(rc.cod_cliente,cc))
return 1;
fin_archivo = fread(&rc,sizeof(rc),1,ArchivoClientes);
}
fclose(ArchivoClientes);
return 0;
}
}

Problema 69. (Pruebas)


Construya los casos de prueba utilizando la técnica del camino básico para la siguiente función.

typedef struct {int dia,mes} Fecha;

int validar_no_caducada (Fecha t, Fecha h)


/* Entrada: t, fecha de la tarjeta;
h, fecha del día de hoy
Salida: 1 si la fecha de la tarjeta es mayor o igual que hoy
0 en otro caso
*/
{
if (t.mes<h.mes) return 0;
else if (t.mes==h.mes && t.dia<h.dia) return 0;
else return 1;
}

58

Descargado por Anuski a (noavisnu@gmail.com)


lOMoARcPSD|2960045

Metodología y Tecnología de la Programación Cuestiones y Problemas

Problema 70. (Pruebas)


El siguiente código C calcula el check-sum de un array de enteros como la suma del valor absoluto de
sus elementos módulo la longitud del array. Construya los casos de prueba utilizando la técnica del
camino básico.

int CheckSum(int *Buffer, unsigned int len){


int Chk;
unsigned int i;

if (len==0) return(-1);
Chk = 0;
for(i=0;i<len;i++) {
if (Bufffer[i]<0)
Chk = Chk - Buffer[i]
else
Chk = Chk + Buffer[i]
}
Chk = Chk % len;
return (Chk);
}

Problema 71. (Pruebas)


Construya los casos de prueba utilizando la técnica del camino básico para la siguiente función:

int sum_vect(int v[])


{
int i=0;
int suma=0;
while (i<2)
{
if (v[i]==0) then break;
suma = suma + v[i];
i = i+1;
}
return suma;
}

Problema 72. (Pruebas)


Construya los casos de prueba utilizando la técnica del camino básico para la siguiente función:

bool es_primo(int n) {
if (n <= 0 || n == 1) return false;
for (int i = 2; i <= n/2; ++i)
if (n % i == 0) return false;
return true;
}

Problema 73. (Pruebas)


Construya los casos de prueba utilizando la técnica del camino básico para la siguiente función.
int validar_cliente_existe(char *nif) {
int encontrado=0;
FILE *clientes;
Reg_cliente rc;

if ((Fclientes=fopen(“Fclientes”,”rb”))==NULL) return 0;
while (fread(&rc,sizeof(rc),1,Fclientes) && !encontrado)
if (!strcmp(nif,rc.nif)) encontrado=1;
fclose(Fclientes);
if (encontrado) return 1; else return 0;
}

59

Descargado por Anuski a (noavisnu@gmail.com)


lOMoARcPSD|2960045

Metodología y Tecnología de la Programación Cuestiones y Problemas

Problema 74. (Pruebas)


La siguiente función genera el cheque de pago a un trabajador en función de su categoría (CAPATAZ o
RECOLECTOR) y del número de horas (las horas por encima de 8 son horas extras y se pagan un 20%
más caras):

#define PRECIO_HORA_CAPATAZ 15
#define PRECIO_HORA_RECOLECTOR 10
int calcula_e_imprime_cheque ( )
{
FILE *fich;
char nif[10], nombre[50], linea[256], categoria;
int horas, precio_hora;
float cantidad;
if ((fich=fopen("empleados.txt","rt"))==NULL) {
printf("Fichero no existe\n");
return -1;
}
while (fgets(linea,256,fich))
{
sscanf(linea,"%s %s %d %c", nif, nombre, &horas, &categoria);
if (categoria=='c') precio_hora=PRECIO_HORA_CAPATAZ;
else precio_hora=PRECIO_HORA_RECOLECTOR;
if (horas <=8)
cantidad= horas*precio_hora;
else
cantidad= 8*precio_hora + (horas-8) * precio_hora*1.2;
printf("NIF: %s NOMBRE: %s CATEGORIA %c \n", nif, nombre, categoria);
printf("HORAS : %d CANTIDAD A PAGAR : %f\n", horas, cantidad);
}
return 0;
}

Diseñe los casos de prueba siguiendo la técnica del camino básico: dibuje el grafo de flujo, calcule la
complejidad ciclomática, especifique los caminos independientes y los casos de prueba asociados a cada
camino.

Problema 75. (Pruebas)


A partir del código siguiente y utilizando un grafo de flujo, construya un conjunto de casos de prueba
de caja blanca.

#define nombrefichero "misregistros"


#define TRUE 1
#define FALSE 0

/* Valida si el registro mreg del tipo REG es correcto*/


/* el registro tiene dos campos: id de tipo int */
/* valor de tipo int */

int ValidarReg( REG *mreg )


{ FILE *fichero;
REG sreg;
int retorno;

60

Descargado por Anuski a (noavisnu@gmail.com)


lOMoARcPSD|2960045

Metodología y Tecnología de la Programación Cuestiones y Problemas

int encontrado = FALSE;


if ((fichero = fopen(nombrefichero, "rb"))==NULL)
{ printf("\nEl fichero no se encuentra\n");
return (-2);
}
while (fread(&sreg, sizeof(sreg), 1, fichero))
{ if (sreg.id == mreg->id) {
encontrado = TRUE;
break;
}
}
if (encontrado==FALSE){
printf("\n El registro %d no está en la BD\n", mreg->id);
retorno = 0;
} else if (mreg->valor <= sreg.valor) {
printf("\n El registro %d no es válido\n", mreg->id);
retorno = -1;
} else {
printf("\n El registro %d es válido\n", mreg->id);
retorno = 0;
}
fclose(fichero);
return retorno;
}

61

Descargado por Anuski a (noavisnu@gmail.com)

Você também pode gostar