HigenekoTechさんにゲームプログラムでのユニットテストのことを聞いてみた
いつも @HigenekoTech さんの、つぶやき楽しみにしてます。もしよかったらゲームプログラムでユニットテストを書くときに気をつけてることなど聞かせてください。
2012-03-30 22:37:52@senequis 基本的にモジュール化されたコードのホワイトボックステストはビジネスソフトのユニットテストと同じですが、ブラックボックステストはテスト開発者がテストを書けるようにする工夫がいくつかありますね
2012-03-31 06:29:27うちのテスト開発者さんはVSTSを使ってて、そこからコマンド発行してゲームのコントロールをするようになっています。例えば「ゲーム起動」「指定したステージへ移動」、そしてもっとも汎用的なのが「このコントローラー入力ログを再生」コマンドですね
2012-03-31 06:31:52加えて、ゲーム状態を取得するコマンドがあります。「メモリ使用状況の取得」「平均FPSの取得」「現ステージの名前」といった感じです
2012-03-31 06:33:53そして、このコマンドはネットワークを介して発行できるので複数のマシンで同時に複数のテストを走らせることができるようになっています
2012-03-31 06:34:48テスト開発者はこれらのコマンドを駆使してVSTSを使ってC# でテストコードを書けるようになっています。で、エンジン開発者はこれらのコマンド機能を提供するって感じですね
2012-03-31 06:36:16で、開発者はdevtestというチェックイン前に実行しないといけない複数のテストを実行させ、これをパスしないとチェックインできないようになっています
2012-03-31 06:38:41忘れてはいけないのは、これらのテストの目的はあくまで「ゲームが起動しない」「クラッシュする」といった数十人単位で開発している時に起こしてはいけない(複数人数の作業が止まってしまう)状況を避けるということです
2012-03-31 06:42:00これらのテストを実行しても、テストでカバーされていない「このステージのこのアイテムが取れなくなった」という不具合を見つけることはできませんが、この不具合によって作業が止まる、つまりブロッキングされる人数はチーム全体数に比べれば無視できる範囲で収まるのでカバーする事は少ないですね
2012-03-31 06:46:24もちろん、カバーしたいテストリストはいつも膨大な数になりますが、限られた人員、予算では全てをカバーする事は無理なので、優先順序をつけて開発効率が最大限になる順場に書いていきます
2012-03-31 06:50:50