Actualidad y noticias de Testing con un punto de vista de negocio


geek inside

Pairwise es un método de generación de datos que produce el número mínimo de tuplas que contiene todas las combinaciones de dos campos en una entrada de pruebas (Test Set). Ante una prueba que requiere la generación de datos (casi en todos los casos) podemos elegir distintos métodos para generar los datos de entrada, algunos solo se citan a efectos de demostración:

  • No generar ninguna tupla y por lo tanto no probar la entrada. Este es el caso de 0 esfuerzo en generación de datos. Este escenario no es aceptable desde el punto de vista de Testing.
  • Generar todas las combinaciones posibles. Este caso es potencialmente inmanejable generando lo que se llama una explosión combinatoria.
  • Alguna situación intermedia que minimice el número de casos a probar máximizando su utilidad y eficacia.

Realmente lo que necesitamos es el mínimo eficiente intermedio entre cero esfuerzo y la explosión combinatoria: esta es la misión de Pairwise Testing. Un ejemplo lo clarificará.

Supongamos una pantalla de entrada con 10 campos que, para simplificar, sólo admiten dos valores. 
Para hacer testing exhaustivo necesitaríamos crear un Test Set de 2^10 = 1024 combinaciones posibles.

Utilizando pairwise testing sólo necesitamos 13 combinaciones.

El ahorro frente a la definición de un Test Set exhaustivo es de casi tres órdenes de magnitud.

Pairwise testing se basa en una hipótesis que indica que la mayoría de los errores se causan por interacciones de al menos dos factores y que generando todas la tuplas que cubran el input de dos en dos se logra un valor aceptable de cobertura y eficacia. No obstante, pairwise falla y no garantiza la ausencia de fallos en todas la tuplas consideradas dos a dos.

Gema pairwise en ruby

pairwise es una gema (librería) de ruby que se utiliza para la generación de escenarios de prueba utilizando el método pairwise. Estos escenarios se utilizan en fichas “Scenario Outline” como “Examples”.

Tras su instalación como una gema cualquiera “gem install pairwise” (necesita cucumber y rspec) necesitamos crear un fichero formato yml, a continuación se muestra un ejemplo:

ejemplo.yml  

   Cabello: [Rubio, Moreno]  
   Color: [Rojo, Verde]
   Edad: [Jovén, Viejo] 
   Especie: [Mamifero, Insecto] 
   Forma: [Redonda, Rectángular] 
   Marca: [Lenovo, Apple]
   Tamaño: [Pequeño, Grande]

En este ejemplo vemos 7 campos, que admiten solo dos opciones. En este caso, para hacer testing exhaustivo habría que generar 128 tuplas distintas. Si aplicamos pairwise de ruby:

  • pairwise ejemplo.yml

Obtenemos la siguiente salida:

| Cabello | Color | Edad  | Especie  | Forma       | Marca  | Tamaño  |
| Rubio   | Rojo  | Jovén | Mamifero | Redonda     | Lenovo | Pequeño |
| Rubio   | Verde | Viejo | Insecto  | Rectángular | Apple  | Grande  |
| Moreno  | Rojo  | Viejo | Insecto  | Redonda     | Apple  | Pequeño |
| Moreno  | Verde | Jovén | Mamifero | Rectángular | Lenovo | Grande  |
| Moreno  | Rojo  | Viejo | Mamifero | Rectángular | Apple  | Pequeño |
| Moreno  | Rojo  | Jovén | Insecto  | Rectángular | Apple  | Pequeño |
| Moreno  | Verde | Jovén | Mamifero | Redonda     | Apple  | Grande  |
| Rubio   | Rojo  | Jovén | Mamifero | Rectángular | Apple  | Grande  |
| Moreno  | Verde | Viejo | Insecto  | Rectángular | Lenovo | Pequeño |
| Rubio   | Verde | Viejo | Mamifero | Rectángular | Apple  | Pequeño |

y si todo ha ido bien podemos encontrar cualquier par de entradas de las 7 variables utilizadas en las tuplas devueltas. Utilizando este Test Set podemos tener hasta un 80% más de eficiencia que utilizando un test aleatorio.

Referencias:

Pairwise Testing With Cucumber http://blog.josephwilk.net/ruby/pairwise-testing-with-cucumber.html

Understanding Pairwise Test Generation http://www.conformiq.com/2012/01/understanding-pairwise-test-generation/

Comentarios en: "Pairwise testing, ruby y cucumber" (1)

  1. Hola,

    Me gustaria saber si existe algún curso de Pairwise testing.
    Gracias.

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

A %d blogueros les gusta esto: