Pruebas de caja blanca

Las pruebas son esenciales en el desarrollo de software para garantizar la entrega de productos de software de alta calidad y sin errores. Los probadores utilizan diversas técnicas de prueba de software para identificar diversos problemas, fallos y errores en los productos de software. Una de ellas es la prueba de caja blanca. Se ocupa de la evaluación de la estructura interna del software y de los detalles de implementación.
En este artículo, trataremos los aspectos básicos de las pruebas de caja blanca.
- ¿Qué es la prueba de caja blanca?
- Características
- ¿Qué se verifica en las pruebas de caja blanca?
- ¿Cómo realizar pruebas de caja blanca?
- Ejemplo de prueba de caja blanca
- Técnicas de pruebas de caja blanca
- Tipos de pruebas de caja blanca
- Ventajas e inconvenientes de las pruebas de caja blanca
- Beneficios
- Desventajas
- Herramientas de prueba de caja blanca
- La diferencia entre las pruebas de caja blanca y de caja negra
- Conclusión
¿Qué es la prueba de caja blanca?
La prueba de caja blanca es una técnica de prueba de software que comprueba el diseño interno del sistema, la estructura del código fuente, las estructuras de datos utilizadas y los detalles de funcionamiento. Su principal objetivo es mejorar el diseño del software, el flujo de E/S, la usabilidad y la seguridad. También se llama prueba transparente, prueba estructural y prueba de caja de cristal.
Poner en práctica esta técnica de prueba requiere que los probadores estén familiarizados con el código del sistema, su arquitectura y los detalles de implementación. Basándose en estos conocimientos, crean casos de prueba y los ejecutan para verificar la corrección del sistema a nivel de código. Por lo tanto, estas pruebas también se denominan pruebas basadas en el código.
En general, los desarrolladores realizan pruebas de caja blanca. Tener una comprensión completa del código fuente y del funcionamiento interno del software. En algunos casos, sin embargo, también pueden realizarla expertos en control de calidad (QA) y probadores que entiendan el código complejo.
Esta técnica de prueba se denomina «Caja Blanca» porque los desarrolladores o probadores observan el funcionamiento interno del sistema desde fuera de la caja.
Se aplica en los dos primeros niveles de las pruebas de software: pruebas unitarias y pruebas de integración. Las pruebas unitarias verifican cada módulo de software por separado. A continuación, las pruebas de integración conectan lógicamente los módulos sometidos a prueba y comprueban su interacción o comunicación.
Características
- Acceso al código fuente: Las pruebas de caja blanca proporcionan acceso al código fuente del software. Esto ayuda a verificar las funciones y módulos individuales.
- Análisis de la cobertura del código: La cobertura del código es una métrica que determina la cantidad de código ejecutado durante las pruebas. Las pruebas de caja blanca analizan la cobertura del código y revelan las áreas no probadas del código fuente.
- Detección de errores lógicos: ayuda a identificar errores lógicos como bucles infinitos y sentencias condicionales incorrectas.
- Optimización del código: Revela problemas de rendimiento, áreas de código que necesitan mejoras y otros problemas. Los desarrolladores o probadores trabajan para solucionar estos problemas y optimizar el código fuente.
- Pruebas de seguridad: los desarrolladores o probadores tienen acceso al código fuente del software y conocen su funcionamiento interno. Por tanto, pueden identificar vulnerabilidades de seguridad.
¿Qué se verifica en las pruebas de caja blanca?
Las pruebas de caja blanca en las pruebas de software evalúan el código fuente del software para verificar los siguientes parámetros:
- Vulnerabilidades internas de seguridad.
- Cada objeto, función y declaración de código fuente individualmente.
- Funcionalidad de los ciclos condicionales.
- Vías de código corruptas, incompletas y mal estructuradas.
- Flujo de entrada y salida.
En resumen, esta técnica de prueba verifica el flujo de trabajo del software. Consiste en proporcionar una serie de datos de entrada y comparar los resultados esperados y los reales. Si la salida real no coincide con la salida esperada, se produce un error o fallo.
¿Cómo realizar pruebas de caja blanca?
Generalmente, los desarrolladores o probadores verifican las aplicaciones utilizando esta técnica de prueba de software en dos pasos:
- Análisis del código fuente: el paso básico es comprender y analizar el código fuente de la aplicación. Los probadores o desarrolladores, independientemente de quién realice las pruebas, deben tener un conocimiento detallado del funcionamiento interno de la aplicación y de la estructura del código fuente. Además, deben considerar la aplicación de prácticas de codificación seguras, manteniendo la seguridad como factor primordial.
Esto les ayudará a crear casos de prueba eficaces para descubrir posibles vulnerabilidades de seguridad y garantizar el máximo porcentaje de cobertura de las pruebas.
- Crear y ejecutar casos de prueba: los probadores o desarrolladores crean y ejecutan varios casos de prueba pequeños para probar procesos de aplicación individuales. Esto garantiza que el código fuente tenga el flujo y la estructura correctos. Pero este paso requiere un conocimiento extremadamente detallado del código fuente. Por lo tanto, normalmente la llevan a cabo los desarrolladores.
Ejemplo de prueba de caja blanca
Ahora sabemos que el objetivo de las pruebas de caja blanca es verificar la estructura del código, como las sentencias de bucle, las sentencias condicionales, las ramas de decisión, etc. Lo entenderemos con un ejemplo sencillo:
Prueba (a, b) { int n; si (n % 2 ==0) { print("Número impar") } si no { print("Número impar") } }
Para verificar este código, tenemos los dos casos de prueba siguientes:
- n = 25
- n = 50
Para el primer caso de prueba, n = 25, no se aplica la condición «si». Por lo tanto, el flujo del programa pasa al bloque «else» e imprime la declaración que contiene. En el segundo caso de prueba, n = 50, la condición «si» es verdadera y se ejecuta la declaración que contiene.
De este modo, las pruebas de caja blanca recorrían cada línea del código fuente de la aplicación y descubrían posibles fallos a nivel de código.
Técnicas de pruebas de caja blanca
Los distintos tipos de técnicas de prueba de caja blanca son los siguientes:
1. Cobertura de la declaración
Esta técnica requiere que repases y pruebes cada declaración del código fuente al menos una vez. Como resultado, se ejercita todo el código fuente.
La cobertura de sentencias determina el porcentaje de código fuente que ejercitará un determinado conjunto de casos de prueba. La fórmula para cubrir las declaraciones es
Cobertura de declaraciones = (número de declaraciones realizadas / número total de declaraciones) * 100
2. Cobertura de decisiones/cobertura de sucursales
El mejor ejemplo de rama (punto de decisión) en programación es la sentencia «si». Tiene dos ramas: Verdadero y Falso. La técnica de cobertura de ramas garantiza que cada rama del código fuente se ejecute al menos una vez.
Por cobertura de ramas se entiende el porcentaje de ramas o puntos de decisión ejecutados durante las pruebas.
Cobertura de ramas = (número de ramas implementadas / número total de ramas) * 100%
3. Cobertura de condiciones
La prueba de condiciones consiste en probar cada condición para obtener resultados tanto VERDADEROS como FALSOS. Por tanto, para obtener una cobertura estatal del 100% es necesario aplicar cada condición tanto para los resultados VERDADEROS como para los FALSOS. Para n condiciones tendremos 2n guiones de prueba.
El objetivo principal de la cobertura de condiciones es determinar la salida de cada condición en el código fuente. Sin embargo, sólo comprueba las condiciones con operandos lógicos cuyo resultado sea verdadero o falso.
4. Pruebas multicondición
Su objetivo es probar todas las combinaciones posibles de cada estado de la rama. Vamos a entenderlo con un ejemplo.
si (A||B) imprimir C
Los casos de prueba para el código anterior serán
A=TRUE, B=TRUE
A=VERDADERO, B=FALSO
A=FALSO, B=VERDADERO
A=FALSO, B=FALSO
Nuestro ejemplo tiene 2 condiciones -A y B- y 4 casos de prueba. Si hubiera 3 expresiones, el número de casos de prueba sería 8.
Por tanto, para una cobertura del 100% tendremos 2n guiones de prueba. Esto es muy agotador y es muy difícil conseguir una cobertura del 100%.
5. Pruebas de trayectoria
La prueba de rutas garantiza que todas las rutas posibles del código fuente se ejecuten al menos una vez. Consiste en crear un diagrama de flujo de control utilizando el código fuente o un diagrama de flujo. Después, determina la complejidad ciclomática, que se refiere a los caminos independientes. Así, los probadores crean casos de prueba mínimos para esas rutas independientes.
Cobertura del viaje = (número de viajes realizados / número total de viajes del programa) x 100 %.
6. Comprobación de los ciclos del bucle
Los ciclos son construcciones de programa comunes y se utilizan en la mayoría de los programas grandes. Las pruebas de ciclo son esenciales porque existe una alta probabilidad de que se produzcan errores al principio o al final de un ciclo. Por lo tanto, la realización de pruebas revela errores o fallos en cualquier ciclo concreto. El principal error que se produce en los ciclos son los índices incorrectos.
Tipos de pruebas de caja blanca
He aquí los distintos tipos de pruebas de caja blanca:
Pruebas unitarias: es el primer nivel de las pruebas de software. Comprueba individualmente la corrección de cada módulo de la aplicación, llamado unidad. Garantiza que cada componente funcione como se espera de él.
Pruebas de integración: son posteriores a las pruebas unitarias. Combina los componentes individuales probados lógicamente y confirma la interacción entre ellos. Su objetivo es detectar cualquier error en la interacción de los componentes.
Pruebas de penetración de caja blanca: los probadores tienen pleno acceso al código fuente de la aplicación y a los datos de la red, la IP y el servidor, incluidas las contraseñas y los mapas. El objetivo principal de las pruebas de penetración es detectar áreas del código fuente con puntos débiles de seguridad.
Pruebas de mutación de caja blanca: como su nombre indica, las pruebas de mutación dependen de los cambios. Los probadores realizan pequeñas modificaciones en el código fuente para comprobar que la ejecución de los casos de prueba no revela ningún error. Si los casos de prueba tienen éxito, esto indica un error en el código fuente. Sin embargo, si los casos de prueba fallan, el código fuente no tiene errores.
Ventajas e inconvenientes de las pruebas de caja blanca
Aclaremos ahora las ventajas e inconvenientes de las pruebas de caja blanca.
Beneficios
- Las pruebas de caja blanca son exhaustivas y detalladas porque ejecutan cada línea del código fuente.
- Identifica posibles vulnerabilidades ocultas, fallos y vulnerabilidades de seguridad. Arreglarlos requiere eliminar algunas líneas de código fuente, lo que conduce a la optimización del código.
- Garantiza que el código fuente se ajusta a las normas de codificación y optimiza el rendimiento.
- Aunque no se disponga de una GUI, las pruebas comienzan al principio del ciclo de vida de desarrollo del software (SDLC).
- Los casos de prueba se automatizan fácilmente.
- La transparencia del código fuente ayuda a determinar el tipo exacto de datos de entrada necesarios para las pruebas.
- Los probadores o desarrolladores pueden crear casos de prueba para garantizar la máxima cobertura de las pruebas.
Desventajas
- Las pruebas de caja blanca requieren profundos conocimientos de programación para comprender y analizar el código fuente del sistema y construir casos de prueba en torno a él.
- Se centra principalmente en probar el funcionamiento interno del sistema.
- Las aplicaciones grandes requieren mucho tiempo para las pruebas de caja blanca porque tienen códigos fuente largos.
- Un pequeño cambio en el código fuente requiere volver a escribir casos de prueba.
- Existe una alta probabilidad de que esto provoque errores de producción.
Herramientas de prueba de caja blanca
Aquí tienes una lista de algunas herramientas de prueba de caja blanca de uso común:
- Veracode: proporciona un conjunto de herramientas que ayudan a identificar y corregir errores en aplicaciones desarrolladas con diversos lenguajes de programación, como .NET, C++, Java, etc. También puede probar aplicaciones de escritorio y móviles para garantizar la seguridad.
- EclEmma: Es una herramienta gratuita de cobertura de código para aplicaciones Java. Se diseñó para ejecutar pruebas y analizar los resultados en el banco de trabajo Eclipse.
- JSUnit: JSUnit forma parte de JUnit, un marco de pruebas unitarias para aplicaciones Java. JSUnit es una herramienta de pruebas unitarias de código abierto para pruebas de JavaScript. Está disponible bajo la Licencia General GNU 2.0.
- NUnit: Es un marco de pruebas desarrollado en C# para realizar pruebas basadas en datos en aplicaciones .NET. Admite la ejecución concurrente de pruebas sin ninguna intervención manual.
- CppUnit: También forma parte de JUnit como JSUnit. Está disponible para pruebas unitarias C++.
La diferencia entre las pruebas de caja blanca y de caja negra
La siguiente tabla destaca las principales diferencias entre las pruebas de armarios blancos y negros:
Pruebas de caja blanca | Pruebas de caja negra |
Requiere conocer la estructura interna y el funcionamiento de la aplicación. | No se requiere ningún conocimiento interno de la aplicación. |
Podemos probar muchos aspectos detallados de la aplicación. | Estamos probando la funcionalidad integral de la aplicación. |
Estas pruebas las realizan desarrolladores o profesionales de control de calidad con buenos conocimientos de programación y arquitectura de aplicaciones. | De las pruebas de caja negra se encarga un equipo independiente de control de calidad. |
Se aplica a los niveles inferiores de las pruebas: pruebas unitarias y pruebas de integración. | Se aplica a los niveles superiores de las pruebas: las pruebas del sistema y las pruebas de aceptación, en las que tenemos que probar la aplicación en su conjunto. |
Conclusión
La prueba de caja blanca es una técnica de prueba de software que requiere que los probadores conozcan a fondo el funcionamiento interno y la estructura del código de una aplicación. Por tanto, revela lagunas estructurales y de seguridad. El objetivo principal es verificar la funcionalidad y corrección de la aplicación a nivel de código.
Aunque esta técnica de comprobación requiere mucho tiempo y esfuerzo, es la única forma de asegurarte de que compruebas cada línea de tu código fuente. Si se hace correctamente, las pruebas de caja blanca mejorarán mucho la calidad del software.