忍者ブログ

Memeplexes

プログラミング、3DCGとその他いろいろについて

アジャイルでXNAゲーム開発

"XNA Game Programming"を2章読んだのですが、(全部で14章)
著者のベンジャミンさんはかなりアジャイルをプッシュしているようです。

しょっぱなの簡単なゲームのサンプル(Pongゲーム)から
ユニットテストを行っています。

ユニットテストといってもNUnitなんかを使うわけではなく、
ただ単にある動作をさせるメソッドを作って目で直接チェックします。
(まぁグラフィックスが絡むと自動テストはかなり難しくなりますからね。)

例えば、画面にメニューを表示させたいのなら、
メニューを出すTestMenuSpritesというメソッドを作り、
それをMainメソッドから通常のコードの代わりに呼び出します。
上手くメニューが表示されたかどうかは自分の目でチェックします。

この方法が単に行き当たりばったりプログラミングよりも優れているのは、
テストしたいことを直接テストできると言う点です。
この本ではボールの衝突チェックのユニットテストの時に真価が発揮されています。

もし行き当たりばったりのプログラミングをしていたのなら、
メニューからスタートし、ゲームを始め、
実際にラケットでボールを弾いて衝突が
上手くいっているか確かめることになるでしょう。
しかしこれでは面倒です。

ここでチェックしたいのはボールの衝突だけであって、
メニューやゲームの開始ではないからです。
それに衝突と一口に言ってもラケットとの衝突、横壁との衝突、縦壁との衝突など
色々あります。
ボールがきちんとチェックできる状態になるまで時間がかかるかもしれません。

この本では、ユニットテストを行うメソッドの中で、
ゲームを直ちにテストできる状態にしています。
メニューを初めに表示するのではなく、もう既にゲームが始まった状態にし、
そしてボールの位置は、キーボードの状態によって
壁の近くに配置できたりするのです。

これなら比較的簡単に結果を確かめることが出来るでしょう。

グラフィックスが絡むと自動テストは難しくなりますが、
自動テストと同じくらい簡単なテストを作ることは出来るのです。

拍手[0回]

PR