En tant que certifié Scrum, j'ai tendance à privilégier les méthodologies Agiles lors du développement d'un système, et même à utiliser un canevas du framework Scrum pour gérer mon travail quotidien.
D'ailleurs, je me demande si TDD est une option dans le développement de jeux, si elle est viable?
Si je crois à cette question GD, TDD n'est pas très utile dans le développement de jeux.
Pourquoi MVC et TDD ne sont-ils pas davantage employés dans l'architecture de jeu?
Je viens de la programmation industrielle où de grands projets avec de gros budgets doivent fonctionner sans problème, car cela pourrait entraîner des scénarios catastrophiques si le code n'était pas rigoureusement testé à l'intérieur comme à l'extérieur.
De plus, le respect des règles Scrum encourage le respect des dates d'échéance de votre travail alors que chaque action dans Scrum est limitée dans le temps! Donc, je suis d'accord quand dans la question liée ci-dessus, ils disent d'arrêter d'essayer de construire un système et de commencer à écrire le jeu. C'est tout à fait ce que Scrum dit, essayez de ne pas construire le système parfait, d'abord: faites-le fonctionner à la fin du Sprint. Ensuite, refactorisez le code tout en travaillant dans le deuxième Sprint si nécessaire!
Je comprends que si tous les départements responsables du développement du jeu n'utilisent pas Scrum, Scrum devient inutile. Mais considérons un instant que tous les départements utilisent Scrum ... Je pense que TDD serait bien d'écrire du code sans bug, même si vous ne voulez pas écrire le système / jeu "parfait".
Ma question est donc la suivante:
Est-ce que TDD est viable dans le développement de jeux de toute façon?
la source
Réponses:
C'est certainement viable, bien que beaucoup de programmeurs de jeux n'aient pas encore vraiment adhéré à l'idée, ou aient une bonne compréhension de la façon de tester des systèmes complexes. Je m'avoue que je l'utilise rarement, sauf pour les systèmes non liés au gameplay qui sont faciles à tester.
Attendez-vous à utiliser beaucoup d'objets fictifs. En raison du lien entre de nombreux systèmes, il est difficile de tester des composants individuels de cela.
De plus, beaucoup de choses ne peuvent pas être testées de manière approfondie. Comment testez-vous, disons, un système de particules? Comment testez-vous que votre système d'animation fonctionne correctement? Beaucoup de choses sont de nature visuelle et ne sont pas évidentes (du moins pour moi) quant à la façon de faire des tests appropriés.
Il y a cependant beaucoup de choses qui ne sont pas nécessairement des tests unitaires au sens traditionnel du terme, mais qui existent en tant que "tests" pour des fonctionnalités spécifiques. Des choses comme les niveaux de test pour la navigation par IA sont assez courantes, mais ne sont pas nécessairement les choses les plus faciles à automatiser.
Il y a certains aspects des jeux qui peuvent (et devraient probablement) avoir des tests unitaires écrits pour eux. Tout type de système générique de «lecture de fichiers» doit être testé. Peut-être avoir des tests pour l'initialisation de choses matérielles (surfaces 3D, etc.). Peut-être avoir des serveurs fictifs et tester votre code d'interaction client / serveur. Des choses comme ça.
la source
Keys.Down
,Keys.Left
etc. Que dire que le jeu sait où l'utilisateur veut que le serpent d'aller, et le serpent doit aller là où le jeu , il dit à, bien que ce soit seulement le serpent qui sait comment de se déplacer dans les différentes directions, donc aussi de sa position dans le jeu. Cela dit, à mon humble avis, rend laSnake
classe testable! (A suivre ...)Vector2.Zero
, avec une vitesse10.0f
sur les axes X et Y dans ce jeu 2D. La première question est: est-il positionné à sa position initiale supposée et comment le tester? Ensuite, vous pensez que laPosition
propriété doit être exposée publiquement. Deuxièmement: comment le faire bouger? Les méthodes de mouvement doivent être bonnes, vous devez donc écrire un test pour chaque méthode de directionMoveDown
,MoveLeft
etc. Maintenant, allez écrire votre déclaration de méthode et voyez si le test se plaint. Ensuite, revérifiez la position du serpentMoveDown
appel de méthode! Puisque vous savez que laPosition
propriété est minutieusement testée, c'est un membre sur lequel vous pouvez compter! Vous pouvez deviner la suite ici! ;-) C'est-à-dire que les composants visuels ne peuvent certainement pas être testés, mais le serpent devrait ressembler à un serpent, tout dépend du type de serpent que vous voulez dans le jeu. L'artiste dessinant le serpent devrait prouver suffisamment de satisfaction avec son dessin du serpent, qui ne doit pas être testé par TDD, bien sûr! Mais sa position par rapport à d'autres objets le peut, ainsi que la classe qui représente ce serpent. En fait, TDDJe ne pense pas que TDD, en tant que tel, soit approprié comme base pour le développement de jeux. Les tests unitaires automatisés dans le cadre de la méthodologie, bien sûr, mais trop de préoccupations clés du développement de jeux sont subjectives et ne peuvent pas être testées par machine pour que les tests soient le moteur du développement. Comment allez-vous écrire un test scripté pour savoir si un mécanicien de jeu est amusant? Qu'un niveau est visuellement attrayant? Même qu'un niveau prend environ 15 minutes à un joueur typique? TDD s'adapte aux situations où la maturité d'un projet peut être mesurée quantitativement en termes de conformité à une spécification, et ce n'est tout simplement pas le développement de jeux.
la source
Il est un peu difficile de déterminer exactement ce que vous demandez, car le titre est purement sur TDD, mais vous semblez faire de Scrum une partie intégrante de la question également - et si je comprends bien, l'un n'exige pas l'autre.
C'est exact. Je ne pense pas en avoir jamais entendu parler dans la pratique de l'industrie des jeux. (Mais je n'en ai jamais entendu parler non plus en dehors de l'industrie des jeux - juste par des particuliers.)
Les jeux n'ont pas besoin de fonctionner parfaitement. Il y a donc beaucoup moins d'accent sur l'exactitude du code. TDD ne garantit pas l'exactitude du code, mais certaines personnes pensent qu'il réduit l'inexactitude. Je n'ai pas encore de preuve de cela.
Je n'ai jamais vu de méthodologie qui n'encourageait pas à respecter les dates d'échéance ou à avoir des actions qui n'étaient pas limitées dans le temps. Le problème est que quelle que soit la méthodologie utilisée, l'estimation de la complexité d'un logiciel est assez difficile. Ce n'est pas impossible, mais son estimation précise n'a pas grand-chose à voir avec le processus. Si ma tâche est d'ajouter un nouveau panneau GUI, ou de corriger un bogue avec l'animation, ou d'ajouter une nouvelle statistique aux personnages, alors l'utilisation de Scrum ne va pas du tout accélérer cela, et l'utilisation de TDD va pour ralentir la tâche (au bénéfice éventuel d'une réduction ultérieure des tâches de maintenance). Ils ne vont certainement pas faciliter l'estimation de la durée de la tâche.
S'il est prouvé que TDD écrit un meilleur code que d'autres méthodes, alors oui.
Y a-t-il une preuve de cela? Le fait que l'industrie pourrait l'utiliser n'est pas une preuve. L'industrie est bien connue pour produire un code médiocre qui est livré en retard. L'absence d'exemples de grands projets TDD qui ont échoué ou qui ont pris du retard est peut-être dû au fait que c'est une nouvelle approche et que peu de gens ont déjà terminé un tel projet. (Et ceux qui sont en retard ... peuvent encore fonctionner.)
Viable? Bien sûr. Bénéfique? Cela reste à prouver.
la source
Spacecraft
classe devient une classe entièrement testable avec des méthodes et des propriétés. C'est le genre de choses qui peuvent absolument, à mon humble avis, être entièrement testées en utilisant TDD. Disons que vous avez besoin d'un vaisseau spatial, puis vous écrivez les tests pour ce dont vous avez besoin pour effectuer un test à la fois.désolé pour mon pauvre anglais et désolé pour mon point de vue biaisé: je ne suis pas un game designer mais un codeur.
Je pense qu'il y a un malentendu dans cette discussion. je vais parler de TDD sous une forme plus générale, le soi-disant BDD. Le développement axé sur le comportement n'est pas un moyen de tester un projet (les tests sont quelque chose comme des effets secondaires). BDD est un moyen de concevoir , un moyen de refactoriser et de concevoir des logiciels pendant toute la production (voir certaines devises comme KISS, "garder la qualité", "tester tôt, tester souvent") et pas dans une phase seule. BDD est l'opposé de certains processus logiciels classiques comme le processus en cascade ou d'une autre méthodologie itérative pour créer des logiciels.
Un autre point est que les tests automatiques sont pour ces fonctionnalités qui pourraient être testées automatiquement par une machine de calcul. il n'y a pas de test pour le plaisir dans les jeux, et il n'y a pas de test pour l'utilisabilité d'une interface utilisateur graphique. le plaisir ou l'utilisabilité sont des matériaux pour d'autres emplois et non pour le développement de logiciels comme le concepteur d'interaction, le monde et le niveau d. de la même manière que les parties artistiques (modélisation, texturation, etc.) sont destinées aux artistes qui utilisent les ordinateurs comme outil de créativité - évidemment, ces travaux pourraient être exécutés par la même personne qui écrit du code, mais ce n'est pas la question. la physique pourrait être testée, des algorithmes d'optimisation pourraient être testés, des comportements d'objets singuliers pourraient être testés (avec des simulacres, des talons et des mannequins comme mentionné précédemment)
la dernière pensée est que, à mon humble avis, non seulement la conception de jeux, mais tout le code d'écriture est un art.
la source
Voici une étude de cas d'une personne qui pense que TDD et gamedev se mélangent plutôt bien:
http://powertwenty.com/kpd/downloads/TestDrivenDevelopmentInPython.pdf
Certes, il s'agit d'un petit projet dans Pygame, mais il donne l'idée de quelles parties peuvent être testées avec un jeu graphique et lesquelles ne le peuvent pas. J'ai été surpris de voir ce qui pouvait être fait avec TDD dans ce scénario.
la source
Non, le développement piloté par les tests n'est pas adapté au développement de jeux. Bien sûr, vous pouvez écrire des tests pour certaines parties que vous souhaitez tester, mais le processus de développement de jeu est complètement différent du développement piloté par les tests qui nécessite d'avoir des spécifications exactes avant de commencer.
Les jeux ont rarement des spécifications exactes au démarrage. Et s'ils le font, ils changent et évoluent toujours au cours du processus de développement.
La conception de jeux est un art, vous ne pouvez pas avoir de tests spécifiques pour savoir quand l'art est bon ou complet.
la source