Ist es? Vielleicht. Meine Meinung wäre, dass es im Allgemeinen zu einer sehr schlechten Passform für Unterhaltungssoftware führen würde, obwohl es für Bibliotheken mit niedriger Ebene gut funktionieren könnte.
EDIT: Hier ist eine Begründung für meine Meinung.
Wikipedia definiert BDD als eine Technik, die "die Zusammenarbeit zwischen Entwicklern, Qualitätssicherung und nicht-technischen oder geschäftlichen Teilnehmern an einem Softwareprojekt fördert". Dies klingt bereits nach einer schlechten Idee, da sich Spiele von den meisten Softwareprogrammen dadurch unterscheiden, dass sie nicht als Tools für einen bestimmten Bedarf eines „nicht technischen oder geschäftlichen Teilnehmers“ konzipiert sind, sondern zusammenhängende Werke sind, die im Großen und Ganzen zur Unterhaltung gedacht sind. Es gibt einen Schwerpunkt auf "gewünschtes Softwareverhalten", aber Spiele haben selten "gewünschtes Softwareverhalten", außer auf technischer Ebene. Es ist definitiv sinnvoll, diesen Teil des Codes zu überprüfen, aber nicht mit dem Endbenutzer, da er ihn nie sehen wird.
Aber nehmen wir an, Sie möchten das menschliche Stakeholder-Zeug wegwerfen und einfach BDD verwenden, um Verträge zwischen verschiedenen Codemodulen durchzusetzen, was sich meines Erachtens nicht wesentlich von der normalen testgetriebenen Entwicklung unterscheidet, die ich ebenfalls als schlecht betrachte. aus folgendem Grund für Spiele geeignet.
Tests sind nützlich, um zu überprüfen, ob diskrete Ereignisse wie erwartet aufgetreten sind. Dies funktioniert gut bei der ereignisgesteuerten Programmierung, d. H. In den meisten Teilen der Software-Welt, in der eine Aktion ausgeführt wird, werden einige Ausgaben generiert. Anschließend überprüfen Sie einfach, ob die Aktion und das Ergebnis übereinstimmen. Spielesoftware ist jedoch typischerweise eine Simulation, bei der eine Aktion kein diskretes Ergebnis hat, sondern eine kontinuierliche Änderung des Weltzustands. Wenn mein versteckter Spieler ein Geräusch macht, möchte ich vielleicht überprüfen, ob die KI mich jagt. Ich kann also einen Test erstellen, um sicherzustellen, dass sich die KI nach dem Erstellen eines Geräusches im Jagdzustand befindet, und das ist großartig. Aber woher weiß ich, dass die Jagd überhaupt funktioniert? Sie können das nicht sofort überprüfen - Sie können es nur im Laufe der Zeit beobachten.
Darüber hinaus kann ein Test-First-Ansatz ein falsches Sicherheitsgefühl erzeugen und die Menschen dazu bringen, zu glauben, dass Code besser ist als er wirklich ist.
def check_dice_roll_in_range():
d = new Dice()
assert(d.roll() between 1 and 6)
class Dice:
def roll():
return 4
Da ein Testergebnis ein falsches Positiv ergeben kann, können Sie sich niemals der grundlegenden Notwendigkeit entziehen, den Code selbst zu überprüfen. Wenn der Code selbst jedoch ausreichend überprüft wird, gewinnt der Test eine untergeordnete Bedeutung. Aus diesem Grund werden meiner Meinung nach Tests am besten nach dem Ereignis verwendet, um Fehlerkorrekturen zu testen.
Ich würde nicht behaupten, dass das Testen niemals einen Vorteil bringt, wenn die Objekte X und Y zusammenarbeiten, ist das Ergebnis wie erwartet. Die Frage ist, ob Sie dies am effektivsten überprüfen. Die Methoden können eine formale Überprüfung, eine Codeüberprüfung, Test-First-Methoden, Test-Last-Methoden, herkömmliche QS-Black-Box-Tests oder die einfache Verwendung des Codes wie erwartet und die Beobachtung der Ergebnisse umfassen. Die letzten beiden Optionen sind die meiste Zeit überraschend effektiv, da die meisten Fehler, obwohl sie so klingen, als ob sie nicht streng genug wären, im Verlauf der typischen Verwendung gefunden werden und das Verstehen eines Fehlers in seinem natürlichen Kontext manchmal einfacher sein kann als das Verstehen in einem künstlichen Test Geschirr. Darüber hinaus
Zusammenfassend denke ich, dass testgetriebene Entwicklung nicht unbedingt eine gute Wahl für Software ist, dass Tests allein niemals ausreichen, um die Softwarequalität sicherzustellen (und daher muss die Zeit, die für das Schreiben aufgewendet wird, mit alternativen Verwendungen dieser Entwicklerzeit verglichen werden). dass Spiele besonders gut zu automatisierten Testfällen passen, und dass Spiele besonders schlecht zu Entwicklungsmethoden passen, bei denen der Schwerpunkt auf "Geschäftswert" und "Akzeptanztests" liegt.
(Hoffentlich ist das eine bessere Antwort, auch wenn Sie meinen Punkten nicht zustimmen.)