2011-07-26 15 views
11

He estado investigando las pruebas de aceptación automática en los últimos días, el aprendizaje sobre BDD & JBehave, FitNesse & Delgado, selenio & WebDriver, etc.Prueba de aceptación automatizada: ¿interfaz de usuario o API?

He acaba de ver this de vídeo por Robert C. Martin, donde demuestra cómo usar FitNesse para escribir y mantener dichas pruebas. Hacia el final, alguien pregunta si estas pruebas llegan a la IU. Martin continúa explicando que las pruebas de aceptación de acoplamiento a la IU pueden ser costosas, ya que los cambios en la IU son bastante frecuentes. También podría adivinar que tales pruebas solo podrían escribirse después de que se haya desarrollado la interfaz de usuario, lo que retrasaría a los evaluadores por definición.

Tengo que preguntar: ¿cuál es la alternativa? Martin parece estar implicando que las pruebas deberían estar golpeando una capa oculta que manipularía la capa de negocios de la aplicación. Tengo entendido que esto requeriría trabajo adicional, sin mencionar que expondría una nueva API que tendría que asegurarse una vez en un entorno de producción.

¿Podría bastar con alcanzar la capa de negocio a través de los servicios de aplicaciones?

¿Cuál ha sido su experiencia?

¡Gracias por compartir!

Respuesta

9

Lamentablemente necesita los dos. En general, querrá automatizar las pruebas de la capa de negocios con algo parecido a la aptitud. Evitar la interfaz de usuario básicamente le garantiza que las reglas comerciales definidas siempre funcionan. La automatización a través de la IU puede requerir mucho más mantenimiento. Pero en el lado positivo ya que gran parte de la UI utiliza mecanismos proporcionados por la plataforma (por ejemplo, C#/Winforms), la mayor parte de las pruebas de UI pueden realizarse solo cuando se realizan cambios si está bien cubierto con otros tipos de pruebas (como business layer) . Las pruebas automáticas deben mantenerse y actualizarse, pero las pruebas de UI tienden a requerir más mantenimiento y, a menudo, son menos confiables con el tiempo.

13

Las pruebas a través de la interfaz de usuario o al acceder directamente a la capa empresarial se pueden considerar como dos tipos diferentes de pruebas, con diferentes ventajas y desventajas.

Si está probando la interfaz de usuario directamente, está probando lo que ve el usuario y no tiene que cambiar el código para poder probarlo. Sin embargo, se vuelve bastante difícil probar casos de esquina, o cómo el sistema reacciona a condiciones excepcionales (como excepciones). Es como dice Robert Martin, frágil. Si su interfaz cambia, debe cambiar sus pruebas. Por lo tanto, las pruebas a través de la IU dependen de la madurez de su IU. Más adelante en el proyecto, la interfaz de usuario es más estable, por lo que las pruebas a través de la interfaz de usuario tienen más sentido. Además, probar algunas cosas a través de la interfaz de usuario es difícil o intrincado.

Si está probando la capa de negocio, puede probar más fácilmente las condiciones de esquina y es menos susceptible a cambios en la interfaz de usuario. Sin embargo, como dices, el software debe estar escrito de tal manera que permita las pruebas de este tipo. Incluso puede que tenga que exponer una nueva interfaz para permitirlo, que luego debe mantenerse. En mi experiencia, a veces es bastante difícil lograr que los desarrolladores admitan este tipo de interfaz. Se considera que no es tan importante como la interfaz real. Pero siempre es posible. Este tipo de interfaz necesita la aceptación de los desarrolladores; de lo contrario, corre el riesgo de que no sea compatible con el tiempo.

Si no tiene la interfaz externa, intente solicitarla. Nunca se sabe, es posible que pueda persuadirlos de que es una buena idea. Es más fácil al comienzo de un proyecto.

Si tiene la interfaz externa, utilícela para probar su lógica comercial.

De lo contrario, tendrá que usar la interfaz de usuario para probar estas cosas. Un enfoque sería usar la IU para hacer pruebas de humo, para responder las siguientes preguntas: ¿Este software es comprobable? Piensa en las cosas comunes que tienes que probar cada vez que obtienes una compilación del desarrollador. ¿Puedo iniciar sesión, puedo cerrar sesión, aparece la página principal, puedo hacer un pedido simple? Elija 5 o 6 de estas cosas, y cree un conjunto de pruebas automatizadas para probar estas cosas. Utilice estas pruebas como una guía sobre la cantidad de funcionalidad que puede probar a través de la interfaz de usuario, y qué tan útil es.

Puede usar esto como argumento cuando vaya a los desarrolladores y solicite la interfaz externa.

+0

usted menciona el desarrollo de una interfaz externa: supongo que esta interfaz necesita ser desplegado en el servidor de contenedor/app , expuesto a través de algún mecanismo remoto como un servicio web e invocado remotamente desde la prueba de aceptación? ¿O es realmente necesario si se trata de una aplicación basada en Spring en la que el contenedor no está realmente sollicionado? – Spiff

+1

Sí, también deberá desplegarse y exponerse. Puede ser parte del mismo paquete, pero como dices necesitarás habilitarlo y deshabilitarlo. –

1

Crear una interfaz para las pruebas es "el sueño de los evaluadores" pero habilitarlo/deshabilitarlo será la pesadilla para la implementación. U puede necesitar "compilaciones de prueba" y "desplegar construcciones" con diferentes pruebas de humo. Pero cualquier compromiso es bueno ya que la UI de límite de tiempo automatiza las pruebas.

3

Recomiendo encarecidamente utilizar el modo de automatización que no sea UI para las pruebas de aceptación. El problema al que se puede enfrentar es vendiendo la idea a los probadores de códigos ciegos tradicionales que encontrarían inadecuado el concepto de verificación no visual de los criterios de aceptación. Prefiero una mitad de camino donde un criterio de aceptación es probado por dos conjuntos de pruebas. El primer conjunto se centra exclusivamente en la lógica y, por lo tanto, se implementa en una capa API/Servicio/Remoto. Este conjunto es 100% automatizado. El segundo conjunto es una verificación de UI del mismo requisito. Mi opinión personal no es automatizar el segundo conjunto por las razones indicadas en otras respuestas. En cuanto a una capa para escribir las pruebas en contra, depende del equipo. Si el equipo está verdaderamente comprometido con la calidad, lo verán como una parte esencial del desarrollo de productos. Sin embargo, en el mundo real, es una venta difícil. A menos que se indique explícitamente desde el inicio de un proyecto, sería difícil adaptar dicha interfaz en un proyecto en ejecución. Sugeriría que, si desea implementar pruebas de aceptación automáticas, lo haga lo antes posible. A medida que el producto envejece, la probabilidad de que dichos ataques se implementen disminuye drásticamente.

2

sólo puedo hablar por las pruebas de interfaz de usuario, Q & Un estilo:

A) Es nuestra interfaz de usuario ya estables o aún probable que cambie mucho?

Estable - la automatización aporta un valor adicional

probable que cambie - no automatizar, que pasará más tiempo el mantenimiento (rehacer) estas pruebas.


B) Nuestra interfaz de usuario es estable, debemos automatizar tanto de él como sea posible?

Dios No!

1) Tomar todas las secuencias de comandos de prueba (digamos, 100)

2) Decidir que son automatizables (80)

3) Ordenar por prioridad (bloqueantes, crítico, de menor importancia)

4) Automatice los bloqueadores y los críticos primero (por ejemplo, 20/80)

Vea cómo funciona eso, y automatice más si es necesario.


C) ¿Qué otros factores debo tener en cuenta para la automatización de la interfaz de usuario?

Todo como se muestra a continuación (pirámide de la prueba es un concepto desarrollado por Mike Cohn):

enter image description here

Cuestiones relacionadas