En las pruebas de software , la prueba de mono es una técnica en la que el usuario prueba la aplicación o el sistema proporcionando entradas aleatorias y verificando el comportamiento, o viendo si la aplicación o el sistema se bloqueará. La prueba de mono se implementa generalmente como pruebas unitarias automatizadas aleatorias .
Aunque el origen del nombre "mono" es incierto, algunos creen que el nombre tiene que ver con el teorema del mono infinito , [1] que establece que un mono que pulsa teclas al azar en un teclado de máquina de escribir durante una cantidad infinita de tiempo casi seguramente escribirá un texto determinado, como las obras completas de William Shakespeare . Algunos otros creen que el nombre proviene de la clásica aplicación de Mac OS "The Monkey" desarrollada por Steve Capps antes de 1983. Utilizaba ganchos de registro para introducir eventos aleatorios en los programas de Mac y se utilizaba para probar errores en MacPaint . [2]
Monkey Testing también está incluido en Android Studio como parte de las herramientas de prueba estándar para pruebas de estrés . [3]
Las pruebas con monos se pueden clasificar en pruebas con monos inteligentes o pruebas con monos tontos .
Los monos inteligentes suelen identificarse por las siguientes características: [4]
A algunos monos inteligentes también se les llama monos brillantes , [ cita requerida ] que realizan pruebas según el comportamiento del usuario y pueden estimar la probabilidad de ciertos errores.
Los monos tontos, también conocidos como "monos ignorantes", suelen identificarse por las siguientes características: [ cita requerida ]
Las pruebas de mono son una forma eficaz de identificar algunos errores predefinidos. Dado que los escenarios probados suelen ser ad hoc , las pruebas de mono también pueden ser una buena forma de realizar pruebas de carga y estrés. La aleatoriedad intrínseca de las pruebas de mono también las convierte en una buena forma de encontrar errores importantes que pueden dañar todo el sistema. La configuración de las pruebas de mono es sencilla, por lo que es buena para cualquier aplicación. Los monos inteligentes, si se configuran correctamente con un modelo de estado preciso, pueden ser muy buenos para encontrar varios tipos de errores.
La aleatoriedad de las pruebas con monos hace que los errores encontrados sean difíciles o imposibles de reproducir. Los errores inesperados encontrados en las pruebas con monos también pueden ser difíciles y requerir mucho tiempo para su análisis. En algunos sistemas, las pruebas con monos pueden durar mucho tiempo antes de encontrar un error. Para los monos inteligentes, la capacidad depende en gran medida del modelo de estado proporcionado, y desarrollar un buen modelo de estado puede ser costoso. [1]
Si bien las pruebas de mono a veces se tratan de la misma manera que las pruebas fuzz [5] y los dos términos generalmente se usan juntos, [6] algunos creen que son diferentes al argumentar que las pruebas de mono se tratan más sobre acciones aleatorias mientras que las pruebas fuzz se tratan más sobre la entrada de datos aleatorios. [7] Las pruebas de mono también se diferencian de las pruebas ad hoc en que las pruebas ad hoc se realizan sin planificación ni documentación y el objetivo de las pruebas ad hoc es dividir el sistema aleatoriamente en subpartes y verificar su funcionalidad, lo que no es el caso de las pruebas de mono.