img
Testing

¿Que son las Pruebas Metamórficas? (Metamorphic Testing)

Nov 22, 2020   Maria Gabriela Tenreiro
   

¿Qué son las Pruebas Metamórficas?

Nunca había escuchado acerca de “Pruebas Metamórficas” hasta entonces. Fue en una conversatorio de Testing, frecuentes  en estos tiempos de pandemia, donde fue mencionado este concepto, dejando en mi  infinidad de interrogantes que decidí despejar y compartir con ustedes. Al investigar sobre el tema me doy cuenta que no es mucho el material disponible a nivel práctico , pero las investigaciones que existen alrededor del tema y su documentación  es tan completa como densa, pero gracias a ella  pude captar y  plasmar la esencia de este enfoque (eso espero).

El concepto de Pruebas Metamórficas fue introducido por  T.Y. Chen (actualmennte profesor de Ingeniería del Software,en Australia) en 1998. Desde entonces, alrededor de 150 investigadores y profesionales internacionales han encontrado grandes beneficios aplicando la técnica en sistemas de la vida real, en campos como Machine Learning, API Testing (caso Youtube y Spotify), compiladores, soluciones gráficas entre otros, logrando detectar un importante número de fallos (bugs), que con métodos tradicionales habría sido imposible concretar. 

De lo tradicional a lo metamórfico

El ciclo tradicional del testing de software,  da inicio  con el análisis de los requerimientos, para realizar  el diseño de los casos de prueba, que a su vez responden al cumplimiento o no de  unos criterios de aceptación (oráculo), y que por lo general  evalúan las salidas derivadas  de una funcionalidad ó componente bajo prueba (resultados). Generalmente, tras la ejecución de casos de prueba, los casos  que resultan Pasados (Passed) son  incluidos en un ciclo de regresión, sin llegar al nivel de cuestionar o escribir casos de prueba adicionales  que validen si realmente el resultado obtenido además de ser el esperado es el correcto. ¿no suena sencillo cierto?.

Imagen 1- Enfoque de pruebas tradicional

A diferencia de la visión tradicional de pruebas de software, las Pruebas Metamórficas vienen a ser un enfoque basado en la construcción derivada de casos de pruebas (casos de prueba derivados)  a partir de un caso de prueba y sus multiples ejecuciones (caso de prueba origen), donde el foco de la validación no son precisamente las salidas producidas por el sistema, sino las relaciones que generan  los casos de prueba derivados del caso de prueba origen.

En esencia, las Pruebas Metamórficas (PM) permiten generar automáticamente casos de prueba para probar un software. Toma como base el uso de Relaciones Metamórficas (MR), que se definen como propiedades presentes o esperadas de un conjunto de entradas y sus correspondientes salidas, para un sistema objeto de pruebas. Esto es, en vez de comparar el resultado obtenido con el resultado actual, compararemos si la salida del caso de prueba origen  y la del caso de prueba derivado cumple o satisface la relación especificada.

Imagen 2- Enfoque de Pruebas Metamórficas

Por ejemplo, dada  una aplicación de reserva de hoteles, nuestro primer caso de prueba sería:

    + PM1 (Caso de Prueba Metamórfico de Origen): Búsqueda de todos los hoteles con rating igual a cinco (5) estrellas

    + RM (Relación Metamórfica): el resultado de la ejecución del caso derivado (PM2) debe estar contenido en el resultado de la ejecución del caso de origen (PM1).

    + PM2 (Caso de Prueba Metamórfico Derivado): Búsqueda de todos los hoteles con rating igual a cinco (5) estrellas, pero que además pertenezcan  al estado de Florida.

En caso de que la relación (RM) establecida sea violada o incumplida, la prueba habría fallado.

Imagen 3- Aplicación de Prueba Metamórfica

Las Pruebas Metamórficas vienen a subsanar  las dificultades que se presentan al probar aquellos sistemas cuya cantidad de salidas  son difíciles de controlar, o bien su naturaleza hace complejo determinar si el resultado obtenido es correcto o no, y por ende de medir y probar. A esto último se le conoce como el problema del oráculo.

Ahora bien,qué es un oráculo en el ámbito de pruebas?

Un oráculo  es un mecanismo  por medio del cual detectamos un problema o fallo, y a la misma vez definimos su solución. En pocas palabras, los oráculos nos llevan a determinar si el resultado de una prueba es correcto o no.

Un oráculo debe cumplir con tres (3) funciones esenciales:

    + Generación de resultados: determina resultados esperados para cada una de las pruebas 

    + Punto de comparación: permite comparar los resultados esperados de os obtenidos.

   + Punto de evaluación: permite  definir si la comparación de resultados es suficientemente acertada para determinar exitosa (pasada)  la prueba.

Pueden ser considerados oráculos: 1) otro sistema (para evaluaciones comparativas), 2) documentaciones, especificaciones, manuales de usuario 3) el conocimiento especializado de un individuo, 4) algoritmos ó scripts de prueba.

Un ejemplo que evidencia la existencia de el problema del oráculo (la ausencia de ello), son las aplicaciones de búsqueda y comparación de vuelos y hoteles. Al realizar una búsqueda con determinados criterios, por ejemplo el precio más bajo y país, es difícil determinar si realmente el resultado trae toda la información relacionada a esos criterios, ó bien si parte de este resultado se repite en una búsqueda  con otros criterios (dado el volumen de información que devuelve el sistema como resultado).

Las Pruebas Metamórficas buscan adaptar las técnicas de prueba tradicionales para poder probar  aquellas funcionalidades que carecen de oráculo, permitiendo autogenerar casos de prueba y construir sus propios oráculos de prueba (criterios) mediante la definición de relaciones metamórficas.

En qué escenario es aplicable la Prueba Metamórfica?

    + En casos donde determinar y evaluar las salidas es inviable (por ejemplo, cuando existe un gran volumen de salidas).

    + Las propiedades y atributos de las salidas son muy generales.

    + Deseas obtener un gran porcentaje de especificidad y un alto nivel de facilidad de validación presente en los casos de prueba.

¿Qué relaciones serían válidas ?

Los autores han introducido seis (6) patrones de relación  que logran capturar al menos las formas más básicas:

  + Equivalencia: La relación entre la salida del caso origen y el caso derivado incluye los mismos items pero no necesariamente en el mismo orden.

    + Igualdad: las salidas incluyen los mismos items en el mismo orden.

    + Sub-conjunto: la salida del caso derivado  es un subconjunto de la salida del caso origen.

    + Disyunción: Las salidas de ambos casos de prueba no poseen items en común.

    + Completitud: La unión de la salida de varios casos derivados  contiene los mismos items que la salida del caso origen.

    + Diferencia: Las salidas se diferencian en específicos sets ó items.

Otro ejemplo al cual refieren las investigaciones , donde se evidencia el problema del oráculo, y  donde es aplicable el enfoque de pruebas metamórficas, son los aplicativos de traducción de idiomas (Google Translate).

 Al realizar la traducción de la frasemujeres cientificas de español a turco, en efecto la traducción se hara efectiva, sin embargo, al no conocer el idioma turco, no tendríamos la certeza de si la traducción  es realmente correcto (problema del oráculo presente).

Para solventar este problema se hace uso de Pruebas Metamórficas donde:

    + PM1 (Caso de Prueba Metamórfico de Origen): Realizar una búsqueda con la frase “científicos ingleses”

    + PM2 (Caso de Prueba Metamórfico de Origen): Realizar una búsqueda con la frase “científicos ingleses”  traducida al idioma turco

   + RM (Relación Metamórfica): Equivalencia, es decir, la salida del TM1 debe ser iequivalente a la salida de la ejecución del TM2, es decir, debe contener los mismos items pero no necesariamente en el mismo orden.

Imagen 4. Salidas  Prueba Metamórfica Origen PM1

Imagen 5. Salidas - Prueba Metamórfica Derivada PM2

Es evidente que las coincidencias son pocas, donde a primera vista se observa  que los resultados  no son equivalentes, por lo tanto la relación especificada ha sido violada, y en consecuencia el resultado es fallido.

También es importante destacar que el establecimiento de Relaciones Metamórficas es de suma importancia  para el éxito en la práctica, y que probablemente para casos similares a éste se debe considerar una nueva  evaluación  de dicha relación, cambiarla y/o ajustarla de ser necesario.

Mis Conclusiones:

  • Las pruebas metamorticas ayudan a plantear escenarios que permiten probar aquellos componentes o sistemas que carecen de conocimiento o herramientas (oráculo) para determinar si sus salidas son correctas ó incorrectas.
  • La definición de las relaciones entre las salidas  producidas por casos derivados y de origen es determinante para el exito de la aplicación de este enfoque.
  • Conocer la aplicabilidad de este enfoque nos puede “salvar la vida” ante proyectos que requieran probar sistemas complejos por naturaleza y que además produzcan gran volumen de salidas, lo que los hace dificiles de probar.
  • Recomiendo altamente seguir investigando acerca de este enfoque de pruebas y su aplicabilidad a casos  reales y cotidianos.

Con amor 💙

💻 Maria Gabriela Tenreiro.



Destacados