Pairwise testing

Tal como lo conté hace unos años en este post, el testing combinatorio debería ser una de las herramientas básicas de todo tester, también conocido como pairwise testing. Digamos que si tenemos 10 variables con 10 valores posibles cada una, no podemos probar todas las combinaciones (son 10.000.000.000. Lo que se plantea con Pairwise es definir el set de pruebas que asegura que cada valor de cada variable se combina al menos una vez con cada otro valor de cada otra variable. Para el ejemplo, podríamos tener una cobertura tan solo con 177 casos de prueba (ejemplo tomado de la explicación de James Bach aquí).

Para dejarlo más claro, no tenemos que llevarlo a algo de 10 variables con 10 valores. Con casos muy simples, que manejan pocas variables y pocos valores, ya podemos observar que la cantidad de ejecuciones que necesitamos serían muchas, por lo que tenemos que intentar encontrar las combinaciones de datos que tienen más valor para el testing, o sea, las que tienen más probabilidad de encontrar errores.

Herramientas para Pairwise Testing

Hace bastante tiempo que vengo recibiendo consultas sobre dónde poder conseguir acceso a CTWeb que era la herramienta que siempre venía recomendado (incluso en la primera edición de mi libro), más que nada porque era producto de la investigación de mis tutores de tesis en la Universidad de Castilla-La Mancha, Macario Polo Usaola y Beatriz Pérez Lamancha. Esta herramienta ya no está disponible online ni se le sigue haciendo mantenimiento (hasta donde yo sé). Por esto es que estuve buscando algunas alternativas para poder sugerir.

Hay una página con un listado muy amplio de herramientas aquí: http://www.pairwise.org/tools.asp

Allpairs (James Bach)

Mi primera aproximación al tema fue hace más de 12 años atrás, usando la aplicación hecha por James Bach llamada Allpairs disponible para bajar en su sitio. Es un simple programa Perl que permite tomar las variables y sus valores de forma simple, ejecutar el script y obtener el resultado de las combinaciones (o sea, de los casos de prueba).

PICT (Microsoft)

Otra herramienta que llegué a probar en su momento es la llamada PICT de Microsoft. Es muy simple de usar, también definiendo las entradas y salidas en formato texto.

La limitación es que está disponible solo para Windows, pero según veo en el repositorio de código, sería posible compilarla en Linux, aunque no lo he probado.

PICT Online

Para mi alegría y sorpresa, hoy me encontré con esta página que ofrece usar PICT de forma online.

Básicamente es lo mismo que ofrecía PICT pero con una interfaz web. Lo que tiene de bueno es que para facilitar el uso y que sea más intuitivo su uso, al acceder ya está cargado un archivo con una entrada, que incluye diferentes variables con valores, e incluso reglas con restricciones las cuales son típicamente muy usadas.

Acá está el código fuente.

Ejemplo de Pairwise testing con PICT online

Imaginemos que tenemos 3 variables para un caso de prueba muy simple, y se seleccionaron valores interesantes para cada variable como muestra el siguiente ejemplo (tomado de la vida real, pero despersonalizado para no involucrar a nadie).

Funcionalidad bajo pruebas: Solicitud de servicio por parte de un cliente.
Variables en juego y conjuntos de valores interesantes:

  • Canal {Presencial, Telefónico, e-mail}
  • Prioridad {Urgente, Alta, Media, Baja}
  • Tipo de Servicio {Adhesión Tarjeta Débito, Adhesión Tarjeta Crédito, Adhesión e-commerce}

El caso de prueba (Presencial, Media, Adhesión Tarjeta Débito) cubre los pares (Presencial, Media)(Presencial, Adhesión Tarjeta Débito) y (Media, Adhesión Tarjeta Débito). La técnica de Pairwise testing implica diseñar un conjunto mínimo de pruebas para cubrir todos los pares posibles. Queda claro que intentar hacer esto manualmente sería una tarea muy costosa.

Sigamos el ejemplo con la herramienta:

Primero ingresamos al sitio y definimos las variables con sus valores interesantes según el formato presentado y presionamos el botón “Generate=>”.

Observar que no se pueden usar tildes y que agregamos dos restricciones para indicar que los pares (e-mail, Urgente) (e-mail, Alta) no los queremos, ya que no se pueden hacer solicitudes por correo electrónico de prioridad alta y urgente.

Si se fijan bien, el resultado consta de 13 casos de prueba, los cuales cubren todos los pares válidos. Si decidiéramos hacer producto cartesianocon todos los valores de prueba interesantes tendríamos un total de 3 x 4 x 3 = 36 casos de prueba. O sea, nos estamos ahorrando la ejecución de 36 – 13 = 23 casos de prueba que, según la teoría de errores considerada, no agregarían valor a nuestro test-set, ya que tienen menos probabilidades de encontrar errores.

Para aprovechar la herramienta es muy importante seleccionar bien los valores interesantes a incluir en nuestras pruebas, así como luego determinar qué pares son inválidos o qué otras reglas de negocio considerar con respecto a los valores. No es lo mismo eliminar casos de prueba que tengan combinaciones inválidas, pues tal vez un mismo caso de prueba cubre varios pares y si eliminamos uno por tener una combinación inválida, podemos estar a su vez eliminando otra combinación que sea interesante a probar y no se pruebe en ningún otro caso de prueba. Por esto es que tenemos que agregar las reglas y restricciones previo a generar los pares.

11 thoughts on “Pairwise testing

  1. carlos dorival says:

    muchas gracias por la informacion y la herramienta, llegue aqui gracias tu libro a la sección pairwise

  2. Jenny says:

    En el libro se muestran 15 casos de pruebas. Cuál sería el resultado correcto? Gracias

    1. Federico says:

      Hola Jenny
      Si te fijas, hay algunas diferencias entre el ejemplo usado en el libro y el ejemplo usado en este post, por eso los resultados son diferentes

  3. Gamma says:

    Tengo una duda, Podría decir que dentro de Pairwise Testing está el modelo de Array Orthogonal?

  4. Federico says:

    Hola Gamma
    tuve que ir a repasar qué eran arrays ortogonales.
    Creo que no es lo mismo, porque acá tenés distintas variables y cada una puede tener valores diferentes. En el otro caso tenés un conjunto de valores y te fijás incluso en el orden en el que aparecen…
    Por qué querías saber?

  5. JOSÉ LUIS CALDERÓN says:

    Hola, Federico.
    Felicitaciones por tu excelente libro, para un principiante como yo.
    Te agradecería que me ayudaras a encontrar el programa que muestras en la página 39 del libro, para replicar el ejemplo que colocas allí con el algoritmo PROW. Revisé el sitio ctweb.abstract.com.uy pero no lo encontré. Tampoco en Google, buscando algoritmo PROW.
    Gracias.

    1. Federico says:

      Hola José Luis,
      CTweb no está más disponible. En este post mi idea era compartir una herramienta que pueda servir de sustituto, a pesar que hay algunos algoritmos que no los ofrece. De todos modos, para efectos prácticos, te diría que uses PICT

      Saludos

  6. José Luis says:

    Hola Federico. Gracias por aclararme la duda.
    Saludos.

  7. francisco says:

    Hola. el ejemplo deberia eliminar todos los casos innecesarios por ejemplo:

    if [canal] = “e-mail” then [prioridad] “urgente”;
    if [canal] = “e-mail” then [prioridad] “alta”;
    if [canal] = “e-mail” then [prioridad] “baja”;
    if [canal] = “telefonico” then [prioridad] “urgente”;
    if [canal] = “telefonico” then [prioridad] “alta”;
    if [canal] = “telefonico” then [prioridad] “baja”;

    y asi sucesivamente sin escribir el caso: presencial, media, adhesion tarjeta de debito?. No lo estas explicando claramente para gente que quiere entrar al mundo del testing como yo.
    Solo evaluas dos casos de prueba, y ninguno de los que evaluas esta escrito en el libro. no entendi nada

  8. Federico says:

    En una charla de Mercedes Quintero mencionó que usa esta tool https://pairwise.teremokgames.com/

  9. Santiago Marrugo says:

    Buenas tardes gente, buscando en la red me encontré con esta pagina que genera combinaciones, quizás les puede servir.

    https://pairwise.teremokgames.com/

Leave a Reply

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