¿Cómo automatizar las pruebas del juego?


13

Soy nuevo en este campo de pruebas. Acabo de desarrollar un juego básico usando la unidad del motor, pero quiero probarlo.

He comprobado con selenio pero no sé cómo obtener el valor que se devuelve que tiene la información de la acción que se realiza en el juego. Si puedo obtener el valor, podré tomar las medidas necesarias en consecuencia.


44
Esta es una pregunta bastante interesante. Personalmente, creo que las pruebas unitarias son muy poco apreciadas en el desarrollo de juegos. Sin embargo, parece que estás más interesado en las pruebas de integración automatizadas, que a menudo es realmente difícil de implementar en el desarrollo de juegos. Especialmente cuando el juego usa aleatoriedad.
Philipp

Accesorios para tomarse las pruebas en serio y buscar herramientas para ese trabajo. Es posible que desee preguntar sobre SO, ya que tienen muchas preguntas y respuestas sobre el selenio. Como mencionó @Philipp, algunos tipos de pruebas de juegos son simplemente difíciles de automatizar; es decir, aún no he visto una prueba desatendida para verificar los efectos visuales.
Pikalek

1
No está claro qué desea probar, pero parece que está buscando un valor que pueda probarse independientemente del juego: un valor devuelto por una función. Y si es así, puedes probar esta función por unidad y no importará si se está utilizando en el juego o no. Si no tiene claro cómo hacerlo, infórmenos y trataré de escribir una respuesta que incluya pruebas unitarias.
MVCDS

Respuestas:


1

Hay varias formas de probar un juego, las dos más utilizadas son: pruebas de unidad e integración.

por pruebas unitariasestás probando el funcionamiento interno del juego, sin ejecutarlo realmente. Puede hacer esto para módulos específicos que tienen dependencias extraídas (por ejemplo, lógica que calcula el Quest XP que obtiene, en función de un conjunto dado de factores; si se reproduce un sonido determinado). Dependiendo de cuánto abstraiga su lógica, podría probar más, pero para la unidad específicamente, podría ser más difícil dada la forma en que se realiza la arquitectura del juego (por ejemplo, heredar del comportamiento mono). Sin embargo, aplicando patrones de OOP como la composición, puede extraer bits de lógica que pueden probarse de manera determinista (por ejemplo, física), incluso si a veces puede verse como un poco extremo. Todo depende de cuánto tiempo tengas, si comenzaste desde cero con el proyecto o no, cuánta experiencia tienes, etc. En general, no tengo No he visto muchas pruebas unitarias en juegos en comparación con otros proyectos de software que no son de juegos. Este tipo de prueba es bastante fácil de automatizar ya que proporciona comportamientos simulados que simula.

Para las pruebas de integración , interactúa con el juego "completo" en un momento dado, cuando todas las partes se están ejecutando. Dependiendo de la profundidad de las cosas que desea probar, veo que puede ser muy fácil imposible.

Una idea sería tener una construcción de "prueba de integración", que registre cada (la mayoría) de las acciones que realiza (es decir, monstruo de reproducción, sonido de reproducción, efecto de inicio, partícula de reproducción). Después de que se ejecuta durante un tiempo determinado, puede verificar los registros para ver si coincide con un patrón determinado (esto también depende de cuán aleatorio sea el juego, en función de las entradas). Ahora, esto suena simple, pero la pregunta es: ¿cómo le dices al juego que haga las acciones deseadas? Lo que me lleva a la segunda idea.

Otra idea sería tener un tipo de servidor en el juego, nuevamente, con fines de prueba, que sea capaz de procesar solicitudes (por ejemplo, a través de una API REST) ​​y que actúe sobre las entidades. Las solicitudes pueden ser cosas como: moverse hacia la izquierda, saltar, rotar X grados, cambiar la vista, etc. Con este enfoque también puede hacer las "verificaciones" de que el juego está funcionando como se esperaba, ya sea verificando el estado directamente o verificando un virtual registro de eventos que ocurrieron. Este enfoque lo utilizan otras herramientas de prueba de interfaz de usuario para móviles (por ejemplo, Xamarin Test Cloud)

Para la parte de control, si su juego está basado en el tacto / navegador, puede simular las acciones a través de un dispositivo virtual de entrada / toque, pero esto es un poco más difícil, dependiendo de la complejidad de las acciones.

Otra idea, con respecto al aspecto visual, es tomar algunas capturas de pantalla de referencia, imágenes durante una fase inicial, y compararlas después de que ocurra la misma secuencia de acción en una nueva versión. La comparación puede tener un margen de desviación específico, para evitar cambios menores. Durante las pruebas, puede registrar las pantallas que no coinciden y ver la diferencia. Es posible que las pantallas de referencia deban actualizarse debido a diferentes cambios. En ese caso, el juego podría ejecutarse nuevamente con las acciones preestablecidas, y las imágenes de referencia se actualizarán. Esto probablemente no funcionará muy bien con sistemas de partículas o escenas generadas aleatoriamente, a menos que use la idea anterior para establecer algún tipo de semilla, que se utiliza para generar las partículas.

Para los sonidos, puede ser un poco más difícil, ya que implicará "escuchar" el dispositivo OUT (que no siempre es posible IIRC, ya que depende del hardware del sistema). Pero si es posible, puede hacer la misma comparación basada en referencias que con las imágenes.

Espero que esto arroje algo de luz sobre cómo podría automatizar las pruebas del juego.

Edición posterior: solo veo que había otra pregunta relacionada que podría darle algunos consejos sobre cómo haría ciertos bits: Pruebas automáticas de juegos

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.