¿Lo es? Tal vez. Mi opinión sería que sería un ajuste muy pobre para el software de entretenimiento en general, aunque podría funcionar bien para las bibliotecas de bajo nivel.
EDITAR: Aquí hay alguna justificación para mi opinión.
Wikipedia define BDD como una técnica que "fomenta la colaboración entre desarrolladores, control de calidad y participantes no técnicos o empresariales en un proyecto de software". Esto ya parece una mala idea porque los juegos difieren de la mayoría del software en que no están diseñados como herramientas para satisfacer una necesidad específica de un "participante no técnico o comercial", sino que son trabajos coherentes diseñados en general para entretener. Hay un énfasis en el "comportamiento de software deseado", pero los juegos rara vez tienen un "comportamiento de software deseado", excepto a nivel técnico. Definitivamente hay mérito en verificar esa parte del código, pero no con el usuario final, porque nunca lo verán.
Pero supongamos que desea deshacerse de las cosas de los interesados humanos y simplemente usar BDD para hacer cumplir los contratos entre diferentes módulos de código, que, hasta donde puedo ver, no difiere mucho del desarrollo normal basado en pruebas, que también considero mal. adecuado para juegos, por la siguiente razón.
Las pruebas son útiles para verificar que eventos discretos ocurrieron cuando se esperaban. Esto funciona bien en la programación basada en eventos, es decir. La mayor parte del mundo del software, donde se realiza una acción, se genera una salida y luego simplemente verifica que la acción y el resultado coincidan. Sin embargo, el software del juego suele ser una simulación, donde una acción no tiene un resultado discreto sino un cambio continuo en el estado mundial. Si mi jugador oculto hace un ruido, me gustaría comprobar que la IA me persiga. Por lo tanto, puedo crear una prueba para asegurarme de que la IA esté en estado de 'caza' después de crear un ruido, y eso es genial. Pero, ¿cómo sé que la caza incluso funciona? No puede verificar eso instantáneamente, solo puede observarlo a lo largo del tiempo.
Además, un enfoque de prueba primero puede crear una falsa sensación de seguridad y hacer que las personas crean que el código es mejor de lo que realmente es.
def check_dice_roll_in_range():
d = new Dice()
assert(d.roll() between 1 and 6)
class Dice:
def roll():
return 4
Dado que el resultado de una prueba puede dar un falso positivo, nunca puede escapar de la necesidad básica de verificar el código en sí. Pero si el código en sí se verifica adecuadamente, la prueba adquiere una importancia secundaria. Por eso, en mi opinión, las pruebas se utilizan mejor después del evento, para probar las correcciones de errores.
No diría que nunca hay ningún beneficio en probar que, cuando los objetos X e Y funcionan juntos, el resultado que obtienes es el esperado. El problema es si está utilizando la forma más efectiva de verificar esto. Los métodos podrían incluir la verificación formal, una revisión del código, los métodos de prueba primero, los métodos de última prueba, la prueba tradicional de caja negra de control de calidad, o simplemente usar el código como se esperaba y observar los resultados. Las dos últimas opciones son sorprendentemente efectivas la mayor parte del tiempo, porque a pesar de parecer que carecen de rigor, la mayoría de los errores se encuentran durante el uso típico, y comprender un error en su contexto natural a veces puede ser más fácil que comprenderlo en una prueba artificial aprovechar. En la parte superior de esta,
Entonces, en resumen, creo que el desarrollo impulsado por pruebas no es necesariamente una gran opción para el software, que las pruebas por sí solas nunca son suficientes para garantizar la calidad del software (y, por lo tanto, el tiempo dedicado a escribirlas debe compararse con los usos alternativos de ese tiempo de desarrollador), que los juegos son una combinación especialmente pobre para los casos de prueba automatizados, y que los juegos son una combinación especialmente pobre para los métodos de desarrollo que buscan enfatizar el "valor comercial" y las "pruebas de aceptación".
(Espero que sea una mejor respuesta, incluso si no está de acuerdo con mis puntos).