C'est ça? Peut être. À mon avis, cela ferait un très mauvais ajustement pour les logiciels de divertissement en général, même si cela pourrait bien fonctionner pour les bibliothèques de bas niveau.
EDIT: Voici une justification de mon opinion.
Wikipédia définit le BDD comme une technique qui "encourage la collaboration entre les développeurs, le contrôle qualité et les participants non techniques ou commerciaux à un projet logiciel". Cela semble déjà être une mauvaise idée car les jeux diffèrent de la plupart des logiciels en ce qu'ils ne sont pas conçus comme des outils pour répondre à un besoin spécifique d'un `` participant non technique ou professionnel '', mais sont des œuvres cohérentes largement conçues pour divertir. L'accent est mis sur le «comportement logiciel souhaité», mais les jeux ont rarement le «comportement logiciel souhaité», sauf au niveau technique. Il est certainement intéressant de vérifier cette partie du code, mais pas avec l'utilisateur final, car ils ne le verront jamais.
Mais supposons que vous vouliez jeter ces trucs de parties prenantes humaines et utiliser simplement BDD pour appliquer des contrats entre différents modules de code, ce qui, à ma connaissance, ne diffère pas beaucoup du développement normal piloté par les tests, que je considère également mal- adapté aux jeux, pour la raison suivante.
Les tests sont utiles pour vérifier que des événements discrets se sont produits comme prévu. Cela fonctionne bien dans la programmation événementielle, c.-à-d. la plupart du monde du logiciel, où une action est effectuée, une sortie est générée, puis vous vérifiez simplement que l'action et le résultat correspondent. Cependant, le logiciel de jeu est généralement une simulation, où une action n'a pas un résultat discret mais un changement continu de l'état du monde. Si mon joueur caché fait du bruit, je pourrais vouloir vérifier que l'IA me traque. Donc, je peux créer un test pour m'assurer que l'IA est en état de «chasse» après la création d'un bruit, et c'est génial. Mais comment puis-je savoir que la chasse fonctionne même? Vous ne pouvez pas le vérifier instantanément - vous ne pouvez l'observer qu'au fil du temps.
De plus, une approche basée sur le test peut créer un faux sentiment de sécurité et amener les gens à croire que le code est meilleur qu'il ne l'est vraiment.
def check_dice_roll_in_range():
d = new Dice()
assert(d.roll() between 1 and 6)
class Dice:
def roll():
return 4
Puisqu'un résultat de test peut donner un faux positif, vous ne pouvez jamais échapper au besoin de base de vérifier le code lui-même. Mais si le code lui-même est vérifié correctement, le test prend une importance secondaire. C'est pourquoi, à mon avis, les tests sont mieux utilisés après l'événement, pour tester les corrections de bugs.
Je ne dirais pas qu'il n'y a jamais aucun avantage à tester que, lorsque les objets X et Y fonctionnent ensemble, le résultat que vous obtenez est comme prévu. La question est de savoir si vous utilisez le moyen le plus efficace de vérifier cela. Les méthodes peuvent inclure une vérification formelle, une révision du code, des méthodes de test en premier, des méthodes de test en dernier, des tests de boîte noire AQ traditionnels, ou simplement en utilisant le code comme prévu et en observant les résultats. Les deux dernières options sont étonnamment efficaces la plupart du temps, car malgré le fait qu'elles semblent manquer de rigueur, la plupart des bogues sont détectés au cours d'une utilisation typique, et comprendre un bogue dans son contexte naturel peut parfois être plus facile que de le comprendre dans un test artificiel. harnais. En plus de cela,
Donc, en résumé, je pense que le développement piloté par les tests n'est pas nécessairement un excellent choix pour les logiciels, que les tests seuls ne sont jamais suffisants pour garantir la qualité des logiciels (et donc le temps passé à les écrire doit être comparé aux utilisations alternatives de ce temps de développeur), que les jeux correspondent particulièrement mal aux scénarios de test automatisés, et que les jeux correspondent particulièrement aux méthodes de développement qui mettent l'accent sur la «valeur commerciale» et les «tests d'acceptation».
(J'espère que c'est une meilleure réponse, même si vous n'êtes pas d'accord avec mes points.)