Es el testing sobre el código fuente de la aplicación, y en consecuencia, sobre los diferentes algoritmos y estructuras de datos utilizados.
Básicamente, el tester selecciona distintos valores de entrada para examinar cada uno de los posibles flujos de ejecución del programa y cerciorarse de que se devuelven los valores de salida adecuados. Al estar basadas en una implementación concreta, si ésta se modifica, por regla general las pruebas también deberán rediseñarse.
Aunque las pruebas de caja blanca son aplicables a varios niveles —unidad, integración y sistema—, habitualmente se aplican a las unidades de software. Su cometido es comprobar los flujos de ejecución dentro de cada unidad (función, clase, módulo, etc.) pero también pueden testear los flujos entre unidades durante la integración, e incluso entre subsistemas, durante las pruebas de sistema.
Ahora bien, para realizar este tipo de testing, tendremos que tener las siguientes habilidades:
- conocimientos de programación
- conocimientos del framework de desarrollo
- conocimiento funcional para poder entender el objeto de determinadas clases y métodos.
Hay diversas técnicas que se pueden aplicar, además de las principales que se enuncian en todo material teórico, como ser:
- Cobertura
- Mutation Testing
- Fault Injection
- Análisis Estático de código
Técnica: de Cobertura
Se basa en verificar que todos los caminos lógicos de la aplicación se alcanzan en función de los diferentes valores de entrada de los parámetros. Básicamente este tipo de pruebas se automatizan con la ejecución de las Pruebas Unitarias (Unit Testing).
Técnica: de Mutation Testing
Se basa en realizar ligeras modificaciones en el programa que darían lugar a un comportamiento anómalo del mismo (resultados distintos) y verificar si la estrategia de testing utilizada es capaz de detectar estos cambios. (p.e. eliminando sentencias). El aspecto más que importante a tener en cuenta en esta técnica es que hay saber elegir muy bien qué modificar, es decir cómo realizar la mutación, para provocar un comportamiento diferente. Nota: Se la considera como parte de la técnica «de Fault Injection».
Técnica: de Fault Injection
Se basa en utilizar la técnica de Code Insertion Testing, en tiempo de compilación, con la cual se introducen nuevas sentencias que provocan un error o un comportamiento anómalo en el sistema. No obstante, la Fault Injection también se aplica en tiempo de ejecución, como el hecho de provocar determinados fallos o excepciones del sistema que permitan estudiar el comportamiento del sistema en esos casos.
Técnica: de Análisis Estático de código
Se basa en evaluar (directa o indirectamente) la deuda técnica del software o lo que es lo mismo, evaluar el grado de mantenibilidad del sistema. Esta última característica (mantenibilidad) es un item al que no se le suele prestar la debida atención, y que es importante considerarlo ya que todo sistema crece y se va modificando. No hay que olvidarse que un sistema con una deuda técnica elevada, será más propenso a tener errores.
Fuentes consultadas:
- http://jummp.wordpress.com/2011/05/21/testing-de-caja-blanca-white-box-testing/
- http://es.wikipedia.org/wiki/Pruebas_de_caja_blanca
- https://pixabay.com/es/photos/cardboard-box-blanco-package-5324172/