ゲームのテストを自動化する方法は?


13

私はこのテスト分野に初めて参加しました。ユニティエンジンを使用して基本的なゲームを開発しましたが、テストしたいと思います。

私はセレンで確認しましたが、ゲームで実行されているアクションの情報を含む返される値を取得する方法がわかりません。値を取得できれば、それに応じて必要なアクションを実行できます。


4
これは非常に興味深い質問です。個人的には、単体テストはゲーム開発においてかなり過小評価されていると思います。ただし、自動化された統合テストに興味があるようです。これは、ゲーム開発で実装することが非常に難しい場合があります。特に、ゲームがランダム性を使用している場合。
フィリップ

テストを真剣に受け止め、そのジョブのツールを検討するための小道具。代わりにSOで質問することをお勧めします-彼らはセレンに関する多くのQ&Aを持っています。@Philippが述べたように、いくつかの種類のゲームテストは自動化が非常に困難です。つまり、視覚効果をチェックするための無人テストはまだ見ていません。
ピカレック

1
何をテストするのかは明確ではありませんが、ゲームとは無関係にテストできる値、つまり関数によって返される値を探しているようです。もしそうなら、この機能を単体テストすることができ、ゲームで使用されているかどうかは関係ありません。方法がわからない場合はお知らせください。ユニットテストに関する回答を作成します。
MVCDS

回答:


1

ゲームをテストする方法は複数ありますが、最もよく使用される2つの方法は、単体テストと統合テストです。

以下のためのユニットテスト実際に実行することなく、ゲームの内部動作をテストしています。これは、抽象化された依存関係を持つ特定のモジュールに対して実行できます(たとえば、特定の要素セットに基づいて取得するXPを計算するロジック、特定のサウンドが再生されるかどうか)。ロジックをどれだけ抽象化するかによって、より多くのテストを行うことができますが、具体的には、ゲームアーキテクチャの実行方法(たとえば、単一動作からの継承)を考えると、より難しい場合があります。それでも、コンポジションのようなOOPパターンを適用すると、場合によっては極端に見える場合でも、決定論的な方法(物理学など)でテストできるロジックのビットを抽出できます。それはすべて、あなたがどれだけの時間を持っているか、プロジェクトをゼロから始めたのかどうか、あなたがどれだけの経験を持っているかなどに依存します。他のゲーム以外のソフトウェアプロジェクトと比較して、ゲームのユニットテストが多く見られました。この種のテストは、シミュレートした模擬動作を提供するため、自動化が非常に簡単です。

以下のために統合テスト、あなたはすべての部分が実行されている特定の時間、で「全体」のゲームと対話します。テストしたいことの深さにもよりますが、まったく不可能なことは非常に簡単かもしれません。

1つのアイデアは、「統合テスト」ビルドを使用して、実行するすべての(ほとんどの)アクション(つまり、モンスターのスポーン、サウンドの再生、エフェクトの開始、パーティクルのスポーン)を記録することです。一定時間実行した後、ログをチェックして、特定のパターンに一致するかどうかを確認できます(これは、入力に基づいてゲームがランダムであるかどうかにも依存します)。さて、これは簡単に聞こえますが、質問は、あなたがゲームに望みのアクションを行うように指示する方法ですか?それは私に2番目のアイデアをもたらします。

もう1つのアイデアは、テスト目的で(たとえば、REST APIを介して)要求を処理でき、エンティティに作用する種類のサーバーをゲーム内に配置することです。リクエストは次のようなものです。左に移動、ジャンプ、X度回転、ビューポートの変更など。このアプローチでは、状態を直接確認するか、仮想を検証することにより、ゲームが期待どおりに動作することを「チェック」することもできます発生したイベントのログ。このアプローチは、モバイル向けの他のUIテストツール(Xamarin Test Cloudなど)で使用されます

制御部分については、ゲームがタッチ/ブラウザベースの場合、代わりに仮想タッチ/入力デバイスを介してアクションをシミュレートできますが、アクションの複雑さに応じて、これは少し難しくなります。

視覚的側面に関する別のアイデアは、初期段階でいくつかの参照スクリーンショット、画像を取得し、新しいビルドで同じアクションシーケンスが発生した後にそれらを比較することです。比較には、わずかな変更を防ぐために、特定の偏差許容値を設定できます。テスト中に、一致しなかった画面をログに記録して、違いを確認できます。異なる変更のために参照画面を更新する必要がある場合があります。その場合、プリセットアクションでゲームを再度実行し、参照画像を更新できます。前のアイデアを使用して、パーティクルの生成に使用されるシードを設定しない限り、これはおそらくパーティクルシステムまたはランダムに生成されたシーンではうまく機能しません。

サウンドについては、少し難しいかもしれません。OUTデバイスを「聞く」必要があるからです(システムのハードウェアに依存するため、IIRCは常に可能とは限りません)。しかし、可能であれば、画像で行うのと同じ参照ベースの比較を行うことができます。

これにより、ゲームのテストを自動化する方法が明らかになることを願っています。

後で編集:特定のビットをどのように行うかについてのいくつかの指針を与えるかもしれない別の関連する質問があったことがわかりました:ゲームの自動テスト

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.