コンピュータに自動的にプレイをさせてバグを見つける自動プレイテストという物があります。
おそらく、ランダムやトレース等で自動的にプレイさせてバグを見つけるという方法は、
やったことがある人も多いと思います。
しかし、これに一工夫を加えると早期にやっかいなバグを大量に見つけてくれる非常に有効な方法になります。
継続的インテグレーションとランダムシードの記録により、
非常に発生確率が低いバグや、1フレームのタイミングで発生するようなバグを、
プログラマの席のデバッガ上で99%近くの確率で何度でも再現させることが出来るようになります。
このセッションではこの方法を具体的に紹介します。
まず、継続的インテグレーションの必要性と、その方法です。
発生したバグを確実に再現させるには、バグの発生した状況と同じ状況を用意する必要があります。
この時、誰かのスタッフのローカル環境では微妙に動作が異なり、再現が難しくなります。
ここで継続的インテグレーションを導入し、
ローカルな修正が入らず、あとからでも全く同じバージョンを用意できる環境を作ると再現が容易になります。
その時、生成したバイナリにはバージョン管理システムのリビジョンを埋め込んでおく必要があります。
ランダムシードの記録とは、ランダムでプレイをさせるときのランダム値を固定するために使用します。
これを記録しないと、たとえ同じバイナリでも動作が変わります。
この時、ランダムシードはゲーム画面と、デバッグ用コンソールに表示し、
ゲームが停止した場合にすぐメモがとれるようにする必要があります。
そのメモしたランダムシードと、同じリビジョンのソースとデータがあれば、
大半の場合はバグが再現でき、修正されたことの確認も容易になります。
これで見つかるバグはデバッガーに確認してもらう必要もないため、
デバッガーは自動テストでカバーできない範囲のバグに注力することが出来ます。
とあるアクションゲームでは、
これによりメインとなるアクション部分の停止バグはほとんどがデバッガーの助けを借りずに発見、修正できました。
その他、これに関連するちょっとした自動プレイテストを有効に使うためのヒントを紹介する予定です。
講演者プロフィール
林原 裕之
2001年~2008年
各コンシューマゲーム会社で、主にライブラリプログラムを行う
2008年~ 株式会社Aqualead設立
ゲームフレームワークAqualead開発