HigenekoTechさんにゲームプログラムでのユニットテストのことを聞いてみた

HigenekoTechさんはいつもゲームプログラムのユニットテストを行っている様子をつぶやいていただいているので、思い切ってゲームプログラムのユニットテストの話を聞いてみることにしました。
7
きむら @senequis

いつも @HigenekoTech さんの、つぶやき楽しみにしてます。もしよかったらゲームプログラムでユニットテストを書くときに気をつけてることなど聞かせてください。

2012-03-30 22:37:52
ひげねこ@技 @HigenekoTech

@senequis 基本的にモジュール化されたコードのホワイトボックステストはビジネスソフトのユニットテストと同じですが、ブラックボックステストはテスト開発者がテストを書けるようにする工夫がいくつかありますね

2012-03-31 06:29:27
ひげねこ@技 @HigenekoTech

うちのテスト開発者さんはVSTSを使ってて、そこからコマンド発行してゲームのコントロールをするようになっています。例えば「ゲーム起動」「指定したステージへ移動」、そしてもっとも汎用的なのが「このコントローラー入力ログを再生」コマンドですね

2012-03-31 06:31:52
ひげねこ@技 @HigenekoTech

加えて、ゲーム状態を取得するコマンドがあります。「メモリ使用状況の取得」「平均FPSの取得」「現ステージの名前」といった感じです

2012-03-31 06:33:53
ひげねこ@技 @HigenekoTech

そして、このコマンドはネットワークを介して発行できるので複数のマシンで同時に複数のテストを走らせることができるようになっています

2012-03-31 06:34:48
ひげねこ@技 @HigenekoTech

テスト開発者はこれらのコマンドを駆使してVSTSを使ってC# でテストコードを書けるようになっています。で、エンジン開発者はこれらのコマンド機能を提供するって感じですね

2012-03-31 06:36:16
ひげねこ@技 @HigenekoTech

で、開発者はdevtestというチェックイン前に実行しないといけない複数のテストを実行させ、これをパスしないとチェックインできないようになっています

2012-03-31 06:38:41
ひげねこ@技 @HigenekoTech

忘れてはいけないのは、これらのテストの目的はあくまで「ゲームが起動しない」「クラッシュする」といった数十人単位で開発している時に起こしてはいけない(複数人数の作業が止まってしまう)状況を避けるということです

2012-03-31 06:42:00
ひげねこ@技 @HigenekoTech

これらのテストを実行しても、テストでカバーされていない「このステージのこのアイテムが取れなくなった」という不具合を見つけることはできませんが、この不具合によって作業が止まる、つまりブロッキングされる人数はチーム全体数に比べれば無視できる範囲で収まるのでカバーする事は少ないですね

2012-03-31 06:46:24
ひげねこ@技 @HigenekoTech

もちろん、カバーしたいテストリストはいつも膨大な数になりますが、限られた人員、予算では全てをカバーする事は無理なので、優先順序をつけて開発効率が最大限になる順場に書いていきます

2012-03-31 06:50:50