Pruebas de caja blanca: cómo usarlas para revelar errores internos y por qué transforman la Calidad del Software
Las pruebas de caja blanca son una metodología importante en el proceso de desarrollo ya que se enfocan en validar la estructura interna y la operación del código, a diferencia de las pruebas de caja negra que se enfocan en las funciones sin tener en cuenta la implementación interna. Estas pruebas permiten a los evaluadores trabajar directamente con el código fuente, ofreciendo una visión detallada de la lógica del programa para garantizar que cada parte del código funcione correctamente y cumpla con los requisitos definidos.
¿Qué son?
Estas pruebas también conocidas como: estructurales o de caja de cristal, que se fundamentan en el conocimiento del código fuente, tienen como objetivo principal encontrar y corregir errores en la lógica interna, asegurando la confiabilidad y la calidad del software.
¿Que se verifica en las pruebas de caja blanca?
- Cobertura de código: Asegurar que todas las líneas de código se ejecuten al menos una vez.
- Cobertura de decisión: Verificar que todas las decisiones (if-else) sean evaluadas para ambas condiciones, verdadera y falsa.
- Cobertura de camino: Garantizar que todos los caminos posibles a través del código sean recorridos.
- Cobertura de condición: Evaluar cada condición en las decisiones de control para todos los resultados posibles.
- Cobertura de bucles: Comprobar que los bucles funcionen correctamente para todas las iteraciones posibles, incluidas las condiciones de borde.
¿Cómo se realizan?
Esto es lo que hacen los tester cuando prueban una aplicación utilizando la técnica de pruebas de caja blanca:
- Comprender el código fuente:
El tester usualmente como primer paso busca aprender y entender el código fuente; El tester debe tener gran conocimiento de los lenguajes de programación utilizados en el aplicativo o programa que se esta probando puesto que las pruebas de caja blanca implican probar el funcionamiento interno, además de esto el tester debe ser consciente de las prácticas de codificación segura.
El tester debe ser capaz de encontrar problemas de seguridad evitando ataques informáticos que podrían inyectar código malicioso a la aplicación, consciente o inconscientemente.
Ejemplo
Para el ejemplo tomaremos una función que calcula la suma de todos los números pares en una lista:
- Paso 1: Análisis del código:
- Una variable “Suma” inicializada en 0.
- Un bucle “For” que recorre cada número en la lista.
- Una condición “if” que verifica si el número es par (“numero % 2 ==0”).
- Si la condición es verdadera, el número se agrega a “suma”.
- a la final la función devuelve el valor de “Suma”.
2. Paso 2: Identificar los caminos de control:
- Camino1: Lista está vacía.
- Camino2: Lista contiene solo números impares.
- Camino3: Lista contiene sólo números pares.
- Camino4: La lista contiene una combinación de números pares e impares.
3. Paso 3: Diseño de casos de prueba:
- Camino1: Lista vacía
Entrada: []
Salida esperada: 0
- Camino 2: Lista con solo números impares
Entrada: [1,2,3,5,7]
Salida esperada: 0
- Camino 3: Lista con solo números pares
Entrada: [2,4,6,8]
Salida esperada: 20(2+4+6+8)
- Camino 4: Lista con una combinación de números pares e impares
Entrada: [1,2,3,4,5,6]
Salida esperada: 12(2+4+6)
4. Paso 4: Ejecución de los casos de prueba.
5. Paso 5: Interpretación de los resultados:
- Caso de prueba1: la función debe retornar 0 porque no hay numeros en la lista.
- Caso de prueba2: la función debe retornar 0 porque no hay numeros pares en la lista.
- Caso de prueba3: la función debe devolver 20 porque la suma de todos los números pares es 20.
- Caso de prueba4: la función debe devolver 12 porque la suma de los números pares es 12.
Técnicas de prueba de caja blanca
- Cobertura de la declaración: Asegura que cada línea de código se ejecute al menos una vez durante la prueba, esta técnica ayuda a identificar las declaraciones de código que nunca se han ejecutado.
- Cobertura de decisiones: Garantiza que cada solución de puntos en el programa (por ejemplo: las instrucciones IF), se ejecuten tanto para condiciones verdaderas como falsas.
- Cobertura de sucursales: Es similar a la cobertura de decisiones, pero se centra en garantizar que cada rama de cada punto de decisión se ejecute al menos una vez.
- Cobertura de condiciones: Garantiza que cada condición individual en una expresión lógica se evalúe tanto a verdadero como a falso.
- Cobertura de múltiples condiciones: Asegura que todas las combinaciones posibles de condiciones en una expresión lógica se evalúen.
- Cobertura de la máquina de estados finitos: La cobertura de la máquina de estados finitos implica probar todas las transiciones de estados en una máquina de estados. Cada estado y cada transición se deben ejecutar al menos una vez.
- Cobertura de ruta: Asegura que todos los caminos posibles a través de un programa se ejecuten. Esta técnica es exhaustiva y puede ser difícil de lograr en programas complejos.
- Prueba de flujo de control: Se centra en el flujo lógico del programa. Se construye un gráfico de flujo de control para identificar todos los caminos posibles y asegurar que cada uno se pruebe.
- Prueba de flujo de datos: Se enfoca en el uso de variables y su estado. Asegura que todas las definiciones de variables y sus usos se prueben.
Tipos de pruebas de caja blanca:
Las pruebas de Blanca Caja cubren varios tipos de pruebas utilizadas para evaluar la conveniencia de usar una aplicación, unidad de código o un paquete de software específico.
- Unitarias: este suele ser el primer tipo de prueba que se realiza en la aplicación, se realizan en cada unidad o bloque de código a medida que se desarrolla. Son esencialmente realizadas por un programador, como desarrollador de software, desarrolla varias líneas de código, una función u objeto y verifica para asegurarse de que funcione antes de continuar. Las pruebas unitarias ayudan a determinar la mayoría de los errores en las primeras etapas del ciclo de desarrollo de software.
- Fuga de memoria: son las principales razones por las cuales las aplicaciones funcionan lentamente. En los casos en que la aplicación de software funciona lentamente, es importante tener un especialista en control de calidad con la experiencia de detectar fugas de memoria.
- Penetración de caja blanca: en estas pruebas, el tester o desarrollador tiene el código de información completo de la aplicación, información detallada de la red, direcciones IP relacionadas con IP -ades y toda la información sobre el servidor en el que se realiza la aplicación. El objetivo es atacar el código desde varios ángulos para identificar amenazas de seguridad.
- Mutación de caja blanca: a menudo se usan para detectar los mejores métodos de codificación para usar al expandir la solución de software.
Herramientas de prueba de caja blanca :
- EclEmma: https://www.eclemma.org/download.html
- Unidad nula: https://nunit.org/
- Unidad HTML: https://htmlunit.sourceforge.io/
- Unhidad Cpp: https://sourceforge.net/projects/cppunit/