Conceptos Básicos de Pruebas Automáticas

Vamos a estudiar los conceptos básicos y propiedades importantes de las pruebas automáticas.

Primero repasamos el concepto de prueba. De acuerdo con la RAE, una prueba es un “Ensayo o experimento que se hace de algo, para saber cómo resultará en su forma definitiva.” Esto quiere decir que la finalidad de hacer una prueba es conocer el resultado de un conjunto de acciones.

Cuando escribimos software, es para un propósito, típicamente para resolver un problema. Por ende, es natural que luego de escribir el software queramos comprobar que resuelve el problema que queremos que resuelva. Para eso recurrimos a probar el software. ¿En qué consiste eso de probar el software?

Probar el software es utilizarlo para ver que funcione. Esta prueba va a variar según el tipo de software, pero de un modo u otro, para probar un software debemos utilizarlo. Ya sea una página web, una aplicación móvil, una aplicación de consola, o un web service, probar la aplicación implica correrla en algún dispositivo y usarla.

El problema es el siguiente, salvo aplicaciones triviales, las aplicaciones del mundo real tienden a resolver varios problemas, tienen muchas opciones, y para probar el software debidamente, deberías de probar todas las funcionalidades de dicho software. Sin embargo, esto es muy tedioso y propenso a errores. Probar todas las funcionalidades de un software podría llevar largas horas o días. Y al tiempo que lo hacemos, es posible que nos olvidemos de hacer ciertas pruebas.

Estas dificultades se pueden superar realizando pruebas automáticas.

Pruebas Automáticas

Si una prueba es un ensayo que se hace de algo para saber cómo resultará en su forma definitiva, entonces una prueba automática consiste en automatizar este ensayo. Es decir, una prueba automática es un software que prueba nuestro software.

Una de las principales ventajas de las pruebas automáticas es que ellas prueban todo lo que le digamos que prueben, todas las veces que queramos. Esto es importante porque nos da la confianza de poder cambiar código de nuestro software y saber que, pulsando un botón, podemos probar de manera automática nuestra aplicación para ver si todo sigue funcionando correctamente. ¿Te ha pasado que tienes un software que funciona, luego haces un cambio en el código, y la aplicación deja de funcionar? Pues con las pruebas automáticas puedes descubrir estos fallos de una manera muy rápida.

Hay ciertas cualidades que es importante procurar que todas nuestras pruebas tengan. A continuación, destacamos estas cualidades:

  • Una buena prueba es razonablemente consistente. La idea es que el resultado de una prueba solamente variará cuando el software cambie. Si corremos una prueba, y esta es exitosa, y, sin hacer ningún cambio en el software, volvemos a hacer la misma prueba, esta nuevamente debería de ser exitosa. Sin embargo, existen ocasiones donde pueden ocurrir variaciones en el resultado de la prueba sin que el software haya cambiado, esto puede suceder cuando se depende de un servicio externo para la prueba, como un web service, por ejemplo.
  • Una buena prueba no depende de otra prueba. Las pruebas deben ser independientes unas de otras. Nunca debe ser el caso que para que la prueba B funcione deba ser ejecutada posterior a la ejecución de la prueba A.
  • Una buena prueba no realiza cambios externos. Dentro de lo posible, una prueba no debe realizar cambios en el sistema, debe de probar y dejar las cosas como estaba. En algunos casos esto no es tan viable y se acepta cierta flexibilidad. Por ejemplo: Cuando vamos a hacer pruebas con una base de datos, no es viable que cada prueba automática cree y destruya su propia base de datos. En este caso podemos ser flexibles, y que se construya una base de datos durante la corrida de las pruebas, y que dicha base de datos sea destruida al finalizar la ejecución de todas las pruebas.

Típicamente una prueba automática es una función la cual prueba alguna parte de nuestra aplicación. Si por ejemplo tienes un software de ventas, un ejemplo de una prueba automática podría ser una función que pruebe la parte de tu aplicación donde se crea un producto; otra prueba automática podría ser una función que pruebe la parte del pago de los productos que quiera el usuario final comprar. A un conjunto de pruebas automáticas le llamamos suite de pruebas.

Una prueba automática suele dividirse en 3 partes o etapas: Preparar, probar y verificar:

  • Preparar: La primera parte de una prueba trata de preparar el ambiente para poder desarrollar la prueba. Esta preparación puede consistir en: Generar la data de prueba, generar objetos de pruebas, entre otros.
  • Probar: En esta segunda etapa ejecutamos la funcionalidad de nuestro software la cual queremos probar. Esta prueba puede consistir en: ejecutar una función, disparar un proceso que interactúe con una página web como si fuera un usuario, etc.
  • Verificar: En esta última etapa queremos asegurarnos de que el obtuvimos de la prueba el resultado esperado.

Vamos a ver un ejemplo de una prueba automática a nivel conceptual. Supongamos que trabajamos para un banco, y tenemos la tarea de probar un software que hace transferencias bancarias entre dos cuentas. ¿Cuál sería una manera de preparar una prueba automática que verifique una transferencia exitosa? Recordamos las 3 etapas: Preparar, probar y verificar:

  • Preparación: Para probar una transferencia entre dos cuentas, necesitamos dos cuentas, al menos una de ellas con saldo. Por tanto, en esta etapa debemos preparar dos cuentas ficticias. Quizás necesitemos otras cosas, como una base de datos, ya sea real o “ficticia” (en una futura entrada hablamos de esto).
  • Probar: Dado que ya tenemos las dos cuentas, ahora necesitamos ejecutar la función la cual realiza la acción que queremos probar. Para nuestro caso, esta función sería una función que tome como parámetros las dos cuentas y el monto a transferir.
  • Verificar: Necesitamos una manera de comprobar que efectivamente el dinero pasó de una cuenta a otra, dependiendo de cómo funcione nuestro software, esto quizás lo podamos ver a nivel de las cuentas en la base de datos.

De un modo u otro, las pruebas automáticas que hagas tendrán una estructura similar a la anterior. Sin embargo, no todas las pruebas son iguales, existen pruebas que prueban partes aisladas de tu software, existen otras pruebas que trabajan con distintas partes de tu aplicación de manera simultánea. Es decir, existen varios tipos de pruebas, como son: Las pruebas unitarias, las pruebas de integración, y las pruebas de extremo a extremo. En la siguiente entrada hablaremos acerca de las pruebas unitarias.

Conclusión

Una prueba automática es una función que ejecuta nuestro software para verificar que funcione correctamente. Una típica prueba se divide en 3 etapas: Preparación, prueba y verificación. Existen distintos tipos de prueba, como son: Pruebas unitarias, pruebas de integración y pruebas de extremo a extremo.

Advertisements

One comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s