Clase 4 Pruebas de Caja Blanca
Clase 4 Pruebas de Caja Blanca
Clase 4 Pruebas de Caja Blanca
PRUEBAS DE SOFTWARE
Ing. Juan Carlos TORRES LOZANO
REGLAS DE NETIQUETA
USO DE LA CÁMARA
OBJETIVOS
DE
LA CLASE
• En las pruebas de interfaces internas entre funciones o métodos es necesario comprobar que
los argumentos de llamadas a funciones y la consistencia de las definiciones de variables
globales entre los módulos.
• Las pruebas de interfaces internas corresponden al conjunto de pruebas unitarias, que
están enfocadas a verificar el correcto funcionamiento de un módulo o clase aisladamente
del resto.
• Para probar adecuadamente las interfaces externas se ha de verificar que el flujo de datos
intercambiado entre clases o módulos es el correcto. Este tipo de pruebas es una parte de las
pruebas de integración.
• Estas pruebas aseguran la integridad de los datos durante todos los pasos de la
ejecución del módulo.
• Se comprueban las referencias de datos, la posible utilización de variables no
inicializadas, no salirse del límite de matrices o vectores, la correcta declaración de
datos y el hecho de no realizar comparaciones entre variables de distinto tipo, como
aspectos más importantes.
• Además se localizan errores derivados del uso de variables, tales como overflow,
underflow, división por cero, etc.
• Los pasos a seguir para realizar las pruebas de camino básico son:
1. Dibujar el grafo de flujo.
2. Determinar la complejidad ciclomática del grafo.
3. Determinar los caminos linealmente independientes.
4. Preparar los casos de prueba que forzarán la ejecución de cada camino.
• En primer lugar es necesario representar de forma gráfica los bucles para, posteriormente,
validar la construcción de los bucles, que pueden ser simples, anidados, concatenados y no
estructurados.
• Para los bucles simples, siendo n el número máximo de pasos, hay que realizar las
siguientes iteraciones, con sus correspondientes pruebas para garantizar que cada
tipo de bucle queda adecuadamente probado:
Pasar por alto el bucle.
Pasar una sola vez.
Pasar dos veces.
Hacer m pasos con m < n.
Hacer n - 1, n y n + 1 pasos.
• En el caso de los bucles anidados, se comienza por el bucle más interno progresando hacia fuera.
• Los bucles concatenados pueden ser independientes. En este caso, se realizan las mismas pruebas
que si fueran de bucles simples. En el caso de que no sean independientes, se aplica el enfoque de
los bucles anidados.
• Los bucles no estructurados necesitan ser rediseñados ya que comprometen la calidad del diseño y,
una vez hecho esto, se tratan como el tipo de bucle que haya resultado. A día de hoy, aunque
instrucciones como goto todavía forman parte de muchos lenguajes de programación, la
programación no estructurada en lenguajes de alto nivel está completamente desaconsejada.
• Un código no estructurado es difícil de leer y, por tanto, difícil de mantener.
• Las condiciones en una sentencia pueden ser, esencialmente, simples o compuestas. Una
condición simple puede ser una variable lógica (TRUE o FALSE) o una expresión relacional
de la siguiente forma: E1 (operador relacional) E2, donde E1 y E2 son expresiones
aritméticas y el operador relacional es del tipo <,<=,>,>=,=, ?#.
• Las condiciones compuestas están formadas por varias condiciones simples, operadores
lógicos del tipo NOT, AND, OR y paréntesis.
• Los errores más comunes que se producen en una condición y que, por tanto, hay que
comprobar son:
Error en el operador lógico: que sean incorrectos, desaparecidos, sobrantes, etc.
Error en la variable lógica.
Error en la expresión aritmética.
Error en el operador relacional.
Error en los paréntesis.
• En las decisiones, es necesario hacer pruebas de ramificaciones, que consisten en probar la
rama verdadera y la rama falsa y cada condición simple.
• En general, existen los siguientes tipos de pruebas relacionadas con las condiciones y
decisiones:
De cobertura de decisión.
De cobertura de condición.
De cobertura de decisión/condición.
• El siguiente ejemplo define los casos de prueba aplicando las coberturas de decisión y de
decisión/condición a partir de este fragmento de código:
• Se generan a continuación los casos de prueba necesarios para obtener una cobertura
completa de decisiones.
• En el código hay tres decisiones:
• Cada decisión debe tomar al menos una vez el valor verdadero y otra el valor falso. Los
datos concretos para los casos de prueba podrían ser los siguientes:
• Para cubrir todas las decisiones se deben definir los siguientes casos:
• Caso de prueba 1: D1 =Verdadero; D2=Verdadero; D3=Verdadero
h=10; m=30; s=50
• Caso de prueba 2: D1=Verdadero; D2=Verdadero; D3=Falso
h=10; m=30; s=70
• Caso de prueba 3: D1 =Verdadero; D2 =Falso
h=10; m=60
• Caso de prueba 4: D1=Falso
h=24
• Se generan seguidamente los casos de prueba necesarios para obtener una cobertura
completa de decisión/condición.
• En el código hay tres decisiones. Cada una de ellas comprende dos condiciones.
• Hay que garantizar que cada condición tome al menos una vez el valor verdadero y otra el
valor falso, garantizando además que se cumpla la cobertura de decisión. Los datos
concretos para los casos de prueba podrían ser los siguientes:
• Si se utilizan los datos de C1.1 y C1.2 que hacen que tomen los valores VERDADERO
simultáneamente, la decisión D1 tomará también el valor VERDADERO. Para que tome el
valor FALSO, no se puede hacer que C1.1 y C1.2 tomen los valores FALSO
simultáneamente, y habrá que considerar dos casos: C1.1=V, C1.2=F y C1.1=F, C1.2=V para
que la decisión D1 tome también el valor FALSO cubriendo todas las condiciones.
• Lo mismo ocurre con C2.1 y C2.2 y con C3.1 y C3.2.
• Caso de prueba 1: C1.1=Verdadero, C1.2=Verdadero, C2.1= Verdadero, C2.2= Verdadero,
C3.1= Verdadero, C3.2= Verdadero
h=10; m=30; s=50
ACTIVIDAD