¿Qué es una prueba automatizada?

Por definición, una prueba automatizada es una que se ejecuta sin requerir ninguna intervención humana. Cuando una de estas pruebas falla, una alarma debe enviarse indicando que hay un defecto en el sistema. No se debe proseguir con el desarrollo o realizar una entrega a producción.

Las siguientes son tipos de pruebas automatizadas:

pruebas-automatizadas

  1. Las pruebas unitarias confiables son automatizadas ya que no dependen de infraestructura y son repetibles. Esto implica que pueden ejecutarse en cualquier orden y no requieren ninguna configuración previa, como por ejemplo, la instalación de un servidor web o una base de datos.
  2. Pruebas unitarias de base de datos: Estas pruebas ejercitan procedimientos almacenados o vistas que son el punto de entrada de una aplicación hacia las tablas. Si se realizan de manera adecuada, serán una ayuda al desarrollo, sino se volverán inútiles, pues fallarán por motivos inesperados y no solamente por defectos. Note que estas pruebas se ejecutan solamente en una ambiente de desarrollo local, no en ambientes de servidores. Debo enfatizar que estas pruebas asumen un diseño modular, donde el código de la aplicación no accede directamente a las tablas para generar queries o comandos automáticamente (como se realiza con frameworks como EntityFramework o NHibernate). Para que sean confiables, las pruebas deberían cumplir  lo siguiente:
    1. La base de datos y los datos iniciales se encuentran en control de versiones.
    2. La inicialización del esquema y los datos es automatizada.
    3. Las pruebas se ejecutan siempre en el mismo orden, por lo que se detienen cuando hay un solo error.
    4. La base de datos no depende de otras bases de datos.
    5. Se utiliza una framework de Database Unit Tests, tales como las de Visual Studio.
  3. Las pruebas de integración enfocadas: Este tipo de pruebas se ejecutan cada vez que se instala la aplicación en una PC local o en un servidor. Estas verifican que los puntos de integración estén disponibles. Por ejemplo, si se debe hacer una consulta a la base de datos, se debe verificar que haya conexión a la misma. Si se debe utilizar un API para enviar un correo por SMTP, entonces este tipo de pruebas verifica que se pueda iniciar sesión en el servidor SMTP. Es decir, estas pruebas verifican que los puntos de integración de la aplicación estén disponibles. En caso de cualquier fallo, sabremos con certeza que la aplicación no funcionará correctamente por un error en la configuración de la infraestructura.

Aunque la definición es sencilla, ahora tenemos que examinar algunos tipos de pruebas que aunque son programadas, no son automatizadas.

pruebas-programadas-no-automatizadas

  • Pruebas de webservices (API): Con estas, se verifica que una interface de programación retorne lo esperado.
  • Pruebas de rendimiento: Con estas, se verifica que el tiempo de respuesta de un resultado sea aceptable bajo cierto criterio. Se debe programar momentos en los que la carga de los servidores sea adecuada para que las pruebas tengan credibilidad. Por ejemplo, si se realizarán en un ambiente de pruebas, se debe determinar los tiempos aceptables y determinar la cantidad de usuarios que pueden utilizar el ambiente en el momento de la prueba. Es decir, estas requieren coordinación manual aunque estén programadas.
  • Pruebas de carga: Con estas, verificamos la cantidad de usuarios que pueden utilizar el sistema al mismo tiempo sin afectar los tiempos de respuesta.
  • Pruebas de uso (usabilidad o de funcionamiento de una interfaz gráfica): Al utilizar una interface que está pensada para seres humanos, no podemos tener certeza de que una máquina pueda verificarla. Existe frameworks para realizar pruebas programadas, y su uso debería ser muy enfocado y reducido para que no sean difíciles de mantener.

Los últimos tres tipos son una representación de pruebas que verifican características llamadas “no funcionales”. El lector puede investigar otros tipos, tales como las de seguridad o de compatibilidad.

Teniendo como base las pruebas automatizadas, entonces se podría programar métodos de prueba de estos últimos tipos, pero por la cantidad de elementos que pueden fallar, es recomendable aplicarlas ocasionalmente y manualmente. Es decir, estas pruebas ayudan para que las pruebas manuales puedan realizarse más fácilmente, pero siempre se requiere del ojo de un humano para hacer la verificación. Podría darse el caso que las ejecutemos de manera desatendida, pero cuando fallen nunca tendríamos certeza de un defecto. Siempre se requiere que una persona revise si el error se debió a la prueba y no a un defecto del sistema.

Siempre tendremos el tipo de pruebas manuales. Son las que requieren que un se humano revise “la ubicación correcta de los botones” o “la apariencia agradable” o “la ejecución de todo una secuencia de acciones para realizar un proceso de negocio completo”. La buena noticia es que las pruebas manuales se deben realizar solamente cuando realizamos un cambio que afecte una pieza de código que no esté cubierta por pruebas automatizadas. En otro caso, con solamente ejecutar las pruebas automatizadas con éxito podemos liberar el software a producción. ¿Cuánto ayudaría esto a que sean más rápidos entregando nuestro software? Esta confianza es lo que permite a algunas empresas hacer múltiples liberaciones al día, y con el mínimo riesgo de defectos.

Con esta explicación, quisiera hacer ver que todos los tipos de pruebas son útiles, sin embargo que como toda herramienta, tienen un alcance definido. Cada una puede tener un buen uso y un mal uso. Por esto, la capacitación al personal es clave para que tengamos aplicaciones cubiertas por buenas pruebas que sean confiables y nos ayuden en cada desarrollo.

Si este artículo, le es útil o quiere compartirnos dudas o diferencias, ¡será un gusto recibir sus comentarios!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s