Sobes.tech
Junior

¿En qué consiste la prueba de caja blanca?

sobes.tech AI

Respuesta de la IA

Las pruebas de caja blanca (White-box testing) son un método de prueba de software que verifica la estructura interna, el diseño y la lógica del código. El probador tiene acceso al código fuente y diseña casos de prueba en base a ello.

Principios básicos:

  • Cobertura del código: Los casos de prueba se desarrollan para lograr la máxima cobertura de diferentes elementos del código (operadores, ramas, caminos).
  • Conocimiento de la estructura interna: Requiere entender cómo funciona el programa internamente.
  • Detección: Errores en la lógica, caminos de ejecución incorrectos, problemas con bucles y operadores condicionales.
  • Automatización: Se usa frecuentemente en pruebas unitarias, pruebas de integración y pruebas de seguridad a nivel de código.

Tipos de cobertura:

  • Cobertura de instrucciones (Statement Coverage): Ejecución de cada instrucción en el programa al menos una vez.
  • Cobertura de ramas (Branch Coverage): Ejecución de cada condición (if, else, switch) como true y false.
  • Cobertura de caminos (Path Coverage): Ejecución de todos los caminos posibles a través del programa. (La más completa, pero a menudo poco práctica).

Ejemplo de cobertura de ramas en Python:

# Función de ejemplo
def calculate_discount(price, is_member):
    if price > 100 and is_member: # Rama 1 (true)
        discount = price * 0.1  # Rama 2 (se ejecuta si Rama 1 es 'true')
    else: # Rama 3 (false)
        discount = 0            # Rama 4 (se ejecuta si Rama 1 es 'false')
    return price - discount

# Casos de prueba para cubrir ramas:
# 1. price > 100 y is_member == True (cubre Rama 1 true, Rama 2)
# 2. price <= 100 o is_member == False (cubre Rama 1 false, Rama 3, Rama 4)

Ventajas:

  • Detectar errores en etapas tempranas del desarrollo.
  • Garantiza que partes importantes del código han sido probadas.
  • Ayuda a entender cómo funciona el código y a mejorar su diseño.

Desventajas:

  • Requiere un conocimiento profundo del código.
  • Puede ser laborioso para sistemas grandes y complejos.
  • No prueba el funcionamiento del programa desde la perspectiva del usuario final (lo cual es tarea de las pruebas de caja negra).

La esencia es verificar "cómo" funciona el programa, no solo "qué" hace.