> For the complete documentation index, see [llms.txt](https://elguerre.gitbook.io/de0an/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://elguerre.gitbook.io/de0an/capitulo-6-la-construccion.-testeando-desde-el-principio/tipos-de-pruebas.md).

# Tipos de pruebas

Las pruebas son de diferentes tipos y pueden ser implementadas en etapas o momentos diferentes del ciclo de vida del desarrollo. Se clasifican atendiendo a su ejecución, como: **manuales** o **automáticas**, o también, atendiendo a si requieren o no que la aplicación se ejecute, en cuyo caso, pueden ser **dinámicas** o **estáticas**. Además, todas ellas se apoyan en varias técnicas o métodos:

* Caja negra. Estudian el comportamiento externo de un elemento o módulo. Analizando las entradas que recibe y las salidas esperadas, pero no se tiene en cuenta su funcionamiento interno.
* Caja blanca. Al contrario que las de caja negra, estudian el comportamiento interno del elemento o módulo analizando las funciones internas del mismo.
* Incrementales.
  * De arriba abajo (o *top-down*). Formulan un resumen del sistema sin especificar detalles. Cada parte del sistema, se refina diseñando con mayor detalle.
  * De abajo arriba (o *bottom-up*). Se diseña con la ayuda de "cajas negras" que hacen más fácil cumplir requisitos, aunque estas cajas negras no expliquen en detalle los componentes individuales
* Funcionales. Aseguran que el software cumple los requisitos. Se basan en la ejecución, revisión y retroalimentación de las funcionalidades previamente diseñadas que buscan evaluar cada una de las opciones con las que cuenta el software o aplicación.

En base a estos criterios, definiremos los siguientes niveles de pruebas

* Unitarias. Detectar errores en los datos o la lógica, durante la fase de desarrollo utilizando técnicas de caja blanca.
* Integración. Detectar errores de interfaces y relaciones entre componentes, durante la fase de desarrollo utilizando técnicas de: caja blanca, de abajo arriba y de arriba abajo.
* Funcional. Detectar errores en la implementación de requisitos, durante la fase de desarrollo utilizado técnicas de prueba funcional.
* Sistema. Detectar errores en el cubrimiento de requisitos, durante la fase de desarrollo mediante técnicas de prueba funcional.
* Aceptación. Detectar errores de implementación del sistema, durante la puesta en producción utilizando técnicas de prueba funcional. En esta fase intervienen, programadores, testadores y el usuario final o cliente.

Existen otros muchos tipos de pruebas: de componentes, de humo, alfa, beta, de aceptación y de regresión, de compatibilidad, de seguridad, de carga, de usabilidad, de rendimiento, de internacionalización y localización, de escalabilidad, de mantenibilidad, etc.

A lo largo del capítulo prestaremos especial atención a las pruebas unitarias automáticas e incluso automáticas de interfaz de usuario, finalmente las incluiremos en las compilaciones (o builds), para así, conseguir un automatismo completo.

Para obtener más detalle sobre los tipos de pruebas, podemos consultar la página: <http://es.wikipedia.org/wiki/Pruebas_de_software> .
