==== Test Plan =====
== introducción ==
Para empezar voy a hacer una pequeña introducción acerca del testing para luego pasar a plantear los temas de discusión. Tengo que decir que es una visión bastante técnica, quizás alguien pueda aportar una visión un de diseñador.
El testing, sobretodo en los últimos años ha tomado una mayor importancia en el proceso de desarrollo. Parece lógico, a medida que las aplicaciones crecen - un juego no deja de ser una aplicación más - aumenta su complejidad y por tanto son necesarios mecanismos de testing más avanzados. Atrás quedó cuando el mismo desarrollador probaba su software o había una serie de personas, mal llamados testers, que se "comían el marrón" en la búsqueda de bugs. Cada vez está más visible la figura de la persona de QA, muy cualificada, que es capaz de automatizar cualquier tipo de test.
Existen diferentes tipos de test, que se pueden diferenciar por su forma de ser ejecutados (manual, automático) o por las diferentes partes que queremos probar. Enumero los más interesantes:
- Test unitarios: son test que se ejecutan sobre pequeñas partes del código para asegurar su correcto funcionamiento. Son los primeros que se deben desarrollar (que no plantear), y normalmente es el propio desarrollador el que los desarrolla. Estos test son súmamente importantes porque avisan al desarrollador, el primero en la cadena, que algo puede estar funcionando mal. Ver [1]
- Test de integración: Son similares los test unitarios, pero esta vez prueban si el funcionamiento de unos módulos con otros es correcto.
- Smoke Test: Es un test de integración de alto nivel. Como curiosidad el nombre viene de los test que se hacen a las placas electrónicas, si se enchufa y sale humo... malo. Es, por decirlo de alguna forma los test mínimos que debe pasar un juego para que se tenga en cuenta. Por ejemplo, si estamos haciendo un juego de naves un smoke test podría ser tal que así:
- el juego debe arrancar correctamente
- la nave debe moverse cuando se pulsan los cursores
- debe haber enemigos que disparen
- se debe poder pasar de fase
Este tipo de test debe ser automático
Son cosas muy simples, de muy alto nivel, que permiten discernir rápidamente si esa versión está suficientemente madura como para iniciar un proceso de pruebas más serio, esto es, hacer un proceso manual. De otra forma estaríamos perdiendo el tiempo.
- Test de historias de usuario: en el comienzo del juego se deben hacer marcado una serie de requisitos, marcados en el documento de diseño y acordados con el cliente (si lo hubiese). Cada uno de los requisitos que se plantean deben tener una serie de test cases asociados que certifiquen que se cumple. Por ejemplo, pongamos que uno de los requisitos es que se pudiesen escoger 3 tipos de naves. Por tanto un test asociado debería ser: Cuando el usuario está en la pantalla de selección de nave debe poder escoger azul negro y blanco. Cada vez es más común acercar estas historias de usuario al un nivel alto usando lenguajes intermedios, ver el framework rspec[2]
- Test de usabilidad: El juego además de cumplir todos los requisitos debe poder ser jugable y estar equilibrado. Este es un proceso continuo que debe empezar en el prototipo del mismo y es uno de los más importantes. Este test es habitualmente manual

== planificación de un test plan ==
Hay que tener claro algo, el testing DEBE comenzar en el mismo momento que se escribe la primera linea de código y debe ser un proceso continuo. (en mi opinión, aquí comienza el debate)
Mi planteamiento de un test plan debe ser más o menos así:
- Toma de requisitos y redacción de los primeros test de historias de usuario de muy alto nivel
- Comienzo del desarrollo: test unitarios + test de integración
- En el momento que haya una primera versión jugable tener un smoke test, si puede ser automático mejor que mejor
- SI el juego pasa el smoke test ENTONCES y solo entonces pasa a ser testeado manualmente para ver se van cumpliendo los requisitos
- Además se debe ir dando feedback sobre la jugabilidad y otros detalles que quizá sea necesario modificar en el documento de diseño, nadie es perfecto

En general ese debe ser el planteamiento para cualquier juego, sin embargo, una vez terminadas esas pruebas debemos centrarnos en detalles más enfocados a producción:
- En juegos para móvil probar que funciona en los terminales deseados,
- En juegos flash probad que funciona en las versiones de flash más habituales, etc.
- Comprobar que los shaders son compatibles con ATI y nVidia
- requisitos de sistemas, etc, etc
Además existe un testeo de mantenimiento. Pongamos que hemos terminado una versión y hemos sacado a producción, llega un bug, el desarrollador lo corrige, entonces deben pasar todos los test automáticos, el smoke test y luego una pequeña prueba manual para comprobar que efectivamente todo está ok. Por ejemplo, en el caso de móviles sería comprobar el juego en las 3 resoluciones y marcas más comunes.
== conclusiones ==
Lo ideal es mantener un proceso de test lo más automático posible, cosa bastante difícil y hacer que sea un proceso continuo [3] y no un testing final donde se encuentran muchísimos problemas que hace que la corrección sea un verdadero infierno.
Me dejo en el tintero muchísima información técnica, pero tampoco es cuestión de abusar, creo que ha quedado un poco coder-style. Mañana veo si puedo poner un test plan de un juego para móvil de desarrollo corto.
- referencias
[1]
http://es.wikipedia.org/wiki/XUnit [2]
http://rspec.info/ [3]
http://es.wikipedia.org/wiki/Continuous_integration== preguntas ==
- ¿ crees que el proceso de testing debería empezar al comienzo del desarrollo del proyecto o lo consideras una pérdida de tiempo? qué opinas del TDD (test driven development)
- ¿ un tester debe tener un perfil técnico o un perfil de jugador ? ¿ qué tipo de jugador ? ¿ un hardcore ?
- ¿ se debe implicar a un posible cliente en el proceso de test?
- ¿ qué porcentaje de tiempo de un proyecto debería irse en testing manual ? por ejemplo en un desarrollo corto de un juego flash o desarrollo de un juego para móvil (2 semanas)
- ¿ cuándo es el momento de sacar a producción un juego? ¿ se deben tolerar ciertos bugs ? Si es así, qué tipo de bugs
- ¿ Te gustaría ser tester? ¿ crees que es un trabajo divertido?

- ¿ Te da miedo sacar tu juego a la calle por que no vaya a funcionar ?