Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Las pruebas de calidad sobre una aplicación informática se pueden dividir siguiendo diversos
criterios, y uno de ellos es según la accesibilidad que se tenga sobre los elementos del sistema a
evaluar. Es allí donde entran en juego dos conceptos muy conocidos por los profesionales de
seguridad informática: caja blanca y caja negra... incluso la caja gris como punto intermedio entre
ellas.
Fuente: http://www.softwaretestingnet.com/2009/10/black-box-and-white-box-testing.html
Cuando nos referimos a pruebas de caja blanca hablamos de pruebas que están fuertemente ligadas
al código fuente. Para realizar la batería de test en primer lugar habremos inspeccionado el código
fuente y analizado todos los posibles flujos de ejecución de la aplicación, cerciorándonos en cada
caso de que los resultados obtenidos sean los esperados.
Es por esto que se dice que estas pruebas están fuertemente ligadas en una implementación en
concreto, ya que si ésta se modifica, por regla general las pruebas tendrán que ser modificadas y/o
rediseñadas.
Fuente: http://www.calidadysoftware.com/testing/pruebas_unitarias1.php
1
Como puede apreciarse en la imagen de arriba, los "testers" tendremos la posibilidad de observar
el funcionamiento de los diversos componentes (óvalos) y probarlos adecuadamente, además de
poder verificar las dependencias, interfaces y flujos de comunicación existentes entre ellos (flechas).
Llegado a este punto suele surgir una pregunta... ¿Quién debería encargarse de hacer las
pruebas? Lo más recomendable sería que sea la persona del equipo que mejor conozca el lenguaje
de programación en el que se haya desarrollado el proyecto, además que debería estar
familiarizado con las herramientas de depuración y pruebas útiles para ese entorno.
En la actualidad existen una gran cantidad de herramientas que apoyan la labor del analista de
pruebas, como por ejemplo, las soluciones incluidas en el paquete "Mercury Interactive Software
Test Tools" u otras como las bibliotecas de JUnit, NUnit para C#, CPPUnit, etc.
Esto deja en claro que dependiendo del lenguaje que se esté utilizando se pueden conseguir
herramientas nativas o adaptadas a dicho lenguaje y además estas herramientas facilitan en gran
medida el desarrollo de pruebas, la elaboración de casos de prueba, seguimiento de errores, etc.,
de forma que se pueda llevar un proceso lo más ordenado y completo posible.
Son diferentes los criterios que se toman al respecto, ya que en realidad se puede aplicar a cualquier
nivel (unidad, integración o sistema)... Sin embargo, comúnmente se suele aplicar modularmente a
unidades funcionales con el objetivo de inspeccionar y verificar el comportamiento de cada uno de
los elementos antes de empezar su integración dentro de un producto software como tal. Una vez
que se tienen probados todos los elementos por separado, se pasa a realizar una prueba más
general después de haber pasado una fase de integración, donde se comprueban los flujos
existentes entre las diferentes unidades funcionales. Este criterio vuelve a ser válido si se tratan de
sistemas completos donde se busca en código abierto comprobar la comunicación entre todos los
subsistemas que componen un proyecto.
Si quisiéramos brindar un caso práctico sobre el uso de pruebas de caja blanca, podríamos pensar
en un sistema de revisión de código como Gerrit (sistema de integración continua).
2
Ciclo de control de desarrollo de software con caja blanca
Si tenemos un ciclo de desarrollo donde los programadores van incluyendo cambios sobre un
proyecto base, tarde o temprano surgirá la necesidad de que exista de por medio una persona que
evalúe la calidad y validez del código que se está subiendo al repositorio principal. No está de más
recordar que esta persona tendrá acceso al código fuente que va a auditar en cada momento.
En la figura anterior, hemos enmarcado en azul la acción que realizaría un tester para realizar una
inspección de código tras recibir una nueva actualización por parte de los desarrolladores. En este
caso, si el evaluador considera que el código es correcto y funcional aceptará el cambio y este pasará
a ser incluido como parte del proyecto final (en un repositorio centralizado). En caso contrario se
pedirá una rectificación o "patch set" para que el cambio que se pretendía introducir sea válido tras
la corrección (no se puede dar por válido un cambio tras una rectificación sin antes volver a analizar
el código fuente del cambio).
Otro entorno donde comúnmente se utilizan las pruebas de caja blanca es en las auditorías de
seguridad de una aplicación web, donde el cliente proporciona el código fuente de su aplicación
con el fin de que encuentre el mayor número de fallos. En estos casos lo primero que se hace es
comprobar el uso de buenas prácticas de seguridad incluidas en diversas guías de seguridad y
manuales especializados, ejecución de herramientas automatizadas para el escaneo de
vulnerabilidades... Tras esto también se realiza un procedimiento manual para verificar la validación
de campos de entrada, control de usuarios, controlar la ejecución de código externo, filtraciones de
información interna a través de metadatos o comentarios en el código fuente (con especial atención
a cuando se hace uso de código de terceros), etc.
3
Pruebas de caja negra
Su definición es un poco más sencilla, ya que conociendo una función específica para la que fue
diseñado el producto, se pueden diseñar pruebas que demuestren que esa función está bien
realizada solamente a través de su interfaz software, panel de ejecución, etc. Es decir, de la función
que desempeña la aplicación, actuando sobre ella como una caja negra, proporcionando unas
entradas y estudiando las salidas para ver si concuerdan con las esperadas.
En la próxima oportunidad entraremos de lleno en las pruebas unitarias, que son consideradas un
punto clave a la hora de desarrollar. Se trata de pruebas que se realizan paralelamente al desarrollo
y son creadas por los propios programadores como parte de un buen proceso de desarrollo de
aplicaciones informáticas.