Cuando se desarrolla un software se pone en marcha un proceso para garantizar la calidad del producto que, entre otras acciones, incluye la realización de pruebas para detectar errores, corregirlos y lograr un resultado lo más perfecto posible.
Dentro de sus posibilidades, por ejemplo, los expertos pueden llevar a cabo pruebas estáticas que no les exigen la ejecución del código de la aplicación y se revisan documentos con pruebas de escritorio. Para las pruebas dinámicas, en cambio, sí se necesita ejecutar la aplicación para analizar con precisión cómo se comporta el programa.
Asimismo, es interesante tener en cuenta que existen tanto pruebas automáticas (como las que se manejan por el código y las pruebas de interfaz de usuario) como pruebas manuales.
Y si las clasificamos de acuerdo a aquello que verifican, entonces podemos diferenciarlas entre pruebas funcionales (como las pruebas de integración, las pruebas unitarias, las pruebas de sistema, las pruebas de componentes y las pruebas de regresión) y las pruebas no funcionales (como lo son, entre otras, las pruebas de carga, las pruebas de seguridad, las pruebas de rendimiento, las pruebas de compatibilidad y las pruebas de portabilidad). El enfoque de cada una de ellas, por otra parte, nos brinda la posibilidad de presentarlas, según corresponda, como pruebas de caja blanca (o de caja de cristal, focalizadas en las particularidades procedimentales del producto, donde adquieren relevancia las pruebas de bifurcación, de flujo de datos, de caminos básicos y de flujo de control) y como pruebas de caja negra (centradas en la interfaz para evaluar cómo se comporta el sistema de manera externa).