¿Qué estás buscando?
Hero background image
Consejos para probar y garantizar la calidad de los proyectos Unity
Esta página se ha traducido automáticamente. Para ver la versión original para comprobar su exactitud y como fuente confiable

Este artículo proporciona una introducción a diferentes prácticas de prueba que le ayudarán a enviar un proyecto más estable con Unity.

Las pruebas, o garantía de calidad (QA), son un proceso crítico que debe llevarse a cabo durante todo el ciclo de desarrollo del juego. Como bien saben los desarrolladores experimentados, cualquier código que se escriba debe probarse.

Hay una serie de métodos de prueba y control de calidad que puedes emplear, tanto si eres un desarrollador independiente como si formas parte de un gran equipo (los estudios consolidados suelen tener ingenieros de control de calidad dedicados).

Si te gusta jugar y/o ver deportes, sabrás que en muchos partidos es la defensa la que gana campeonatos. Piensa en tu proceso de control de calidad como una estrategia de defensa que no deja nada al azar cuando se trata de lanzar un juego con el mejor rendimiento y estabilidad posibles.

¿Por qué son importantes las pruebas y la garantía de calidad?

Las pruebas son cruciales para descubrir problemas como fallos en el código, artefactos visuales en las ilustraciones o problemas de experiencia de usuario en el diseño del juego y la jugabilidad. Puedes desarrollar el juego técnicamente más impresionante, pero si se bloquea nueve de cada diez veces, los usuarios lo abandonarán rápidamente.

¿Cuándo se deben realizar pruebas en el ciclo de desarrollo de un juego?

Evite dejar las pruebas para el final del proceso de desarrollo del juego. En lugar de pensar en las pruebas como una etapa de una secuencia, puede ayudar verlas como un proceso continuo que sustenta las demás etapas del desarrollo del juego. Ponga a prueba sus ideas y prototipos durante la producción y antes de enviarlos. Repite este proceso para cada actualización que publiques para tu juego.

Existen diversas técnicas de prueba que pueden adaptarse mejor a las distintas fases del proyecto.

¿Quién es responsable de las pruebas y el control de calidad?

¿Eres miembro de un pequeño estudio que no cuenta con un equipo de control de calidad? Reúna a un grupo de amigos para que le ayuden con las pruebas o recurra a un proveedor externo de control de calidad. Incluso los estudios que cuentan con un equipo interno de control de calidad suelen recurrir a una empresa externa para servicios de pruebas adicionales, como las pruebas de localización (LQA).

Las pruebas con jugadores, que pueden considerarse un subconjunto del control de calidad, ayudan a garantizar que el juego tenga resonancia entre el público y el mercado objetivo. Es un proceso que puede aportar valiosos comentarios de los jugadores para mejorar el juego durante la fase de desarrollo.

Las personas que deben participar en las pruebas de jugadores varían en función de los objetivos específicos de las mismas. Sin embargo, en general, es importante implicar a un grupo diverso de jugadores que representen al público objetivo del juego. Al implicar a distintos tipos de jugadores en las pruebas, los desarrolladores de juegos pueden recabar opiniones desde distintos puntos de vista y asegurarse de que el juego atrae a un público amplio.

¿Cómo controlar y probar un juego?

En las siguientes secciones, podrá leer sobre las técnicas de comprobación más comunes. Estos métodos pueden combinarse para garantizar que su código base funcione lo mejor posible.

También es importante probar el juego en una serie de dispositivos dentro de las plataformas de destino. Esto se aplicaría especialmente a los juegos para móviles; querrás probarlos en distintos sistemas operativos, tamaños de pantalla y en los dispositivos móviles de menor especificación. Esto le ayudará a determinar los requisitos mínimos de su dispositivo, y cada categoría debería revisarse constantemente cuando añada más funciones a su aplicación.

Las pruebas en distintas plataformas no sólo sirven para identificar posibles problemas que rompan el juego, sino que también es importante conocer las implicaciones indirectas o a largo plazo, como el agotamiento de la batería o el sobrecalentamiento térmico en los juegos para móviles.

Diálogo de pruebas unitarias en el editor de Unity
Pruebas unitarias

Las pruebas unitarias son una técnica que consiste en probar unidades o componentes individuales de un juego de forma aislada, lo que ayuda a detectar errores en una fase temprana del proceso de desarrollo y a evitar que los cambios en el código rompan la funcionalidad existente.

Las pruebas unitarias se realizan escribiendo pequeños casos de prueba que ejercitan comportamientos específicos del código. Las pruebas pueden ejecutarse en scripts individuales, GameObjects o características específicas del juego.

En el desarrollo de juegos deben utilizarse métodos de pruebas unitarias tanto manuales como automatizados.

Pruebas unitarias manuales

Las pruebas manuales consisten en que la gente juegue al juego para comprobar sus características y funcionalidad. Es importante realizar pruebas manuales porque hay problemas que las pruebas automatizadas podrían no detectar, como fallos de la interfaz de usuario o una jugabilidad o un diseño desequilibrados o mal ejecutados.

Un ejemplo de prueba unitaria manual en Unity sería agregar una condición de prueba para una función y usar Debug.Log para mostrar los criterios para que pase o falle (la salida de los escenarios de prueba) usando el modo Play de Unity.

Pruebas unitarias automatizadas

Las pruebas unitarias automatizadas requieren escribir código para probar automáticamente unidades individuales o fragmentos de código de forma aislada. En Unity, puedes escribir pruebas para scripts, componentes y otras unidades de código del juego que se pueden ejecutar como parte de un conjunto de pruebas.

El paquete Unity Test Framework (UTF) proporciona un marco para que los desarrolladores escriban sus propias pruebas automatizadas en los modos Editar y Reproducir en el Editor de Unity. UTF busca una prueba dentro de cualquier ensamblado que haga referencia a NUnit. Estos ensamblajes se denominan TestAssemblies. Las pruebas del modo de reproducción y del modo de edición deben estar en conjuntos separados.

UTF proporciona una ventana Test Runner en el Editor para ayudarle a ejecutar y gestionar sus casos de prueba.

Dado que UTF utiliza una definición de ensamblado de prueba, tendrá que dividir su proyecto en definiciones de ensamblado en tiempo de ejecución. Esto es más fácil de hacer cuando se planifica al principio del proceso de desarrollo; también anima a escribir código más modular.

El paquete Unity, Performance Testing Extension es una extensión que puede utilizar con el UTF. Proporciona API adicionales para realizar mediciones y proporcionar métricas personalizadas a partir de sus casos de prueba.

Aprende cómo empezar con el Framework de Pruebas de Unity leyendo el tutorial del Framework de Pruebas de Unity para el desarrollo de videojuegos.

Gráfico y tabla con historial de cobertura
Desarrollo basado en pruebas

El desarrollo dirigido por pruebas (TDD) es una técnica que consiste en escribir pruebas para una funcionalidad antes de escribir el código real para implementarla. El proceso suele consistir en escribir una prueba que falla, escribir la cantidad mínima de código necesaria para que la prueba pase y, a continuación, refactorizar el código para hacerlo más mantenible antes de pasar a diseñar el siguiente caso de prueba.

El TTD es bastante raro en el desarrollo de juegos (es más común en el desarrollo de software convencional). Probablemente se deba a que es un proceso contraintuitivo para crear prototipos y crear una jugabilidad divertida y atractiva.

Sin embargo, puede acelerar el proceso de identificación de las partes rotas de sus juegos, ya que cualquier cambio que rompa el juego creará inmediatamente casos de prueba fallidos.

Para obtener más información sobre TDD en Unity, consulte la entrada del blog "Testing Test-Driven Development with the Unity Test Runner".

Cobertura de código

Si desea implementar TDD o pruebas unitarias, considere usar el paquete Unity Code Coverage. Cuando se utiliza con UTF, el paquete Code Coverage puede mostrarle qué líneas de código de su proyecto se están probando para ayudarle a identificar las partes vulnerables o no probadas de su proyecto.

Code Coverage también puede generar informes mientras pruebas tu juego en modo Play. Esto le mostrará partes de su código a través de las cuales ejecuta pruebas regularmente, incluso si no están cubiertas por pruebas unitarias. Sin embargo, aunque los informes de cobertura del código muestran qué líneas de código se han cubierto en la prueba, no muestran las diferentes vías por las que ha fluido la lógica en el código.

Véase la entrada del blog "Code Coverage: Detecte lagunas en sus pruebas" para más información.

Pruebas de integración

Las pruebas de integración son una técnica que pone a prueba diferentes componentes de un sistema para garantizar que funcionan correctamente. Esto puede incluir probar cómo diferentes GameObjects, scripts o sistemas interactúan entre sí dentro del juego. Debido a su mayor alcance, las pruebas de integración pueden ayudar a detectar errores que quizá no aparezcan en las pruebas unitarias, como problemas con el flujo de datos o la comunicación entre componentes.

Por ejemplo, en lugar de utilizar pruebas unitarias individuales, se podría escribir una prueba de integración para toda esta secuencia: un jugador que dispara un arma que instancia una bala, la bala que golpea a un enemigo y lo mata, el jugador que obtiene puntos por matar al enemigo, y un logro que se desbloquea cuando el jugador alcanza una determinada puntuación.

Puede utilizar UTF para crear pruebas de integración en Unity. Los métodos SetUp y TearDown permiten crear un entorno para probar varios sistemas a la vez. La lógica y la entrada del jugador pueden ser simuladas, especialmente si las has implementado usando el Patrón de Comandos (y si estás usando el nuevo Sistema de Entrada entonces es probable que lo hayas hecho), para que puedas probar el flujo completo de la entrada del jugador a la lógica del juego.

Pruebas de regresión

Las pruebas de regresión son un método para verificar que el software o las funciones funcionan correctamente tras ser modificados o actualizados. El objetivo de las pruebas de regresión es garantizar que los cambios en el código base no introduzcan nuevos errores o regresiones en el software. Esta técnica se aplica mejor a aplicaciones grandes y complejas con actualizaciones frecuentes, como un juego en directo, donde puede haber muchos componentes diferentes que pueden interactuar de formas inesperadas.

A medida que se amplían el mundo y la mecánica del juego, también aumenta la necesidad de realizar pruebas de regresión, lo que puede resultar costoso. Por lo tanto, es importante automatizarlo siempre que sea posible. Las pruebas de regresión deben realizarse en paralelo con el desarrollo de nuevas funciones, especialmente si se dirigen a varias plataformas.

Aunque las pruebas de regresión son más adecuadas para juegos grandes y vivos, otros factores, como la complejidad del software, la frecuencia de los cambios o actualizaciones y la importancia crítica de las características afectadas (sistemas críticos para la misión o la seguridad) también determinan su necesidad.

Pruebas funcionales

Las pruebas funcionales evalúan la funcionalidad de un sistema o aplicación informática comparándola con sus requisitos funcionales. Implica probar las características del sistema, las interfaces de usuario, las interacciones con la base de datos y otros aspectos que afectan a su comportamiento y funcionalidad. El objetivo de las pruebas funcionales es verificar si el sistema o la aplicación cumplen los requisitos y especificaciones proporcionados por el cliente o usuario final.

La mayoría de las pruebas unitarias se centran en una ruta específica a través del código, comprobando si devuelve los resultados correctos en función de determinadas entradas. No es capaz de probar si el juego hace lo que está diseñado para hacer.

Las pruebas funcionales son el enfoque para ello. Cada función o característica se compara con el diseño original para ver si el resultado cumple las expectativas. Esto puede incluir probar los controles del juego, la mecánica de juego y la experiencia general del usuario.

Puede ser útil tener en mente las pruebas funcionales al desarrollar el juego y crear tareas con el enfoque "cuando esto, entonces aquello". Por ejemplo, cuando el jugador pulsa la barra espaciadora, el personaje debe saltar: Se trata tanto de instrucciones para el desarrollador sobre cómo debe implementar una función como de un criterio de aceptación para que lo compruebe el evaluador. A veces, una característica puede incluir algunos criterios de aceptación relacionados, como cuándo se puede y cuándo no se puede utilizar. Pero, por lo general, deben centrarse en una única funcionalidad.

Las pruebas funcionales son más eficaces cuando los requisitos están claramente definidos y delimitados. Por tanto, puede ser útil para contratar autónomos o estudios que entreguen componentes de su jugabilidad o activos del mundo del juego.

Puede ejecutar pruebas funcionales tanto automatizadas como manuales. Deben realizarse tanto pruebas de "caja negra" (probar el sistema sin conocer su funcionamiento interno) como de "caja blanca" (probar el sistema conociendo su funcionamiento interno).

Gráfico GPU para juego
Pruebas de rendimiento

Las pruebas de rendimiento consisten en comprobar que el juego se ejecuta con fluidez y eficacia en distintas configuraciones de hardware y software. Esto está estrechamente relacionado con la creación de perfiles y los flujos de trabajo generales de optimización del rendimiento, y esta práctica puede ayudar a identificar cuellos de botella o problemas de rendimiento que puedan afectar al rendimiento del juego.

El objetivo clave es evaluar el rendimiento de un sistema o aplicación en diferentes condiciones de carga de trabajo. En el desarrollo de juegos, las pruebas de rendimiento miden si el juego se ejecuta con un nivel aceptable de rendimiento, velocidad de fotogramas, capacidad de respuesta y estabilidad, y si utiliza la memoria de la forma más eficiente.

Los distintos tipos de pruebas de rendimiento incluyen:

  • Pruebas de carga: Determina el rendimiento del juego cuando se somete a grandes cargas de trabajo.
  • Pruebas de estrés: Evalúa cómo maneja el juego situaciones inesperadas, como aumentos repentinos de la actividad de los jugadores.
  • Pruebas de resistencia: Evalúa el rendimiento del juego durante largos periodos de tiempo.

El perfil de unidad

La herramienta Profiler de Unity te ayuda a analizar el rendimiento de tu juego a medida que lo desarrollas. Funciona tanto en el Editor, proporcionando una visión general mientras desarrollas, como en cualquier dispositivo conectado a tu máquina por cable o a través de una red local, proporcionando un análisis preciso de cómo se ejecuta tu juego en un dispositivo de destino.

Profiler puede ampliarse para personalizar la presentación tanto del tipo de datos que desea capturar como de la forma en que se presentarán visualmente en la ventana de Profiler.

Obtenga más información sobre la personalización de Profiler en la sesión de Unite 2022 "Cómo personalizar las métricas de rendimiento en Unity Profiler".

También puede escribir sus propias herramientas para crear pruebas de rendimiento automatizadas. Para un interesante debate sobre cómo enfocar esto, echa un vistazo a la charla de los desarrolladores de Monument Valley, ustwo Games, en Unite 2022: "Haciendo Alba: Cómo crear un juego de mundo abierto eficaz."

Pruebas A/B sobre métricas y eventos
Pruebas A/B

Las pruebas no se limitan a encontrar errores y controlar el rendimiento. A veces, es posible que desee comparar dos versiones de una característica del juego para determinar cuál de ellas consigue una mayor participación de los jugadores y obtiene mejores resultados. Es lo que se conoce como pruebas A/B.

Las pruebas A/B resultan útiles para modificar las estadísticas de un personaje o unas armas que afectarían al equilibrio de tu juego, pero sin cambiar la mecánica del mismo. Otros ejemplos podrían ser las pruebas realizadas para comparar la eficacia de diferentes tutoriales, mecánicas de juego o interfaces de usuario. Analizando los datos recogidos de los dos grupos, puede identificar qué versión del juego o función es más eficaz y tomar decisiones basadas en datos sobre qué cambios incorporar al producto final.

Las pruebas A/B consisten en asignar aleatoriamente jugadores a dos grupos: Un grupo juega a la versión original del juego o la función (el grupo de control), mientras que el otro grupo juega a una versión modificada del juego o la función (el grupo experimental).

La clave está en recopilar datos sobre cómo afectaron los distintos cambios a un pequeño grupo de jugadores para ayudarte a tomar una decisión de diseño sobre qué enfoque lanzar como actualización generalizada.

Las pruebas A/B pueden ayudar a mejorar la experiencia del usuario y aumentar el compromiso y la retención de los jugadores. Resulta especialmente útil para juegos con grandes bases de usuarios, en los que incluso pequeñas mejoras en la participación o retención de usuarios pueden tener un impacto significativo.

Las pruebas A/B suelen ofrecerse como un servicio de backend, sin que los jugadores sepan siquiera que están utilizando una variante diferente. Unity Gaming Services (UGS) dispone de herramientas para ayudarte a realizar pruebas A/B en tu juego, sobre las que puedes obtener más información aquí. También puede consultar los casos de uso de UGS, una colección de ejemplos de nuestros servicios backend, para explorar ejemplos de cómo podría configurar las pruebas A/B en un juego.

Herramientas de prueba de diagnóstico

Cloud Diagnostics Advanced es una herramienta de análisis e informes de fallos, desarrollada por Backtrace, que se integra con Unity para proporcionar a los desarrolladores información detallada sobre fallos y excepciones en sus juegos. Cuando se produce un fallo, Cloud Diagnostics Advanced captura una instantánea del estado del juego en el momento del fallo, incluida información sobre el entorno, la pila de llamadas, la pila y los registros. A continuación, esta instantánea se envía a los servidores de Backtrace, donde se analiza para determinar la causa raíz del fallo.

Cloud Diagnostics Advanced también proporciona herramientas detalladas de análisis e informes, que pueden ayudarle a identificar tendencias y patrones en el rendimiento y la estabilidad de sus juegos a lo largo del tiempo. Un algoritmo de deduplicación agrupa los fallos comunes según su causa raíz en el código, lo que puede utilizarse para ayudar a priorizar qué errores hay que corregir primero para mejorar la estabilidad del mayor número posible de jugadores.

Más recursos de control de calidad para desarrolladores de juegos

Independientemente de las técnicas de prueba que utilices, es importante contar con un plan para probar tu juego y asegurarte de que las pruebas forman parte integral de tu proceso de desarrollo. Utilizando una combinación de estas técnicas, puede asegurarse de que su juego Unity sea de la máxima calidad y esté listo para la producción.

Unity pone a disposición de los programadores una nueva serie de libros electrónicos gratuitos. Cada guía está escrita por programadores experimentados y ofrece las mejores prácticas para temas específicos que son importantes para los equipos de desarrollo.

Crear una guía de estilo de C#: Escribir código más limpio y escalable guía a los equipos en el desarrollo de una guía de estilo que les ayude a unificar su enfoque para crear una base de código más cohesionada.

Mejora tu código con patrones de programación de juegos destaca las mejores prácticas para utilizar los principios SOLID y los patrones de programación comunes para crear una arquitectura de código de juego escalable en tu proyecto Unity.

Crear una arquitectura de juego modular en Unity con ScriptableObjects proporciona las mejores prácticas para desplegar ScriptableObjects en la producción de juegos.

Hemos creado esta serie para ofrecer consejos prácticos e inspiración a nuestros creadores más experimentados. Pero no son libros de reglas. Hay muchas maneras de estructurar tu proyecto Unity; evalúa las ventajas y desventajas de cada recomendación, consejo y patrón con tus colegas antes de implementarlo.

Encuentre más guías y artículos avanzados en el hub de mejores prácticas de Unity.

¿Te gustó este contenido?