Da ich Scrum-zertifiziert bin, tendiere ich dazu, bei der Entwicklung eines Systems auf agile Methoden zu setzen, und verwende sogar einige Canvas-Elemente aus dem Scrum-Framework, um meine tägliche Arbeit zu verwalten.
Außerdem frage ich mich, ob TDD eine Option in der Spieleentwicklung ist, wenn es machbar ist.
Wenn ich an diese GD-Frage glaube, ist TDD für die Spieleentwicklung nicht besonders nützlich.
Warum wird MVC & TDD nicht mehr in der Spielearchitektur eingesetzt?
Ich komme aus der industriellen Programmierung, wo große Projekte mit großem Budget einwandfrei funktionieren müssen, da dies zu katastrophalen Szenarien führen kann, wenn der Code nicht gründlich von innen und außen getestet wird.
Wenn Sie die Scrum-Regeln einhalten, können Sie die Fälligkeitstermine Ihrer Arbeit einhalten, während jede einzelne Aktion in Scrum zeitlich begrenzt ist! Also stimme ich zu, wenn sie in der oben verlinkten Frage sagen, dass sie aufhören sollen, ein System aufzubauen, und das Spiel schreiben sollen. Es ist genau das, was Scrum sagt, versuchen Sie nicht, das perfekte System zu bauen, sondern sorgen Sie dafür, dass es bis zum Ende des Sprints funktioniert. Dann überarbeiten Sie den Code, während Sie im zweiten Sprint arbeiten, falls erforderlich!
Ich verstehe, dass Scrum unbrauchbar wird, wenn nicht alle Abteilungen, die für die Spieleentwicklung verantwortlich sind, Scrum verwenden. Aber nehmen wir für einen Moment an, dass alle Abteilungen Scrum verwenden ... Ich denke, dass TDD gut wäre, um fehlerfreien Code zu schreiben, obwohl Sie nicht das "perfekte" System / Spiel schreiben möchten.
Meine Frage lautet also wie folgt:
Ist TDD in der Spieleentwicklung überhaupt brauchbar?
quelle
Antworten:
Es ist auf jeden Fall rentabel, obwohl viele Spieleprogrammierer sich noch nicht wirklich mit der Idee befasst haben oder ein gutes Verständnis dafür haben, wie man komplizierte Systeme testet. Ich gebe selbst zu, dass ich es selten benutze, außer bei Systemen, die nicht mit dem Spiel zusammenhängen und einfach zu testen sind.
Erwarten Sie, viele Scheinobjekte zu verwenden. Da viele Systeme miteinander verbunden sind, ist es schwierig, einzelne Komponenten davon zu testen.
Außerdem können viele Dinge nicht gründlich getestet werden. Wie testet man beispielsweise ein Partikelsystem? Wie testen Sie, ob Ihr Animationssystem ordnungsgemäß funktioniert? Viele Dinge sind visueller Natur und (zumindest für mich) nicht offensichtlich, wie man richtig testet.
Es gibt jedoch viele Dinge, die nicht unbedingt Unit-Tests im herkömmlichen Sinne des Wortes sind, sondern als "Tests" für bestimmte Funktionen existieren. Dinge wie Testniveaus für die AI-Navigation sind ziemlich häufig, aber nicht unbedingt die am einfachsten zu automatisierenden Dinge.
Es gibt bestimmte Aspekte von Spielen, für die Unit-Tests geschrieben werden können (und sollten). Jede Art von generischem "Dateilesesystem" sollte getestet werden. Vielleicht haben einige Tests für die Initialisierung von Hardware-Dingen (3D-Oberflächen, etc.). Vielleicht haben Sie einige Mock-Server und testen Sie Ihren Client / Server-Interaktionscode. Sachen wie diese.
quelle
Keys.Down
,Keys.Left
usw. Das zu sagen , dass das Spiel weiß , wo der Benutzer die Schlange gehen will, und die Schlange hat zu gehen , wo das Spiel es sagt, aber , dass nur die Schlange ist , die wissen , wie man in die verschiedenen Richtungen zu bewegen, daher auch von seiner Position im Spiel. Nachdem dies gesagt wurde, macht IMHO dieSnake
Klasse zu einer prüfbaren! (FortsetzungVector2.Zero
mit einer Geschwindigkeit10.0f
auf der X- und Y-Achse in diesem 2D-Spiel initialisiert . Die erste Frage ist: Befindet es sich an seiner vermeintlichen Ausgangsposition und wie kann man es testen? Dann denken Sie, dass dasPosition
Eigentum öffentlich ausgestellt werden soll. Zweitens: Wie kann man es bewegen? Bewegung Methoden sollten gut sein, so dass Sie einen Test für jede Richtung Methode schreibenMoveDown
,MoveLeft
und so weiter. Schreiben Sie jetzt Ihre Methodendeklaration und prüfen Sie, ob sich der Test beschwert. Dann überprüfen Sie die Position der SchlangeMoveDown
Methodenaufruf! Da Sie wissen, dass diePosition
Immobilie gründlich getestet wurde, können Sie sich auf dieses Mitglied verlassen! Sie können die Fortsetzung hier erraten! ;-) Das heißt, dass visuelle Komponenten definitiv nicht getestet werden können, aber die Schlange sollte wie eine Schlange aussehen, je nachdem, welche Art von Schlange Sie im Spiel haben möchten. Der Künstler, der die Schlange zeichnet, sollte genug Zufriedenheit mit seiner Zeichnung der Schlange nachweisen, die natürlich nicht durch TDD getestet werden darf! Aber seine Position relativ zu anderen Objekten kann es, und die Klasse, die diese Schlange repräsentiert, auch. In der Tat, TDDIch denke nicht, dass TDD als solches als Grundlage für die Spieleentwicklung geeignet ist. Sicher, automatisierte Komponententests als Teil der Methodik, aber zu viele der Hauptanliegen der Spieleentwicklung sind subjektiv und können nicht maschinell getestet werden, um der Treiber der Entwicklung zu sein. Wie werden Sie einen Skripttest schreiben, um festzustellen, ob eine Spielmechanik Spaß macht? Dass ein Level optisch ansprechend ist? Selbst dass ein Level für einen typischen Spieler ungefähr 15 Minuten dauert? TDD eignet sich für Situationen, in denen die Reife eines Projekts quantitativ anhand der Einhaltung einer Spezifikation gemessen werden kann und dies keine Spieleentwicklung ist.
quelle
Es ist ein bisschen schwierig, genau herauszufinden, was Sie fragen, da es sich bei dem Titel nur um TDD handelt, aber Sie scheinen Scrum auch zu einem integralen Bestandteil der Frage zu machen - und so wie ich es verstehe, erfordert eines das andere nicht.
Das ist richtig. Ich glaube nicht, dass ich jemals davon gehört habe, wie es in der Spielebranche in der Praxis eingesetzt wird. (Aber ich habe auch noch nie davon gehört, dass es außerhalb der Spielebranche verwendet wird - nur von Einzelpersonen.)
Spiele müssen nicht einwandfrei funktionieren. Daher wird die Code-Korrektheit viel weniger betont. TDD garantiert keine Code-Korrektheit, aber einige Leute sind der Meinung, dass dies die Fehlerhaftigkeit verringert. Ich muss noch Beweise dafür finden.
Ich habe noch nie eine Methode gesehen, die nicht zur Einhaltung von Fälligkeitsterminen oder zu Aktionen ohne Zeitrahmen ermutigt hat. Das Problem ist, dass das Abschätzen der Softwarekomplexität unabhängig von der verwendeten Methodik ziemlich schwierig ist. Es ist nicht unmöglich, aber genau abzuschätzen, hat nicht viel mit dem Prozess zu tun. Wenn es meine Aufgabe ist, ein neues GUI-Bedienfeld hinzuzufügen, einen Fehler in der Animation zu beheben oder Zeichen eine neue Statistik hinzuzufügen, wird die Verwendung von Scrum das überhaupt nicht beschleunigen, und die Verwendung von TDD wird es auch tun die Aufgabe zu verlangsamen (zum möglichen Vorteil, später weitere Wartungsaufgaben zu reduzieren). Sie werden es sicherlich nicht einfacher machen, die Aufgabendauer abzuschätzen.
Wenn TDD nachweislich besseren Code schreibt als andere Methoden, dann ja.
Gibt es Beweise dafür? Die Tatsache, dass die Industrie es nutzen könnte, ist kein Beweis. Die Industrie ist dafür bekannt, schlechten Code zu produzieren, der verspätet geliefert wird. Das Fehlen von Beispielen für große TDD-Projekte, die gescheitert sind oder sich verspäten, kann nur daran liegen, dass es sich um einen neuen Ansatz handelt und nur wenige Leute ein solches Projekt tatsächlich abgeschlossen haben. (Und diejenigen, die spät dran sind ... laufen möglicherweise noch.)
Lebensfähig? Na sicher. Vorteilhaft? Das muss noch bewiesen werden.
quelle
Spacecraft
Klasse wird eine vollständig testbare Klasse mit Methoden und Eigenschaften. Dies ist die Art von Sachen, die meiner Meinung nach mit TDD vollständig getestet werden können. Nehmen wir an, Sie brauchen ein Raumschiff und schreiben dann die Tests für das, was Sie benötigen, um jeweils einen Test durchzuführen.Entschuldigung für mein schlechtes Englisch und Entschuldigung für meinen voreingenommenen Standpunkt: Ich bin kein Spieledesigner, sondern ein Programmierer.
Ich denke, in dieser Diskussion gibt es einige Missverständnisse. Ich werde über TDD in allgemeinerer Form sprechen, die so genannte BDD. Verhaltensorientierte Entwicklung ist keine Möglichkeit, ein Projekt zu testen (die Tests sind so etwas wie Nebenwirkungen). BDD ist eine Methode zum Entwerfen , eine Methode zum Umgestalten und zum Entwerfen von Software während der gesamten Produktion (siehe einige Mottos als KISS, "Qualität behalten in", "früh testen, oft testen") und nicht in einer einzelnen Phase. BDD ist das Gegenteil eines klassischen Softwareprozesses wie eines Wasserfallprozesses oder einer anderen iterativen Methode zur Erstellung von Software.
Ein weiterer Punkt ist, dass automatische Tests für die Funktionen vorgesehen sind, die von einer Rechenmaschine automatisch getestet werden könnten. Es gibt keinen Test für Spielspaß und es gibt keinen Test für die Benutzerfreundlichkeit einer grafischen Benutzeroberfläche. spaß oder benutzerfreundlichkeit sind materialien für andere aufgaben und nicht für die softwareentwicklung wie interaktionsdesigner, world und level d. Genauso wie künstlerische Teile (Modellieren, Texturieren usw.) für Künstler sind, die Computer als Werkzeug für Kreativität verwenden - offensichtlich könnten diese Arbeiten von derselben Person ausgeführt werden, die Code schreibt, aber das ist nicht der Punkt. Physik konnte getestet werden, Optimierungsalgorithmen konnten getestet werden, Verhalten einzelner Objekte konnte getestet werden (mit Mocks, Stubs und Dummy, wie zuvor erwähnt)
Der letzte Gedanke ist, imho, dass nicht nur das Game-Design, sondern der gesamte Code eine Kunst ist.
quelle
Hier ist eine Fallstudie von jemandem, der der Meinung ist, dass TDD und Gamedev gut zusammenpassen:
http://powertwenty.com/kpd/downloads/TestDrivenDevelopmentInPython.pdf
Zugegeben, dies ist ein kleines Projekt in Pygame, aber es gibt die Idee, welche Teile mit einem Grafikspiel getestet werden können und welche nicht. Ich war überrascht, wie viel mit TDD in diesem Szenario getan werden konnte.
quelle
Nein, Test Driven Development ist nicht für die Spieleentwicklung geeignet. Natürlich können Sie Tests für einige Teile schreiben, die Sie testen möchten, aber der Spieleentwicklungsprozess unterscheidet sich grundlegend von der testgetriebenen Entwicklung, für die genaue Spezifikationen erforderlich sind, bevor der Fortschritt gestartet werden kann.
Spiele haben selten genaue Spezifikationen, wenn sie gestartet werden. Und wenn doch, verändern und entwickeln sie sich während des Entwicklungsprozesses.
Game Design ist eine Kunst, man kann keine spezifischen Tests machen, um zu wissen, ob Kunst gut oder vollständig ist.
quelle