Testing con Máquinas de Estado (3 de 3)

Las máquinas de estado son una herramienta súper útil para un tester, aunque lamentablemente bastante subutilizada en la industria. Eso me llevó a escribir una serie de posts para explicar la técnica de derivación de pruebas a partir de máquinas de estado:

Si bien esta técnica puede usarse en forma manual como lo vimos en post anterior, existen herramientas que facilitan la generación de casos de prueba a partir del modelo de la máquina de estado, asegurando el nivel de cobertura deseado. A continuación veremos cómo podemos utilizar GraphWalker para esto con el fin de entender la ventaja que nos brindan las herramientas. 

Máquinas de Estado con GraphWalker

GraphWalker nos permite diseñar la máquina de estados en formato gráfico y generar automáticamente los casos de prueba para cubrir el modelo en base a diferentes criterios. 

El modelo del ejemplo que presenté en el post anterior representando los dos estados de una lámpara fue creado con el editor que viene incluido en GraphWalker. Para usar este editor te recomiendo revisar el manual de uso de GraphWalker porque al momento de armar el ejemplo, si bien vimos que no es complicado de usar tampoco es tan intuitivo. 

Una vez generado el modelo es posible descargarlo en formato JSON y con esto, la aplicación de GraphWalker nos genera una serie de caminos según el criterio de cobertura elegido. El JSON descargado del ejemplo anterior se ve más o menos así (solo se muestra una parte):

Para todas las opciones y detalles te recomiendo revisar la documentación del producto. Además de lo que vimos acá, la herramienta brinda muchísimas posibilidades más, también útiles para la ejecución de pruebas de forma automatizada

A modo de ejemplo, la siguiente es una salida del programa aplicada sobre la máquina de estados de la lámpara, donde se puede ver la secuencia de pasos que sugiere seguir para poder cubrir todas las aristas. 

  • {“currentElementName”:”Apagada”}
  • {“currentElementName”:”presionar interruptor / enciende lámpara”}
  • {“currentElementName”:”Encendida”}
  • {“currentElementName”:”[hay electricidad] presionar interruptor / apaga lámpara”}
  • {“currentElementName”:”Apagada”}
  • {“currentElementName”:”[no hay electricidad] presionar interruptor / sin efecto”}
  • {“currentElementName”:”Apagada”}

Los distintos niveles de cobertura nos pueden garantizar mayor o menor grado de pruebas. Entonces, para decidir qué cobertura utilizar en cada caso hay que poner en la balanza la criticidad de la funcionalidad probada y el tiempo disponible.

Más sobre GraphWalker

Esta imagen creo que muestra en forma bien simple el concepto de recorrer una máquina de estado, lo cual puede utilizarse para testing “manual” como también para testing automatizado. Lo que está bien interesante de GraphWalker es que permite hacer un puente entre el modelo y código de pruebas, con lo cual podemos “ejecutar” el modelo y así ejecutar pruebas automáticas.

Para entender más sobre este concepto te recomiendo ver algunas charlas de Kristian Karl de Spotify, hay varias que ha dado sobre esto, acá te dejo una de ellas:

Te recomiendo ver este artículo del amigo Aritz Aguila donde también muestra ejemplos de uso de GraphWalker en español, donde podés contar con acceso al código que utilizó en su evaluación.

Cerrando

Espero que con esta serie de artículos más gente se anime a usar esta técnica tan útil y poderosa y que de esta forma todos profesionalicemos cada vez más el trabajo que hacemos en testing.

Me encantaría que te animes a probar la técnica y la herramienta. Si te animás a compartir ejemplos, repositorios donde hayas estado probando la herramienta, dudas o comentarios, será una forma de colaborar más entre todos para aprender y compartir.

Leave a Reply

Your email address will not be published. Required fields are marked *