ゲームのテスト戦略


13

Webベースの教育用ゲームを継承しました。過去1年間、コードの安定化と新しい機能の追加に取り組んできました。ほとんどのロジックはフロントエンドにあるため、バックエンドの単体テストは有用ですが、コードのごく一部をカバーします。

ゲームは複雑になり始めています。各ゲームには2つの異なるモードがあり、モードによってゲームの動作は異なります。ゲームのプレイに影響するさまざまなフラグもあります。

私はもう10年以上アプリケーション開発者であり、これは私を困惑させます。企業の世界では、アルゴリズムは常に同じように機能します。アルゴリズムの単体テストを作成します。値42を期待し、その値を取得しないとエラーになります。

ゲームに関しては、私は迷っています。それらをテストするにはどうすればよいですか?テスターを利用できます。単体テストの作成に時間を費やすことができます。

テスターは...信頼できません。それらは問題を根絶するのに最適ではなく、私はそれらに最善の方向性を与えていません。リリースサイクルごとに膨大な時間を費やしてゲームのあらゆる組み合わせや組み合わせをテストするのではなく、それらをリソースとしてどのように使用すればよいですか?

単体テストは制限されているようです。ほとんどのロジックはjavascript(およびスパゲッティコードを継承)であるため、CucumberやSeleniumなどのフロントエンドスイートを使用して、特定の機能が動作することを確認できます。

それが最善の戦略ですか?ゲーム会社はどのようにゲームをテストしますか?

複雑なゲームのテスト駆動開発」という質問(サイト上の他の記事も参照)を読みましたが、探しているものには対応していません。テスト方法の具体的な例ではなく、戦略を求めています。


ブック/オフサイトリソースの推奨事項は、ヘルプセンターごとに明示的にオフトピックです。参照meta.programmers.stackexchange.com/questions/6483/...を
ブヨ


複製ではありません。その質問は、単体テストの書き方を尋ねています。私は戦略を求めています。
ジェフコレス14


2
それはGUIをテストすることになるとFWIW、それはもはやユニットテストだ-それは、より統合テストや受け入れテストのようなものだ
slebetman

回答:


16

企業の世界では、アルゴリズムは常に同じように機能します。アルゴリズムの単体テストを作成します。値42を期待し、その値を取得しないとエラーになります。

これはゲームではそれほど変わりません。作業中のゲームに2つのモードと複数のフラグが存在しても何も変わりません。特定のフラグセットを使用して特定のモードを選択した場合、一部のテスト時に何度も同じ値を取得できますソースコード。

モードとフラグが多すぎると、バリエーションの数が多いため、ゲームをすぐにテストすることが非常に難しくなる可能性があります。この問題に早期に遭遇するリスクを軽減するには、次のことを行う必要があります。

  • ひどくモック/スタブ。テスト済みの部品は小さく保ち、依存するすべてのものをモックします。

    時間に依存している場合、実際の時間に関係なく、常に特定の結果または特定の結果のセットを提供するように時間オブジェクトをモックします。

    に依存している場合はrandom()、毎回定数を提供するようにモックします。

  • リファクタリング。テストが過度に複雑になり始める場合、またはクラスをテストするためにDependency Injectionの実装後に12個の引数が必要であることがわかった場合、2つ前に必要だった場合、コードをリファクタリングする必要があります。

  • アプリケーションの実際のビジネスルール質問します。誰も必要とせず、利害関係者さえも必要としない機能要件に必要なさまざまなバリエーションがあるため、テストがほぼ不可能であったプロジェクトの数を数えなくなりました。

    小規模なeコマースWebサイトで、出荷価格の計算方法を決定するために使用される機能要件を説明するために10ページが必要な場合、テストやコードを書くことから始めるべきではなく、利害関係者に戻って協力して生産する必要があります正気の要件。

最後に、すべてのテストを自動化します。アプリケーションが失敗する状況を発見するには、テスターが必要です。テスターを使用して何度も何度も同じアクションを実行することは、テスターに​​とって逆効果であり、無礼です。リグレッションテストは、人ではなく機械によって行われるべきです。一方、人々はバグを見つけるのがずっと上手です。「もしも​​...」は、彼らが使用できるテクニックの1つです(「年齢を尋ねるフィールドに複数の\ x00を含む数メガバイトのバイナリデータを入力し、何が起こるかを見るとどうなりますか?」)、しかし、より正式なアプローチも使用できます。


コメントしてくれてありがとう。やりたいことがたくさんあるようですね!
ジェフコレズ14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.