Probar un programa es el proceso de ejecutarlo para encontrar errores. La prueba de programas consiste en ejecutar programas para encontar errores. Los errores son las partes incorrectas de los algoritmos que no hacen lo que deben, o que hacen lo que no deben. Una falla se manifiesta al ejecutar un programa que tienen un error, pues la falla es un resultado equivocado producido por el programa al ejecutarlo usando unos datos de prueba específicos. =========================================================== Casos de prueba: son las condiciones o criterios que se deben cumplir para que funcione el programa. Datos de prueba: son valores específicos que sirven para constatar que los casos de prueba se cumplen. Los datos de prueba sirven para constatar que se cumplan las condiciones de los casos de prueba del programa. Los datos de prueba son valores específicos para probar programas. =========================================================== Tipos de prueba de programas: - Caja Blanca ==> Métodos de cobertura de instrucciones y condiciones - Caja Negra - Clases de Equivalencia - Casos Límite - Adivinación =========================================================== XXXXXX XXXXXX XXXXX XXXXXXX XX XXXXXX XXXXX XX XX X XX XX X XX XX XX XXXXXXXX XX XX XX XX XXXX XX XXXXX XX XX XX XXXXXXXX XX XX XX XX XX X XX X XX XX XXXXX XXXXXXX XX XXXXXX XXXXX XXXXXX XXXXXX =========================================================== Principios para probar programas - Una parte esencial del dato de prueba es la definición de la salida esperada - Un programador debe tratar de evitar probar sus propios programas - Una organización debe tratar de evitar probar sus propios programas - Inspeccione cuidadosamente el resultado de cada caso de prueba - Los casos de prueba deben escribirse para condiciones válidas y esperadas - Los casos de prueba deben escribirse para condiciones in-válidas e in-esperadas - Examine el programa para verificar que hace lo que debe - Examine el programa para verificar que NO hace lo que NO debe - Evite casos de prueba para botar, a menos que vaya a botar el programa - No comience a hacer pruebas de programas suponiendo que no encontrará errores - Comience a hacer pruebas de programas suponiendo que encontrará errores - La probabilidad de encontrar más errores en una sección del programa es proporcional a la cantidad de errores que han aparecido ahí [ Si huele mal, está podrido ] [ Es más difícil desarrugar que hacer nuevo ] - Probar programas es una actividad desafiante e intelectualmente satisfactoria. - Un buen dato de prueba es uno que tiene una alta probabilidad de encontrar un error. - Un dato de prueba es exitoso si sirve para encontrar un error. =========================================================== Tabla 2.1: Pautas Vitales para la Prueba de Programas - Una parte necesaria de un caso de prueba es una definición del resultado de salida esperado. - Un programador debe evitar probar su propio programa. - Una organización de programación no debe probar sus propios programas. - Es necesario examinar a fondo los resultados de cada prueba. - Los caso de prueba se deben escribir para las condiciones de la entrada que son inválidos e inesperadas así como para los que son válidas y esperadas. - Examinar un programa para ver que no hace lo que se supone que debe hacer es solamente la mitad de la batalla; la otra mitad es determinar si el programa hace lo se supone que no debe hacer. - Hay que evitar casos de prueba desechables a menos que el programa sea de verdad un programa desechable. - Nunca se debe planear un esfuerzo de prueba bajo la asumción tácita que no se encontrarán errores. - La probabilidad de la existencia de más errores en la sección de un programa es proporcional al número de errores que ya fueron encontrados en esa sección. - La prueba de programas es una tarea extremadamente creativa e intelectual desafiadora. =========================================================== Trucos para obtener los datos de prueba "caja blanca" 1) Fuente ==> Diagrama de Flujo (fujo-grama) [Fg 4.1 Meyer] 2) Flujograma ==> Flujograma extendido [Fg 4.2 Meyer] - AND ==> Horizontal - OR ==> Vertical 3) Identificar bloques de código 4) Cada bloque de código es un nuevo bloque de casos de prueba 5) Para cada caso de prueba, encuentre los datos de prueba que le corresponden CASOS DE PRUEBA (1) A>1 && B == 0 (5) A == 2 && X > 1 (2) A>1 && B != 0 (6) A == 2 && X <= 1 (3) A<=1 && B == 0 (7) A != 2 && X > 1 (4) A<=1 && B != 0 (8) A != 2 && X <= 1 DATOS DE PRUEBA A=2 && B=0 && X=4 ==> (1)+(5) A=2 && B=1 && X=1 ==> (2)+(6) A=1 && B=0 && X=2 ==> (3)+(7) A=1 && B=1 && X=1 ==> (4)+(8) =========================================================== 1) Definir qué es la ENTRADA y qué es la SALIDA. ENTRADA = (src = "....", dst = "....") - Si strcpy() usara variables globales, sería necesesario incluirlas como ENTRADAS. SALIDA = ( dst = "..." ) ¿Qué es un caso de prueba para strcpy()? - Es una pareja (ENTRADA ! SALIDA) == ( src = "....", dst = "...." ; dst = "...." ) char* strcpy( char * dst, const char * src ) { /* resultado Copia en "dst" el valor de la hilera "src". - "dst" debe ser suficientemente grande. - Retorna "dst". */ /* Cómo Copia las letras que aparecen a partir de "*src" en "*dst" hasta que copia el valor (char*) 0. */ } ===========================================================