Aplicación práctica de la técnica Pairwise Testing

Al estudiar las técnicas básicas de diseño de pruebas propuestas por TMap® Next, muchos nos preguntamos: ¿realmente vamos a aplicarlas algún día? Pues, mi respuesta es rotundamente que SÍ; y, en el desarrollo de este artículo se demostrará que así es y que, en el proyecto en el que me encuentro, es una herramienta de trabajo útil y claramente aplicable.

Paloma_RodríguezIntroducción: El Problema

Recientemente, en el proyecto del que formo parte, nos solicitaron probar una nueva aplicación. Al principio, partiendo de la documentación disponible, pensamos que, en comparación con otros programas que habíamos probado previamente, sería “coser y cantar”. Pero nada más lejos de la realidad, pues, aunque se trata de una aplicación muy sencilla, realiza un gran número de validaciones sobre un conjunto de 12 matrices. Considerando todas las posibilidades, obtuvimos como resultado que, para cubrir toda la casuística (100% de cobertura) necesitaríamos 1.585.272 casos de prueba. Algo, a todas luces, inmanejable.

¿Cómo, entonces, podríamos reducir el número de casos de prueba asegurando la cobertura más alta posible? Estudiando distintas posibilidades, concluimos que podríamos conseguirlo aplicando la técnica Pairwise Testing.

Pairwise testing: La Técnica

¿Qué es el Pairwise Testing?

El Pairwise Testing es una técnica básica propuesta por TMap® Next para obtener las situaciones de prueba requeridas para llegar a una cierta cobertura. El objetivo del Pairwise Testing es probar todas las posibles combinaciones de dos factores. Esto redunda en una gran reducción en el número de casos de prueba, obteniéndose aún así buenos resultados en la detección de defectos.

Esta técnica se basa en el hecho de que la mayor parte de los errores se producen como consecuencia de un factor concreto o de la combinación de dos factores. Debido a esto, en lugar de probar todas las posibles combinaciones de todos los factores, resulta muy efectivo probar cada combinación de dos factores.

Ejemplo

Se va a probar un sistema para comprar artículos a través de Internet. Para ello se consideran los siguientes tres parámetros: número de artículos, importe y método de pago. Para cada parámetro existen dos clases de equivalencia a probar:

–       Número de artículos: <= 8, >8

–       Importe:                 <= 250 €, > 250€

–       Método de pago:      Contra rembolso, Tarjeta de Crédito

Para poder probar todas las combinaciones de estos tres parámetros, serán necesarios 23 = 8 casos de prueba:

cuadro-I

Utilizando la técnica de Pairwise Testing, con solo 4 casos de prueba se prueban las combinaciones dos a dos de los tres factores o parámetros implicados:

–       [Número de artículos, Importe]

–       [Número de artículos, Método de pago]

–       [Importe, Método de pago]

Los casos de prueba obtenidos empleando este método son:

cuadro-II

De esta forma, si un defecto en el sistema ocurre cuando uno de los posibles valores de uno de los parámetros se combina con un valor particular de uno de los otros parámetros, el error se detectará con uno de estos casos de prueba. Este es el punto clave de esta técnica.

Obtención de los casos de prueba para Pairwise Testing

Si solo hay un par de parámetros con dos clases de equivalencia, los casos de prueba necesarios para Pairwise Testing se pueden obtener fácilmente de forma manual. No obstante, en la práctica, suele haber más parámetros y más clases de equivalencia, por lo que no es posible hacerlo manualmente.

Para solucionar esto, se pueden emplear distintas herramientas comerciales o gratuitas. El número concreto de casos de prueba necesarios y la combinación de los valores de los distintos parámetros dependerán de la herramienta elegida. Una de las posibles herramientas es PICT, que se presenta a continuación.

PICT: La Herramienta

INTRODUCCIÓN

PICT (Pairwise Independent Combinatorial Testing) es la herramienta de Microsoft que implementa la técnica Pairwise Testing para la generación automática de casos de prueba. PICT genera un reducido conjunto de casos de prueba para obtener una adecuada cobertura de pruebas. Se caracteriza por su rapidez en la generación de pruebas y por su facilidad de uso.

PICT emplea la línea de comandos. La entrada es un fichero de texto plano (txt) en el que se especifican los parámetros de prueba y sus valores. La salida es otro fichero de texto plano en el que se detallan los casos de prueba que se deberán utilizar. La salida también se puede especificar en un fichero Excel (xls).

Por defecto, PICT genera los casos de prueba necesarios para cubrir las combinaciones de orden dos (Pairwise). No obstante, se puede establecer un orden mayor, de forma que las combinaciones sean de orden tres, cuatro, etc. Así, el número de casos de prueba aumenta, pero también se incrementa la cobertura alcanzada.

FUNCIONAMIENTO BÁSICO DE LA HERRAMIENTA

1.- Funcionamiento de la herramienta

PICT es una herramienta que emplea la línea de comandos. Acepta un fichero plano  (txt) como entrada y ofrece como salida un conjunto de casos de prueba.

El fichero de entrada es un txt en el que se indican los parámetros objeto de prueba y los valores que pueden tomar (el formato del fichero se presentará en el punto siguiente). Se obtendría el resultado ejecutando la herramienta con el siguiente comando:

C:\Carpeta> pict Entrada.txt

cuadro-III

El resultado se mostraría en la misma línea de comandos:

cuadro-IV

También se podría recuperar el resultado en un fichero de salida, indicándolo de la siguiente forma:

C:\Carpeta> pict Entrada.txt > Salida.txt

cuadro-V

El resultado sería otro fichero txt con los casos de prueba:

cuadro-VI

 También se puede utilizar Microsoft Excel para mostrar el resultado:

C:\Carpeta> pict Entrada.txt > Salida.xls

cuadro-VII

El fichero obtenido sería:

cuadro-VIII

Asimismo, cabe destacar que se pueden especificar distintas opciones, en función de lo que se desee obtener como salida:

cuadro-IX

2.- Creación del fichero de entrada

Para ejecutar correctamente la herramienta, el primer paso consiste en crear el fichero de texto plano de entrada en el que se indican los parámetros de prueba y los valores de los mismos. Este fichero consta de tres secciones principales:

cuadro

La primera sección es obligatoria; las otras dos son opcionales. El orden de las mismas ha de ser el especificado previamente. Las secciones no requieren separadores entre ellas y se pueden incluir comentarios precedidos por el carácter “#”.

Además de estas tres secciones, existen otras opciones prácticas que complementan el funcionamiento de la herramienta y que también se presentan en este apartado: seeding, pruebas negativas y asignar pesos a los valores de los parámetros.

a)    Definiciones de parámetros

En primer lugar, se listan los distintos parámetros, indicando cada uno en una línea, y sus posibles valores, delimitados por comas:

<Nombre Parámetro>: <Valor 1>, <Valor 2>, <Valor 3>, …

Los parámetros pueden ser de dos tipos: números o strings.

Ejemplo

Considerando una versión extendida del ejemplo del sistema de compra de artículos a través de Internet:

–       Número de artículos: 1; 2 – 8; >8

–       Importe:                 <100 €; 100 – 250 €; > 250€

–       Método de pago:      Contra rembolso; Tarjeta de Crédito; Tarjeta Tienda; Transferencia bancaria

–       Categoría Cliente:     Normal; Oro; Platino

El fichero de entrada será el siguiente:

cuadro-X

Para probar todas las posibles combinaciones son necesarios 3 x 3 x 4 x 3 = 108 casos de prueba. Empleando la técnica de Pairwise Testing, solo bastará una fracción de ellos:

cuadro-XI

a)    Definiciones del submodelo

Los submodelos permiten agrupar ciertos parámetros en conjuntos que tienen sus propias leyes combinatorias. Esto puede resultar útil si la combinación de ciertos parámetros ha de ser probada en más profundidad o se deben combinar de forma separada del resto de parámetros del modelo. La definición de submodelos tiene el formato siguiente:

{<Nombre parámetro 1>, < Nombre parámetro 2>, … } @ <Orden>

Ejemplo

Siguiendo con el ejemplo anterior, si, en lugar de desear que las combinaciones sean de dos factores (valor por defecto), se desea que las combinaciones sean de tres factores, el fichero de entrada tendrá el siguiente aspecto:

cuadro-XII

En este caso, el número de casos de prueba es mayor, dado que se consideran todas las combinaciones tres a tres de los elementos:

cuadro-XIII

Cabe destacar además que:

  • Se pueden definir tantos submodelos como se desee, ya que los parámetros pueden pertenecer a varios submodelos.
  • El orden de un submodelo no puede superar el número de sus parámetros.
  • Si no se especifica un orden para un submodelo, PICT aplica el valor por defecto.

a)    Restricciones

Las restricciones permiten especificar limitaciones en las posibles combinaciones del modelo. De este modo, se pueden detallar las combinaciones no deseadas, es decir, el conjunto de casos excluidos, que no se mostrarán en la salida del modelo.

Para identificar las restricciones condicionales, se pueden establecer las siguientes relaciones: =, <>, >, >=, <, <=, y LIKE.

cuadro-XIV

Como se ha indicado previamente, los parámetros pueden ser de dos tipos: números o strings. Un parámetro se considera de tipo numérico si todos sus valores son numéricos. Se puede comparar un parámetro numérico con un número y parámetro de tipo string con un string. Por ejemplo:

cuadro-XV

El operador IN se emplea para especificar explícitamente un conjunto de valores que satisfacen la relación:

cuadro-XVI

Las partes IF, THEN y ELSE de un predicado pueden contener distintas condiciones unidas por operadores lógicos: NOT, AND y OR.

cuadro-XVII

Ejemplo

Retomando el ejemplo de los puntos anteriores, se pueden establecer las siguientes restricciones entre los distintos parámetros:

cuadro-XVIII

El resultado, en este caso, será el mostrado a continuación:

cuadro-XIX

Como se puede observar, se han respetado las restricciones establecidas en el fichero de entrada, de forma que, si el número de artículos es igual a “1”, los métodos de pago aceptados son “Contra rembolso” o “Tarjeta Tienda”, mientras que, si el importe es mayor que 250 €, solo se puede pagar con “Tarjeta de Crédito”.

a)    Seeding

En ocasiones, hay ciertos casos de prueba que deben aparecer en el conjunto de pruebas generado. Seeding tiene dos aplicaciones prácticas:

  1. Permite especificar explícitamente las combinaciones “importantes” que deben formar parte del conjunto de pruebas. PICT comienza indicando las combinaciones proporcionadas y después construye el resto del conjunto, teniendo en cuenta que se cubran todas las combinaciones.
  1. Permite minimizar los cambios en la salida cuando es necesario modificar el modelo. Para ello, se proporcionan a la herramienta los resultados de una generación previa y PICT los reutilizará en la medida de lo posible.

Estos casos se deben especificar en un fichero aparte. Se utilizará la opción /e: para indicar la ubicación de dicho fichero:

C:\Carpeta> pict Entrada.txt > Salida.xls /e:Seeding.txt

Los ficheros de seeding emplean el mismo formato que los ficheros de salida de la herramienta (que se presentará en el apartado siguiente). La primera línea contiene los nombres de los parámetros separados mediante tabuladores y cada una de las líneas siguientes contiene un caso de prueba que se debe incluir en el conjunto.

Ejemplo

Siguiendo con el ejemplo de la compra de artículos a través de internet, se desea que haya tres casos de prueba que formen parte del conjunto. Para ello, se crea un fichero con el formato especificado que incluye estos casos de prueba:

cuadro-XX

En la línea de comandos, se especificará que se desea incluir estos tres casos de prueba en el conjunto de resultados:

cuadro-XXI

a)    Pruebas negativas

Además de probar todos las combinaciones válidas (“pruebas positivas”), a veces es deseable realizar pruebas empleando valores que no están incluidos en el rango de valores posibles para comprobar que el programa bajo test maneja los errores de forma adecuada. Cada caso de prueba “negativo” deberá incluir únicamente un valor inválido, para evitar problemas de enmascaramiento de errores.

Se empleará el prefijo “~” (tilde) para indicar que el valor que viene a continuación es inválido.

cuadro-XXII

a)    Asignar pesos a los valores

En algunas ocasiones, puede ocurrir que algunos valores de un parámetros se supongan más “importantes” que otros. Empleando pesos, se puede forzar a la herramienta a “preferir” ciertos valores. Los pesos se especifican con números enteros positivos. PICT usa el peso “1” por defecto, si no se especifica explícitamente un peso distinto.

cuadro-XXIII

3.- Formato de salida

Como se ha indicado previamente, PICT imprime en la línea de comandos los casos de prueba obtenidos con las combinaciones de los distintos valores de los parámetros. La primera línea contiene los nombres de los parámetros. Cada una de las líneas siguientes representa a uno de los casos de prueba generados. Los valores en cada línea se separan mediante tabuladores.

cuadro-XXIV

Aplicación práctica: La Solución

Volviendo al problema que se planteaba al principio de este artículo, vimos que, para poder probar todas las combinaciones posibles (100% de cobertura) y probar el correcto funcionamiento de las matrices de validación de la aplicación, serían necesarios 1.585.272 casos de prueba. Para poder cubrir toda esta casuística, calculamos que sería necesario que una persona dedicase 9 años (24 horas al día, todos los días del año) de su vida a probar todas las combinaciones. Evidentemente, esto no se podía acometer.

Por ello, acudimos a TMap® Next para buscar una técnica que nos permitiera detectar el mayor número de defectos reduciendo considerablemente el número de pruebas a realizar y asegurando la cobertura más alta posible. Y TMap® Next nos ofreció la solución: la técnica del Pairwise Testing, presentada en este artículo. Y, dado que, cada matriz empleaba combinaciones de cuatro o más parámetros, obtuvimos los casos de prueba a través de la herramienta PICT, cuyo funcionamiento básico se ha descrito en el apartado previo.

De esta forma, conseguimos reducir el número de casos de prueba a 7.065, con lo cual necesitaríamos solo 15 días para poder probar las combinaciones sugeridas por la técnica y la herramienta empleadas. La cobertura obtenida sería solo del 0,45%, pero, empleando el seeding, nos aseguramos de que, dentro de los casos de prueba obtenidos, se encontrarán todos las combinaciones en las que la validación de la matriz debiera mostrar un mensaje de error. De esta forma, podemos garantizar que se van a probar todas las combinaciones que provocarán el error de validación de las matrices, así como un subconjunto de combinaciones que no llevarán a error.

Ejemplo

Se muestra como ejemplo el caso de una de las matrices: Matriz 1. Esta matriz muestra un error cuando la combinación de 4 parámetros toma ciertos valores. Para el resto de valores, no se muestra ningún error.

Los parámetros implicados y sus valores son:

S1:     S1_1, S1_2, S1_3, S1_4, S1_5, S1_6, S1_7 (7 valores posibles)

S43:   S43_1, S43_2 (2 valores posibles)

S44:   S44_1, S44_2, S44_3 (3 valores posibles)

S5:     S5_1, S5_2, S5_3, S5_4, S5_5, S5_6, S5_7, S5_8, S5_9, S5_10, S5_11, S5_12, S5_13, S5_14, S5_15, S5_16, S5_19, S5_20, S5_21, S5_22, S5_23, S5_24, S5_25, S5_26, S5_27, S5_28, S5_29, S5_30, S5_31, S5_32, S5_33, S5_34, S5_35, S5_36  (34 valores posibles)

Para poder probar todas las combinaciones posibles, serían necesarios 7 x 2 x 3 x 34 = 1.428 casos de prueba. Pero solo muestran un error de validación de la matriz las combinaciones presentadas en la tabla siguiente:

cuadro-XXV

Mediante Pairwise Testing, teniendo en cuenta que los 20 casos mostrados en la tabla anterior tienen que formar parte del conjunto de pruebas, conseguimos reducir a 258 el número de casos de prueba, obteniendo una cobertura del 18,07%.

Otras Herramientas: Pairwise Tools

En este artículo se ha presentado la herramienta PICT de Microsoft para la obtención de situaciones de prueba aplicando Pairwise Testing. No obstante, existen numerosas herramientas para obtener los casos de prueba con esta técnica. Estas pueden ser comerciales o gratuitas. La mayoría de ellas son muy fáciles de utilizar. Algunos ejemplos son:

En función de la herramienta utilizada y, a pesar de que todas ellas aplican la técnica del Pairwise Testing, el conjunto de pruebas será distinto, ya que los algoritmos empleados para la consecución del mismo son diferentes.

Para más información acerca de las herramientas disponibles, se puede consultar la página web: http://www.pairwise.org/tools.asp.

Conclusión

El Pairwise Testing es una técnica básica para reducir los casos de prueba necesarios para probar una aplicación. De este modo, a pesar de reducir la cobertura, se siguen consiguiendo muy buenos resultados en la detección de defectos.

PICT es una herramienta muy sencilla que ofrece Microsoft para obtener el conjunto de casos de prueba necesarios para probar todas las combinaciones dos a dos de los posibles valores de los distintos parámetros.

Por tanto, viendo la simplicidad de la técnica y la facilidad de uso de la herramienta, se puede concluir que la combinación de ambas componen un sencillo método para obtener los casos de prueba que aseguren una cierta cobertura sin necesidad de probar todas las posibles combinaciones de todos los parámetros.

Para más información:

Paloma Rodríguez – Ingeniero de Test – Sogeti España

paloma.rodriguez@sogeti.com

Anuncios

Deja tu comentario

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 )

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 )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: