La diferencia entre las pruebas de caja blanca y las de caja negra
Las pruebas de caja negra evalúan la funcionalidad del software sin conocimiento del código interno, enfocándose en entradas y salidas. Las pruebas de caja blanca examinan la estructura y lógica interna del código, requiriendo acceso al código fuente.
Las pruebas de caja negra suelen ser realizadas por los equipos de aseguramiento de calidad para validar la funcionalidad vista por el usuario, utilizando técnicas como la partición de equivalencia y el análisis de valores límite.
Por el contrario, las pruebas de caja blanca son llevadas a cabo por desarrolladores para garantizar la corrección y cobertura del código, empleando métodos como la cobertura de sentencias y de ramas.
La combinación de ambos enfoques mejora la cobertura de pruebas y la calidad del software.
En este artículo, te mostraré ambos tipos de pruebas, explicando en qué consisten, las diferencias clave entre ellas, cómo se utilizan y sus ventajas y desventajas.
¿Qué son las pruebas de caja negra?
Las pruebas de caja negra, a veces llamadas pruebas de comportamiento, son un tipo de pruebas de software en donde la persona que prueba no tiene acceso al código fuente del sistema que está siendo verificado. Generalmente, este tipo de pruebas es realizado por el equipo de aseguramiento de calidad y no requiere necesariamente habilidades técnicas avanzadas, como la programación.
En las pruebas de caja negra, los casos de prueba se elaboran en función de las entradas y salidas del AUT, según lo definido en las especificaciones de requisitos.
Las técnicas de pruebas de caja negra más destacadas son:
- Partición de equivalencia: donde las entradas se agrupan en clases (o particiones) de equivalencia, lo que significa que cualquier valor dentro de una clase generará el mismo resultado. Se necesita solo un caso de prueba por cada clase de equivalencia para lograr una buena cobertura.
Ejemplo: Si un campo acepta valores enteros entre 1 y 10, entonces la clase válida contiene todos los números entre 1 y 10, y las dos clases inválidas son los números menores que 1 y los mayores que 10. Esto significa que 3 casos de prueba en total son suficientes para cubrir todas las clases posibles.
- Análisis de valores límite: donde se prueban los valores extremos de entrada, ya que son más propensos a generar defectos.
Ejemplo: Usando el mismo campo anterior, los límites válidos son 1 y 10, y los inválidos son 0 y 11.
- Pruebas de tabla de decisiones: donde las relaciones entre entradas y salidas se muestran en formato tabular. Usualmente la tabla tiene columnas para las condiciones y filas para las diferentes combinaciones. Cada fila debería tener su caso de prueba correspondiente.
Ejemplo: Esta técnica se usa para escenarios más complejos. Supongamos que tenemos una solicitud de préstamo bancario con las siguientes condiciones:
| Condiciones | Edad igual o mayor a 25 | Ingresos iguales o superiores a 50000 USD | Resultado |
|---|---|---|---|
| 1 | Verdadero | Verdadero | Aprueba préstamo |
| 2 | Verdadero | Falso | Rechaza préstamo |
| 3 | Falso | Falso | Referir al gerente |
| 4 | Falso | Falso | Rechaza préstamo |
Contamos con cuatro combinaciones posibles, por lo que necesitan ejecutarse cuatro casos de prueba.
- Pruebas de transición de estados: verifica el comportamiento de un sistema mientras transita entre diferentes estados.
Ejemplo: Supongamos que estás probando un rastreador de errores básico. El diagrama de estados es:

Las transiciones disponibles son:
- De Nuevo a En Progreso
- De En Progreso a En Pruebas
- De En Pruebas a Cerrado
- De En Pruebas de regreso a En Progreso
Para lograr cobertura completa, debes asegurarte de que cada transición y estado sea probado al menos una vez.
- Pruebas basadas en experiencia, como las pruebas exploratorias. Este tipo de pruebas consiste en ejecutar pruebas basadas en la experiencia del evaluador con el sistema o con sistemas similares, así como el conocimiento del comportamiento de la aplicación.
Ejemplo: Imagina que estás probando una nueva aplicación de redes sociales. Tu objetivo es explorar la aplicación para encontrar cualquier defecto o problema que deba abordarse.
Durante las pruebas exploratorias, podrías realizar las siguientes acciones:
- Registrarte para crear una nueva cuenta
- Subir una foto de perfil
- Escribir una publicación
- Ver tu propio perfil
- Buscar amigos
- Enviar una solicitud de amistad
- Aceptar una solicitud de amistad
- Dar "me gusta" y comentar en una publicación
Mediante las pruebas exploratorias, realizarías estas acciones de manera no estructurada, sin un plan preestablecido. El foco estaría en encontrar defectos o áreas de mejora en la aplicación.
Si quieres aprender más sobre las pruebas exploratorias, encontré el libro de Elisabeth Hendrickson, Explore It!, realmente útil.
Ventajas y Desventajas de las Pruebas de Caja Negra
Por supuesto, existen ventajas, así como desventajas, al realizar pruebas de caja negra.
Ventajas:
- Permite una evaluación imparcial del producto al centrarse únicamente en sus resultados.
- No se requiere conocimiento del código fuente o implementación interna.
- Ayuda a identificar lagunas en la funcionalidad y problemas relacionados con la experiencia de usuario.
- Puede ser realizado por testers externos al equipo de desarrollo.
Desventajas:
- Preparar el entorno de pruebas y ejecutar los tests puede ser más laborioso
- El control sobre los casos de prueba es limitado
- Algunos escenarios específicos pueden ser difíciles de probar
- Información limitada sobre la causa raíz del fallo
- Pueden omitirse ciertos errores
- Capacidad limitada para evaluar rendimiento y escalabilidad
¿Cuándo Usar Pruebas de Caja Negra?
Las herramientas para pruebas de caja negra pueden utilizarse en cualquier nivel de pruebas. Sin embargo, es mejor utilizarlas en un nivel superior y dejar las pruebas de nivel inferior para las pruebas de caja blanca. Esto significa que, aunque pueden usarse para probar a nivel de unidad, la metodología de caja negra es más apropiada para pruebas de sistema y pruebas de aceptación.
Las técnicas de caja negra pueden usarse para pruebas funcionales y no funcionales (como pruebas de rendimiento, usabilidad y accesibilidad).
También deben aplicarse a funcionalidades recién implementadas, o los casos de prueba existentes identificados a través de estas técnicas pueden ejecutarse durante pruebas de regresión.
¿Qué Son las Pruebas de Caja Blanca?
Las pruebas de Caja Blanca (a veces conocidas como pruebas de caja clara, caja de cristal, basadas en el código o pruebas estructurales) son un método de prueba que se centra en el funcionamiento interno de la UAT.
Enfoques de las pruebas de caja blanca:
- Cobertura de sentencias: todas las sentencias (líneas de código) del código fuente se ejecutan al menos una vez. La fórmula para calcular la cobertura es:
Cobertura de sentencias = (Número de sentencias ejecutadas / Total de sentencias en el código fuente) * 100
Ejemplo: Supongamos que tenemos el siguiente código:
if(condition1 or condition2)) {
print(“test 1 OK”)
}
else {
if(condition3) {
print(“test 2 OK”)
}
}
- Para una cobertura de sentencias total, hay que recorrer cada línea de código al menos una vez. Esto significa que se requieren varias pruebas:
- condition1=true condition2=false, lo que imprimirá “test 1 OK”
- condition1=false, condition2=false y condition3=true, lo que imprimirá “test 2 OK”.
- Cobertura de ramas: en esta técnica, los escenarios de prueba cubren todas las ramas del grafo de flujo de control. Los posibles resultados verdaderos y falsos de cada condición se cubren al menos una vez. La fórmula usada para la cobertura de ramas es:
- Cobertura de ramas = (Número de ramas ejecutadas / Total de ramas en el código) * 100
- Ejemplo: Para el mismo código, aunque la cobertura de sentencias es del 100%, no todas las posibles ramas están cubiertas. Necesitarás una prueba adicional donde:
- condición1=false, condición2=false, condición3=false - de esta manera, también cubrimos el camino falso en el segundo if. En este caso de prueba, no debería imprimirse nada,
- Cobertura de condiciones: una técnica exhaustiva donde se prueban todos los caminos posibles. Garantiza que cada camino de la aplicación esté cubierto por al menos una prueba. Es especialmente útil para aplicaciones complejas. Ejemplo: Para el código anterior, necesitamos una prueba más para lograr una cobertura total de condiciones:
- condición1=false, condición1=true, que tendrá el mismo resultado que la primera prueba, pero cubre una condición diferente para alcanzar el resultado.
Ventajas y desventajas de las pruebas de caja blanca
Veamos las ventajas y desventajas de las pruebas de caja blanca.
Ventajas:
- Permite encontrar errores al inicio del ciclo de vida del desarrollo de software
- Evalúa la estructura interna del código.
- Verifica la cobertura y la lógica del código.
- Mejora el conocimiento de la base de código.
- Puede utilizarse en pruebas de rendimiento y escalabilidad.
Desventajas:
- Funciona mejor en niveles bajos de pruebas
- Requiere buen conocimiento del lenguaje de programación del sistema
- Pruebas limitadas desde la perspectiva del usuario final
- Pueden pasarse por alto escenarios del mundo real
Cuándo usar las pruebas de caja blanca
Las pruebas de caja blanca se adaptan mejor a los niveles más bajos, como las pruebas unitarias y de integración. Esto ayuda a identificar errores y defectos desde etapas tempranas del proceso de desarrollo. Ejecutar este tipo de pruebas después de cada implementación es una buena idea, especialmente cuando se trabaja en un entorno CI/CD.
Las pruebas de caja blanca pueden utilizarse para probar la funcionalidad, pero también sirven para descubrir vulnerabilidades en el sistema, algo difícil de conseguir con técnicas de caja negra.
Pruebas de caja negra vs caja blanca: Resumen
Veamos las diferencias clave entre las pruebas de caja negra y las de caja blanca:
| Pruebas de caja negra | Pruebas de caja blanca |
| No se necesita conocimiento sobre el funcionamiento interno. | Se basa en un buen conocimiento del código del sistema. |
| Generalmente realizadas por el equipo de QA. | Usualmente realizadas por los desarrolladores. |
| Se enfoca en el comportamiento del sistema. | Se enfoca en la lógica y la implementación del software. |
| Técnicas incluyen: Particiones de equivalencia Análisis de valores límite Tabla de decisión Transición de estado | Técnicas incluyen: Cobertura de sentencias Cobertura de ramas Cobertura de condiciones |
| Los escenarios pueden ejecutarse manual o automáticamente. | Suele realizarse mediante pruebas automatizadas. |
| Mejor para los niveles superiores de pruebas. | Funciona mejor en los niveles inferiores de pruebas. |
| Prueba desde la perspectiva del usuario final. | Prueba desde una perspectiva técnica. |
Pero no olvidemos que, aunque ambos enfoques tienen ventajas y desventajas, debemos utilizarlos ambos en nuestro proceso de pruebas para lograr una buena cobertura y detectar los defectos más importantes.
Conclusiones
Las pruebas de caja negra y caja blanca son dos enfoques distintos, y cada uno sirve para necesidades diferentes durante el proceso de desarrollo. Mientras que las pruebas de caja blanca suelen ser realizadas por los desarrolladores y se aplican en niveles bajos, y las pruebas de caja negra se llevan a cabo por el equipo de QA en niveles más altos, funcionan mejor cuando se utilizan juntas.
Si te ha gustado este artículo, suscríbete al boletín y recibe todos los artículos nuevos sobre pruebas y aseguramiento de la calidad.
