Articulo de referencia

Pruebas de interfaz gráfica de usuario

En ingeniería de software , las pruebas de interfaz gráfica de usuario (GUI) son el proceso de probar la interfaz gráfica de usuario (GUI) de un producto para asegurar que cumpl...

En ingeniería de software , las pruebas de interfaz gráfica de usuario (GUI) son el proceso de probar la interfaz gráfica de usuario (GUI) de un producto para asegurar que cumpla con sus especificaciones. Esto normalmente se realiza mediante el uso de diversos casos de prueba .

Generación de casos de prueba

Para generar un conjunto de casos de prueba , los diseñadores de pruebas intentan cubrir toda la funcionalidad del sistema y poner a prueba completamente la interfaz gráfica de usuario (GUI) . La dificultad para lograrlo radica en dos aspectos: el tamaño del dominio y las secuencias. Además, el evaluador se enfrenta a mayores dificultades al realizar pruebas de regresión .

A diferencia de un sistema CLI (interfaz de línea de comandos), una GUI puede tener operaciones adicionales que deben probarse. Un programa relativamente pequeño como Microsoft WordPad tiene 325 operaciones posibles en su GUI. [ 1 ] En un programa grande, el número de operaciones puede ser fácilmente un orden de magnitud mayor.

El segundo problema es el de la secuenciación. Algunas funciones del sistema solo se pueden realizar mediante una secuencia de eventos de la interfaz gráfica de usuario (GUI). Por ejemplo, para abrir un archivo, el usuario primero debe hacer clic en el menú Archivo, luego seleccionar la opción Abrir, usar un cuadro de diálogo para especificar el nombre del archivo y enfocar la aplicación en la ventana recién abierta. Aumentar el número de operaciones posibles incrementa exponencialmente el problema de la secuenciación. Esto puede convertirse en un problema grave cuando el evaluador crea casos de prueba manualmente.

Las pruebas de regresión también suelen ser un desafío con las interfaces gráficas de usuario (GUI). Una GUI puede cambiar significativamente, aunque la aplicación subyacente no lo haga. Una prueba diseñada para seguir una ruta específica a través de la GUI puede fallar, ya que un botón, un elemento de menú o un cuadro de diálogo pueden haber cambiado de ubicación o apariencia.

Estos problemas han impulsado la automatización en el ámbito de las pruebas de interfaces gráficas de usuario (GUI). Se han propuesto diversas técnicas para generar automáticamente conjuntos de pruebas completos que simulen el comportamiento del usuario.

La mayoría de las técnicas de prueba intentan basarse en las utilizadas previamente para probar programas CLI, pero estas pueden tener problemas de escala cuando se aplican a GUI. Por ejemplo, el modelado basado en máquinas de estados finitos [ 2 ] [ 3 ] , donde un sistema se modela como una máquina de estados finitos y se utiliza un programa para generar casos de prueba que ejercitan todos los estados, puede funcionar bien en un sistema que tiene un número limitado de estados, pero puede volverse demasiado complejo y difícil de manejar para una GUI (véase también pruebas basadas en modelos ).

Planificación e inteligencia artificial

Un nuevo enfoque para la generación de conjuntos de pruebas, adaptado de una técnica CLI [ 4 ], implica el uso de un sistema de planificación. [ 5 ] La planificación es una técnica bien estudiada del dominio de la inteligencia artificial (IA) que intenta resolver problemas que involucran cuatro parámetros:

  • un estado inicial,
  • un estado objetivo,
  • un conjunto de operadores y
  • un conjunto de objetos sobre los que operar.

Sistemas de planificación

Los sistemas de planificación determinan una ruta desde el estado inicial hasta el estado objetivo mediante el uso de operadores. Como ejemplo sencillo de un problema de planificación, dadas dos palabras y una operación que reemplaza una letra en una palabra por otra, el objetivo podría ser transformar una palabra en otra.

En [ 1 ] los autores utilizaron el planificador IPP [ 6 ] para demostrar esta técnica. Primero se analiza la interfaz de usuario del sistema para determinar las operaciones posibles. Estas se convierten en los operadores utilizados en el problema de planificación. A continuación, se determina un estado inicial del sistema y se especifica un estado objetivo que, según el evaluador, permitiría probar el sistema. El sistema de planificación determina una ruta desde el estado inicial hasta el estado objetivo, que se convierte en el plan de prueba.

Utilizar un planificador para generar los casos de prueba tiene algunas ventajas específicas sobre la generación manual. Un sistema de planificación, por su propia naturaleza, genera soluciones a los problemas de planificación de una manera muy beneficiosa para el probador:

  1. Los planes siempre son válidos. El sistema genera un plan válido y correcto que utiliza los operadores para alcanzar el estado objetivo, o bien ningún plan. Esto resulta beneficioso, ya que se puede perder mucho tiempo creando manualmente un conjunto de pruebas debido a casos de prueba inválidos que el evaluador creía que funcionarían, pero no fue así.
  2. Un sistema de planificación se centra en el orden. A menudo, para probar una función específica, el caso de prueba debe ser complejo y seguir una ruta a través de la interfaz gráfica de usuario (GUI), donde las operaciones se realizan en un orden determinado. Si se realiza manualmente, esto puede dar lugar a errores y, además, puede resultar bastante difícil y laborioso.
  3. Por último, y lo más importante, un sistema de planificación está orientado a objetivos. El evaluador centra la generación del conjunto de pruebas en lo más importante: probar la funcionalidad del sistema.

Al crear manualmente un conjunto de pruebas, el evaluador se centra más en cómo probar una función (es decir,  la ruta específica a través de la interfaz gráfica de usuario). Al usar un sistema de planificación, la ruta se gestiona automáticamente y el evaluador puede concentrarse en qué función probar. Una ventaja adicional es que un sistema de planificación no tiene restricciones al generar la ruta y, a menudo, puede encontrar una ruta que el evaluador no había previsto. Este problema es muy importante de abordar. [ 7 ]

Algoritmos genéticos

Otro método para generar casos de prueba de interfaz gráfica de usuario (GUI) simula a un usuario principiante. Un usuario experto tiende a seguir una ruta directa y predecible a través de la GUI, mientras que un usuario principiante seguiría una ruta más aleatoria. Por lo tanto, es probable que un usuario principiante explore más estados posibles de la GUI que un experto.

La dificultad radica en generar conjuntos de pruebas que simulen el uso del sistema por parte de usuarios principiantes. Se ha propuesto el uso de algoritmos genéticos para resolver este problema. [ 7 ] Las rutas que sigue un usuario principiante a través del sistema no son aleatorias. En primer lugar, un usuario principiante aprende con el tiempo y, por lo general, no comete los mismos errores repetidamente; y, en segundo lugar, un usuario principiante sigue un plan y probablemente posee cierto conocimiento del dominio o del sistema.

Los algoritmos genéticos funcionan de la siguiente manera: se crea un conjunto de genes aleatoriamente y se les somete a una tarea. Los genes que mejor la completan se conservan y los que no, se descartan. El proceso se repite replicando los genes que sobreviven y completando el resto del conjunto con más genes aleatorios. Finalmente, un gen (o un pequeño conjunto de genes, si se establece un umbral) será el único gen del conjunto y, naturalmente, el que mejor se ajuste al problema planteado.

En el caso de las pruebas de interfaz gráfica de usuario (GUI), el método funciona de la siguiente manera: cada gen es esencialmente una lista de valores enteros aleatorios de longitud fija. Cada uno de estos genes representa una ruta a través de la GUI. Por ejemplo, para un árbol de widgets dado, el primer valor del gen (cada valor se denomina alelo) seleccionaría el widget sobre el que operar; los alelos siguientes completarían la entrada del widget según el número de entradas posibles (por ejemplo, un cuadro de lista desplegable tendría una entrada: el valor seleccionado en la lista). El éxito de los genes se evalúa mediante un criterio que premia el mejor comportamiento de un usuario principiante.

Ventana X

Kasik y George introdujeron un sistema para realizar pruebas de interfaz gráfica de usuario (GUI) para el sistema de ventanas X, extensible a cualquier sistema de ventanas. [ 7 ] El sistema de ventanas X proporciona funcionalidad (a través de XServer y su protocolo) para enviar dinámicamente la entrada de la GUI y obtener la salida de la GUI del programa sin usarla directamente. Por ejemplo, se puede llamar a XSendEvent() para simular un clic en un menú desplegable, etc. Este sistema permite a los investigadores automatizar la generación de casos de prueba y las pruebas para cualquier aplicación, de manera que se pueda crear un conjunto de casos de prueba para usuarios principiantes.

Ejecutando los casos de prueba

En un principio, las estrategias se migraron y adaptaron a partir de las estrategias de prueba de la interfaz de línea de comandos (CLI).

captura de la posición del ratón

Un método popular en el entorno de la interfaz de línea de comandos (CLI) es la captura y reproducción. Este método consiste en capturar la pantalla del sistema como una imagen de mapa de bits en diferentes momentos durante las pruebas. Esta captura permite al evaluador reproducir el proceso de prueba y comparar las pantallas de salida con las esperadas. Esta validación puede automatizarse, ya que las pantallas serían idénticas si la prueba se supera y diferentes si falla.

El uso de captura/reproducción funcionó bastante bien en el mundo de la CLI, pero existen problemas significativos cuando se intenta implementarlo en un sistema basado en GUI. [ 8 ] El problema más evidente es que la pantalla en un sistema GUI puede verse diferente aunque el estado del sistema subyacente sea el mismo, lo que dificulta enormemente la validación automatizada. Esto se debe a que una GUI permite que los objetos gráficos varíen en apariencia y ubicación en la pantalla. Las fuentes pueden ser diferentes, los colores o tamaños de las ventanas pueden variar, pero la salida del sistema es básicamente la misma. Esto sería obvio para un usuario, pero no para un sistema de validación automatizado.

Captura de eventos

Para combatir este y otros problemas, los evaluadores han ido "debajo del capó" y recopilado datos de interacción de la GUI del sistema de ventanas subyacente. [ 9 ] Al capturar los "eventos" de la ventana en registros, las interacciones con el sistema ahora están en un formato que está desacoplado de la apariencia de la GUI. Ahora, solo se capturan los flujos de eventos. Es necesario cierto filtrado de los flujos de eventos ya que los flujos de eventos suelen ser muy detallados y la mayoría de los eventos no son directamente relevantes para el problema. Este enfoque puede simplificarse utilizando una arquitectura MVC  , por ejemplo, y haciendo que la vista ( es decir, la GUI en este caso) sea lo más simple posible mientras que el modelo y el controlador contienen toda la lógica. Otro enfoque es utilizar la tecnología de asistencia integrada del software para utilizar una interfaz HTML o una arquitectura de tres capas que también permite separar mejor la interfaz de usuario del resto de la aplicación.

Otra forma de realizar pruebas en una interfaz gráfica de usuario (GUI) es integrar un controlador en la GUI para que se puedan enviar comandos o eventos al software desde otro programa. [ 7 ] Este método de envío y recepción directa de eventos a un sistema es muy recomendable durante las pruebas, ya que permite automatizar completamente las pruebas de entrada y salida y elimina el error del usuario.

Véase también

Referencias

  1. 1 2 Atif M. Memon, Martha E. Pollack y Mary Lou Soffa. Uso de un enfoque orientado a objetivos para generar casos de prueba para interfaces gráficas de usuario. Actas de ICSE '99 de la 21.ª conferencia internacional sobre ingeniería de software.
  2. JM Clarke. Generación automatizada de pruebas a partir de un modelo de comportamiento . En Actas de la Conferencia de Calidad de Software del Noroeste del Pacífico. IEEE Press, mayo de 1998.
  3. S. Esmelioglu y L. Apfelbaum. Generación, ejecución e informe de pruebas automatizadas. En Actas de la Conferencia de Calidad de Software del Noroeste del Pacífico. IEEE Press, octubre de 1997.
  4. A. Howe, A. von Mayrhauser y RT Mraz. Generación de casos de prueba como un problema de planificación de IA . Ingeniería de software automatizada, 4:77-106, 1997.
  5. Atif M. Memon, Martha E. Pollack y Mary Lou Soffa. Generación jerárquica de casos de prueba de GUI mediante planificación automatizada . IEEE Trans. Softw. Eng., vol. 27, n.º 2, 2001, págs. 144-155, IEEE Press.
  6. J. Koehler, B. Nebel, J. Hoffman y Y. Dimopoulos. Extensión de los grafos de planificación a un subconjunto de ADL . Lecture Notes in Computer Science, 1348:273, 1997.
  7. 1 2 3 4 D. J. Kasik y HG George. Hacia la generación automática de guiones de prueba para usuarios novatos. En MJ Tauber, V. Bellotti, R. Jeffries, JD Mackinlay y J. Nielsen, editores, Actas de la Conferencia sobre Factores Humanos en Sistemas Informáticos: Terreno Común, páginas 244-251, Nueva York, 13-18 de abril de 1996, ACM Press.
  8. LR Kepple. El arte oscuro de las pruebas de GUI. Dr. Dobb's Journal of Software Tools, 19(2):40, febrero de 1994.
  9. ML Hammontree, JJ Hendrickson y BW Hensley. Herramientas integradas de captura y análisis de datos para la investigación y las pruebas de interfaces gráficas de usuario . En P. Bauersfeld, J. Bennett y G. Lynch, editores, Actas de la Conferencia sobre Factores Humanos en Sistemas Informáticos, páginas 431-432, Nueva York, NY, EE. UU., mayo de 1992. ACM Press.