Como estoy certificado por Scrum, tiendo a utilizar metodologías ágiles mientras desarrollo un sistema, e incluso utilizo algunos lienzos del marco de Scrum para administrar mi trabajo diario.
Además, me pregunto si TDD es una opción en el desarrollo de juegos, si es viable.
Si creo en esta pregunta de GD, TDD no es de mucha utilidad en el desarrollo de juegos.
¿Por qué MVC y TDD no se emplean más en la arquitectura del juego?
Vengo de la programación industrial donde los grandes proyectos con grandes presupuestos deben funcionar sin problemas, ya que podría dar lugar a escenarios catastróficos si el código no se probara exhaustivamente por dentro y por fuera.
Además, seguir las reglas de Scrum alienta el cumplimiento de las fechas de vencimiento de su trabajo, ¡mientras que cada acción en Scrum tiene un tiempo límite! Entonces, estoy de acuerdo cuando en la pregunta vinculada anteriormente dicen que dejen de intentar construir un sistema y comiencen a escribir el juego. Es todo lo que dice Scrum, primero trata de no construir el sistema perfecto: haz que funcione al final del Sprint. Luego, refactorice el código mientras trabaja en el segundo Sprint si es necesario.
Entiendo que si no todos los departamentos responsables del desarrollo del juego usan Scrum, Scrum se vuelve inútil. Pero consideremos por un momento que todos los departamentos usan Scrum ... Creo que TDD sería bueno para escribir código libre de errores, aunque no desea escribir el sistema / juego "perfecto".
Entonces mi pregunta es la siguiente:
¿TDD es viable en el desarrollo de juegos de todos modos?
fuente
Respuestas:
Ciertamente es viable, aunque muchos programadores de juegos aún no se han embarcado en la idea, o tienen una buena comprensión de cómo probar sistemas complicados. Admito que rara vez lo uso, a excepción de los sistemas no relacionados con el juego que son fáciles de probar.
Espere usar muchos objetos simulados. Debido a lo unidos que están muchos sistemas, es difícil probar los componentes individuales de eso.
Además, muchas cosas no se pueden probar a fondo. ¿Cómo se prueba, por ejemplo, un sistema de partículas? ¿Cómo prueba que su sistema de animación funciona correctamente? Muchas cosas son de naturaleza visual y no son obvias (al menos para mí) en cuanto a cómo realizar las pruebas adecuadas.
Sin embargo, hay muchas cosas que no son necesariamente pruebas unitarias en el sentido tradicional de la palabra, pero que existen como "pruebas" para características específicas. Cosas como los niveles de prueba para la navegación AI son bastante comunes, pero no son necesariamente las cosas más fáciles de automatizar.
Hay ciertos aspectos de los juegos que pueden (y probablemente deberían) tener pruebas unitarias escritas para ellos. Cualquier tipo de sistema genérico de "lectura de archivos" debe ser probado. Tal vez tenga algunas pruebas para la inicialización de cosas de hardware (superficies 3d, etc.). Tal vez tenga algunos servidores simulados y pruebe su código de interacción cliente / servidor. Ese tipo de cosas.
fuente
Keys.Down
,Keys.Left
etc. Eso quiere decir que el juego sabe dónde está el usuario desea la serpiente para ir, y la serpiente tiene que ir donde el juego le dice que, sin embargo, que no es más que la serpiente que se sabe moverse en las diferentes direcciones, por lo tanto, también de su posición en el juego. Habiendo dicho esto, en mi humilde opinión, hace que laSnake
clase sea comprobable! (Continuará ...)Vector2.Zero
, con una velocidad de los10.0f
ejes X e Y en este juego 2D. La primera pregunta es: ¿está posicionado en su supuesta posición inicial y cómo probarlo? Entonces, usted piensa que laPosition
propiedad estará expuesta públicamente. Segundo: ¿cómo hacer que se mueva? Los métodos de movimiento deben ser buenos, por lo que debe escribir una prueba para cada método de direcciónMoveDown
,MoveLeft
y así sucesivamente. Ahora, vaya y escriba su declaración de método y vea si la prueba se queja. Luego, vuelva a verificar la posición de la serpienteMoveDown
llamada al método! Como sabe que laPosition
propiedad se ha probado exhaustivamente, ¡es un miembro con el que puede contar! ¡Puedes adivinar la continuación aquí! ;-) Es decir que los componentes visuales definitivamente no pueden ser probados, pero la serpiente debe verse como una serpiente, todo dependiendo de qué tipo de serpiente quieras en el juego. El artista que dibuja la serpiente debe demostrar la suficiente satisfacción con su dibujo de la serpiente, ¡eso no se probará a través de TDD, por supuesto! Pero su posición con respecto a otros objetos puede, y la clase que representa a esta serpiente también. De hecho, TDDNo creo que TDD, como tal, sea apropiado como base para el desarrollo del juego. Las pruebas unitarias automatizadas como parte de la metodología, claro, pero muchas de las preocupaciones clave del desarrollo del juego son subjetivas y no pueden probarse en la máquina para que las pruebas sean el motor del desarrollo. ¿Cómo vas a escribir una prueba con guión para determinar si una mecánica de juego es divertida? ¿Que un nivel es visualmente atractivo? ¿Incluso si un nivel le toma a un jugador típico alrededor de 15 minutos en completarse? TDD se ajusta a situaciones en las que la madurez de un proyecto se puede medir cuantitativamente en términos de su cumplimiento de una especificación, y eso simplemente no es desarrollo de juegos.
fuente
Es un poco difícil determinar exactamente lo que está preguntando, ya que el título trata exclusivamente de TDD, pero parece que también está haciendo de Scrum una parte integral de la pregunta, y según tengo entendido, uno no requiere el otro.
Eso es correcto. No creo haber oído hablar de él en la práctica en la industria de los juegos. (Pero tampoco supe que se usara fuera de la industria de los juegos, solo por individuos).
Los juegos no necesitan funcionar sin problemas. Por lo tanto, hay mucho menos énfasis en la corrección del código. TDD no garantiza la corrección del código, pero algunas personas sienten que reduce la incorrección. Todavía tengo que ver pruebas de esto.
Nunca he visto una metodología que no alienta el cumplimiento de las fechas de vencimiento, o que tenga acciones que no hayan sido programadas. El problema es que no importa qué metodología uses, estimar la complejidad del software es bastante difícil. No es imposible, pero estimarlo con precisión no tiene mucho que ver con el proceso. Si mi tarea es agregar un nuevo panel GUI, o corregir un error con la animación, o agregar una nueva estadística a los personajes, entonces el uso de Scrum no va a acelerar eso en absoluto, y el uso de TDD va ralentizar la tarea (en el posible beneficio de reducir más tareas de mantenimiento más adelante). Ciertamente no van a facilitar la estimación de la duración de la tarea.
Si se ha demostrado que TDD escribe un código mejor que otros métodos, entonces sí.
¿Hay pruebas de esto? El hecho de que la industria pueda usarlo no es una prueba. La industria es conocida por producir código pobre que se entrega tarde. La ausencia de ejemplos de proyectos importantes de TDD que hayan fallado o se hayan retrasado puede deberse a que se trata de un nuevo enfoque y pocas personas realmente han terminado dicho proyecto todavía. (Y los que están llegando tarde ... aún pueden estar funcionando).
¿Viable? Por supuesto. ¿Beneficioso? Eso aún no se ha probado.
fuente
Spacecraft
clase se convierte en una clase totalmente comprobable con métodos y propiedades. Este es el tipo de cosas que absolutamente, en mi humilde opinión, se pueden probar completamente con TDD. Digamos que necesita una nave espacial, luego escribe las pruebas de lo que necesita para realizar una prueba a la vez.perdón por mi pobre inglés y perdón por mi punto de vista parcial: no soy diseñador de juegos sino codificador.
Creo que hay algunos malentendidos en esta discusión. Hablaré sobre TDD en forma más general, el llamado BDD. El desarrollo impulsado por el comportamiento no es una forma de probar el proyecto (las pruebas son algo así como los efectos secundarios). BDD es una forma de diseñar , una forma de refactorizar y diseñar software durante toda la producción (ver algunos lemas como KISS, "mantener la calidad", "probar temprano, probar a menudo") y no en una sola fase. BDD es lo opuesto a algún proceso de software clásico como el proceso en cascada o alguna otra metodología iterativa para hacer software.
Otro punto es que las pruebas automáticas son para aquellas características que podrían ser probadas automáticamente por una máquina computacional. no hay prueba de diversión en los juegos, y no hay prueba de usabilidad de una interfaz gráfica de usuario. la diversión o la usabilidad son materiales para otros trabajos y no para el desarrollo de software como diseñador de interacción, mundo y nivel d. de la misma manera que las partes artísticas (modelado, texturizado, etc.) son para artistas que usan computadoras como herramienta para la creatividad, obviamente esos trabajos podrían ser realizados por la misma persona que escribe el código, pero este no es el punto. la física podría ser probada, los algoritmos de optimización podrían ser probados, los comportamientos de objetos individuales podrían ser probados (con simulacros, trozos y ficticio como se mencionó anteriormente)
Lo último que pienso es que, en mi opinión, no solo el diseño del juego sino todo el código de escritura es un arte.
fuente
Aquí hay un caso de estudio de alguien que piensa que TDD y gamedev se mezclan bastante bien:
http://powertwenty.com/kpd/downloads/TestDrivenDevelopmentInPython.pdf
Es cierto que este es un pequeño proyecto en Pygame, pero da la idea de qué partes se pueden probar con un juego gráfico y cuáles no. Me sorprendió lo mucho que se podía hacer con TDD en este escenario.
fuente
No, Test Driven Development no es adecuado para Game Development. Claro que puede escribir pruebas para algunas partes que desea probar, pero el proceso de Desarrollo del juego es completamente diferente del Desarrollo conducido por prueba, que requiere tener especificaciones exactas antes de comenzar el progreso.
Los juegos rara vez tienen especificaciones exactas cuando se inician. Y si lo hacen, siempre cambian y evolucionan durante el proceso de desarrollo.
El diseño del juego es un arte, no puedes tener pruebas específicas para saber cuándo el arte es bueno o completo.
fuente