Wie automatisiere ich das Testen von Spielen?

13

Ich bin neu in diesem Bereich des Testens. Ich habe gerade ein einfaches Spiel mit Unity Engine entwickelt, aber ich möchte es testen.

Ich habe mit Selen nachgesehen, aber ich weiß nicht, wie ich den zurückgegebenen Wert ermitteln kann, der die Informationen zu der Aktion enthält, die im Spiel ausgeführt wird. Wenn ich in der Lage bin, den Wert zu erhalten, werde ich in der Lage sein, die notwendigen Maßnahmen entsprechend zu ergreifen.

StrayArrow
quelle
4
Dies ist eine sehr interessante Frage. Ich persönlich denke, dass Unit-Tests in der Spieleentwicklung ziemlich unterschätzt werden. Es hört sich jedoch so an, als wären Sie mehr an automatisierten Integrationstests interessiert, die in der Spieleentwicklung oft nur schwer zu implementieren sind. Vor allem, wenn das Spiel Zufälligkeiten verwendet.
Philipp
Requisiten, um Tests ernst zu nehmen und sich mit Werkzeugen für diesen Job zu befassen. Vielleicht möchten Sie stattdessen nach SO fragen - sie haben viele Fragen und Antworten zu Selen. Wie @Philipp bereits erwähnt hat, sind einige Arten von Spieletests nur schwer zu automatisieren. dh ich habe noch keinen unbeaufsichtigten Test zum Überprüfen von visuellen Effekten gesehen.
Pikalek
1
Es ist nicht klar, was Sie testen möchten, aber es scheint, dass Sie nach einem Wert suchen, der unabhängig vom Spiel getestet werden kann - einem Wert, der von einer Funktion zurückgegeben wird. In diesem Fall können Sie diese Funktion einzeln testen und es spielt keine Rolle, ob sie im Spiel verwendet wird oder nicht. Wenn Ihnen nicht klar ist, wie es geht, lassen Sie es uns wissen, und ich werde versuchen, eine Antwort mit Unit-Tests zu schreiben.
MVCDS

Antworten:

1

Es gibt mehrere Möglichkeiten, ein Spiel zu testen. Die zwei am häufigsten verwendeten sind Unit- und Integrationstests.

Zum Testen von EinheitenSie testen das Innenleben des Spiels, ohne es tatsächlich auszuführen. Sie können dies für bestimmte Module tun, deren Abhängigkeiten abstrahiert sind (z. B. Logik, die die Quest XP berechnet, die Sie erhalten, basierend auf einer Reihe von Faktoren; ob ein bestimmter Sound abgespielt wird). Abhängig davon, wie stark Sie Ihre Logik abstrahieren, können Sie weitere Tests durchführen. Aus Gründen der Einheitlichkeit kann es jedoch schwieriger sein, die Spielarchitektur zu ändern (z. B. von Monobehaviour zu erben). Durch Anwendung von OOP-Mustern wie Komposition können Sie dennoch logische Elemente extrahieren, die auf deterministische Weise getestet werden können (z. B. Physik), auch wenn dies manchmal als etwas extrem angesehen werden kann. Es hängt alles davon ab, wie viel Zeit Sie haben, ob Sie mit dem Projekt von vorne angefangen haben oder nicht, wie viel Erfahrung Sie haben usw. Im Allgemeinen habe ich Im Vergleich zu anderen Nicht-Spiele-Softwareprojekten wurden in Spielen kaum Unit-Tests durchgeführt. Diese Art von Tests ist recht einfach zu automatisieren, da Sie simulierte Verhaltensweisen angeben.

Zum Testen der Integration interagieren Sie zu einem bestimmten Zeitpunkt mit dem "ganzen" Spiel, wenn alle Teile ausgeführt werden. Abhängig von der Tiefe der Dinge, die Sie testen möchten, ist es meines Erachtens sehr einfach, absolut unmöglich.

Eine Idee wäre, einen "Integrationstest" zu erstellen, der alle (meisten) Aktionen protokolliert (dh das Laichen von Monstern, das Spielen von Geräuschen, den Starteffekt und das Laichen von Partikeln). Nachdem es für eine bestimmte Zeit ausgeführt wurde, können Sie die Protokolle überprüfen, um festzustellen, ob es einem bestimmten Muster entspricht (dies hängt auch davon ab, wie zufällig das Spiel ist, basierend auf den Eingaben). Das hört sich einfach an, aber die Frage ist: Wie sagt man dem Spiel, dass es die gewünschten Aktionen ausführen soll? Das bringt mich zur zweiten Idee.

Eine andere Idee wäre, zu Testzwecken eine Art Server im Spiel zu haben, der in der Lage ist, Anforderungen zu verarbeiten (z. B. über eine REST-API) und der auf die Entitäten einwirkt. Die Anforderungen können Dinge sein wie: nach links bewegen, springen, um X Grad drehen, Ansichtsfenster ändern usw. Mit diesem Ansatz können Sie auch "überprüfen", ob das Spiel wie erwartet funktioniert, indem Sie entweder den Status direkt überprüfen oder ein virtuelles überprüfen Protokoll der Ereignisse, die passiert sind. Dieser Ansatz wird von anderen UI-Testtools für Mobiltelefone (z. B. Xamarin Test Cloud) verwendet.

Wenn Ihr Spiel Touch- / Browser-basiert ist, können Sie die Aktionen stattdessen über ein virtuelles Touch- / Eingabegerät simulieren. Dies ist jedoch abhängig von der Komplexität der Aktionen etwas schwieriger.

Eine andere Idee in Bezug auf den visuellen Aspekt ist es, einige Referenz-Screenshots und Bilder in einer Anfangsphase aufzunehmen und sie zu vergleichen, nachdem dieselbe Aktionssequenz bei einem neueren Build stattgefunden hat. Der Vergleich kann eine bestimmte Abweichung zulassen, um geringfügigen Änderungen vorzubeugen. Während der Tests können Sie die nicht übereinstimmenden Bildschirme protokollieren und den Unterschied feststellen. Es kann vorkommen, dass die Referenzbildschirme aufgrund unterschiedlicher Änderungen aktualisiert werden müssen. In diesem Fall könnte das Spiel mit den voreingestellten Aktionen erneut ausgeführt und die Referenzbilder aktualisiert werden. Dies funktioniert wahrscheinlich nicht sehr gut mit Partikelsystemen oder zufällig generierten Szenen, es sei denn, Sie verwenden die vorherige Idee, um eine Art Startwert festzulegen, der zum Generieren der Partikel verwendet wird.

Bei den Klängen ist es möglicherweise etwas schwieriger, da das OUT-Gerät "abgehört" werden muss (was bei IIRC nicht immer möglich ist, da dies von der Hardware des Systems abhängt). Wenn es jedoch möglich ist, können Sie den gleichen referenzbasierten Vergleich wie mit den Bildern durchführen.

Ich hoffe, dies gibt Aufschluss darüber, wie Sie das Testen des Spiels automatisieren können.

Später Bearbeiten: Ich sehe nur, dass es eine andere verwandte Frage gab, die Ihnen einige Hinweise geben könnte, wie Sie bestimmte Dinge tun würden: Automatisiertes Testen von Spielen

Timotei
quelle