2012年10月21日日曜日

キャラクタープログラムのテスト

ゲームプログラムでのソフトウェアテストは難しいものとして認識されています。

画面上に表示された2Dキャラクターが、ゲームパッドのスティックを左右に入れる事により移動して、ボタンを押す事によりジャンプをする。
今回はキャラクタープログラムのテストを考えてみます。


今回のケースでは、全てを同時にテストしようとすると、人がゲームパッドを操作して、正常に動作しているか目で確認するしかありません。

しかもその場合、全ての状況をテストする為には、ユーザーが操作出来る可能性のある、全ての入力をテストしなければなりません。

これを全て人の手でテストするのは非現実的です。

モジュール

先ほどのキャラクタープログラムは、三つのモジュールに分かれています。
  • ゲームパッドの入力を受け取るモジュール
  • 入力に対してキャラクターの座標やアニメーションパターンを更新するモジュール
  • 座標とアニメーションに合わせてキャラクターを表示するモジュール
この場合ゲームパッドから受け取る情報は三種類だとします
  • キャラクター右移動
  • キャラクター左移動
  • キャラクタージャンプ
この情報を受け取って、座標やアニメーションパターンを更新するモジュールが動作する訳です。

表示に必要な情報も二種類だけです
  • キャラクターの座標
  • キャラクターのアニメーションパターン

人を超越するプログラム

キャラクタープログラムのテストが難しいのは、ユーザーが何時どのようなタイミングで入力をするのかが、限定できないためです。
  • プレイヤーによっての入力の癖の違い
  • 間違って押されたボタン
これらを違う人間がまったく同じ動作を再現するのは不可能です。

しかし、ゲームパッドから受け取る情報が三種類なら、プログラムで作る事は出来ないでしょうか?
これはプログラムをそのように作成すれば可能です。
  • スティックによるキャラクターの移動とジャンプボタンを同時に押す事
  • 左に移動開始した次の瞬間に右に移動開始する事
これらは、プログラムでゲームパッドの入力を再現する事により可能です。

さて、確認はどのように行えば良いでしょうか
  • ユーザーから左移動の入力があった場合、指定された速度で移動したか
  • ジャンプ入力があった場合予定している時間の間は空中にいたか
これらを人が目で確認するのは非常に困難です。

しかし、プログラムで座標を判定するのは比較的容易です。
人には難しい1/60秒のタイミングを見切る事も可能です。

ユーザー体験を判定する事は難しい

プログラムで入力の作成と出力の判定を行う事により、テストが容易になる事がわかりました。
しかし、どうしてもプログラムでは処理できない部分があります。
ユーザー体験の判定です。
  • ユーザーの入力に対してキャラクターの速度は速すぎないか
  • ジャンプの反応は遅くないか
これらをプログラムで正確に判定するのは困難です。
人が実際にプレイして判断する必要があります。


しかし、ユーザー体験をテストする為には、プログラムが想定どおりに動作している事が前提になります。
もしプログラムが正しく動作していない状況でパラメーターを修正してしまった場合、プログラムのバグを修正した際に再度パラメーターの修正が必要になってしまいます。

キャラクタープログラムに限らずゲームプログラムでは、仕組みが正しく動作しているのかを確認するテストと、ユーザーの体験が意図した結果になっているのかを確認するテストは、別々に行う事で効果的なテストが可能になります。

0 件のコメント:

コメントを投稿