テスト駆動開発はゲーム開発で実行可能ですか?


23

スクラム認定を受けているため、システムの開発中にアジャイル手法を採用する傾向があり、スクラムフレームワークのキャンバスを使用して日々の作業を管理することもあります。

それに、TDDが実行可能な場合、ゲーム開発のオプションであるかどうか疑問に思っていますか?

このGDの質問を信じるなら、TDDはゲーム開発であまり使用されません。
ゲームアーキテクチャでMVCとTDDが採用されないのはなぜですか?

コードを徹底的にテストしないと壊滅的なシナリオが発生する可能性があるため、大きな予算の大きなプロジェクトが完璧に機能する必要がある産業用プログラミングから来ています。

さらに、スクラムのルールに従うことにより、スクラムのすべてのアクションがタイムボックス化されている間、作業の期日を満たすことが奨励されます!ですから、上記の質問で彼らがシステムを構築しようとするのをやめて、ゲームを書き始めると言ったとき、私は同意します。完璧なシステムを構築しないように、最初に:スプリントの終わりまでに機能させるように、スクラムが言っていることはまったく同じです。次に、必要に応じて2番目のスプリントで作業しながらコードをリファクタリングします!

ゲーム開発を担当するすべての部門がスクラムを使用しないと、スクラムが役に立たなくなることを理解しています。しかし、少しの間、すべての部門がスクラムを使用していることを考えてみましょう...「完璧な」システム/ゲームを作成したくない場合でも、TDDはバグのないコードを作成するのに適していると思います。

私の質問は次のとおりです。

とにかくゲーム開発でTDDは実行可能ですか?


この質問からの議論は、あなたがリンクした質問を超えて追加するつもりですか?

アジャイルソフトウェア開発におけるプロジェクト管理のスクラムフレームワークを紹介し、スプリント中にスクラムが開発者に求めているものについて議論し、TDDをオプションとして実行可能にします。TDDやMVCの観点だけでなく、スクラムの観点から、対象に関する他の人の視点を取得したいと思います。TDD自体をスタンドアロンのアプローチと見なす以外に、メダルのこちら側から議論したときにTDDがどのように実行可能でないかを理解したいと思います。
ウィルマルクレール

@Will TDD ==トップダウン設計またはテスト駆動設計?私は...トップダウンを考えていたし、長期的に管理の答えを与えるつもりだったが、その後、他の答えは私ではなかった形でTDDを解釈して見ました
ジェームズ

@James:テスト駆動開発。
カオス

@ジェームズ:混乱してごめんなさい!私が頭に置いていたのはアジャイルソフトウェア開発とスクラムであるため、頭字語の他の意味については知りませんでした。
ウィルマルクイラー

回答:


11

多くのゲームプログラマーはまだこのアイデアを実際に採用していないか、複雑なシステムをテストする方法を十分に理解していませんが、確かに実行可能です。テストするのが簡単な非ゲームプレイ関連システムを除いて、私はめったに使用しないことを認めています。

多くのモックオブジェクトを使用することを期待してください。多くのシステムがどのように結び付けられているかにより、個々のコンポーネントをテストすることは困難です。

さらに、多くのことを徹底的にテストすることはできません。たとえば、パーティクルシステムをどのように試運転しますか?アニメーションシステムが正常に動作していることをどのようにテストしますか?多くのことは本質的に視覚的であり、適切なテストを行う方法については(少なくとも私には)明らかではありません。

ただし、従来の言葉の意味での単体テストではなく、特定の機能の「テスト」として存在するものがたくさんあります。AIナビゲーションのテストレベルなどは非常に一般的ですが、必ずしも自動化するのが最も簡単なものではありません。

ゲームには、ユニットテストを記述できる(おそらくそうすべき)特定の側面があります。あらゆる種類の一般的な「ファイル読み取り」システムをテストする必要があります。ハードウェア(3Dサーフェスなど)の初期化のためのテストがあるかもしれません。模擬サーバーをいくつか用意して、クライアント/サーバーの相互作用コードをテストしてください。そういうもの。


9
これらは、自動化されたテストの存在に関する優れた提案ですが、テスト駆動開発ではまったくありません。

1
興味深い意見、Tetrad!一粒の塩をありがとう。ビジュアルアニメーションをテストする方法を尋ねますか?おそらくいくつかの小さなゲームを開発した後、私はまだ単一のゲームを書いたことがないので、3Dシステムに関して言うのは難しいです!また、2Dでは、マトリックスで表されるオブジェクトや、画面に画像をレンダリングするマトリックスパーサーがよく見られます。したがって、何らかの方向キーが押された後、結果のマトリックスの適切な場所で見つかった適切な情報が開始点になる可能性があることを確認します。私はゲームの視覚的なコンポーネントについてまだ十分に知らないだけで、今年は必ずそうするでしょう!=)
ウィルマルクイラー

コーディングを終えて、OOPの概念の知識が必要な今週の質問(GDで初めて!)に回答したと言いました。OPはヘビをKeys.DownKeys.Leftなどに移動させたいと考えていました。つまり、ゲームはユーザーがヘビを移動させたい場所を知っており、ヘビはゲームが指示する場所に行かなければならないということです。異なる方向に移動するため、ゲーム内の位置も移動します。これを言って、私見、Snakeクラスをテスト可能なものにします!(続く...)
ウィルマルクイラー

テストできるだけでなく、現在はTDDの有力な候補です。この2DゲームVector2.Zero10.0fは、X軸とY軸の両方の速度で、ヘビが位置で初期化されたとしましょう。最初の質問は、想定された初期位置に配置されているか、どのようにテストするかです。それから、あなたはそのPosition財産が公にさらされると思う。第二:それを動かす方法は?運動方法を使用すると、各方向メソッドのテストを書くので、良いことがありMoveDownMoveLeftというように。次に、メソッド宣言を作成して、テストで問題が発生するかどうかを確認します。次に、ヘビの位置を確認します
ウィルマルクイラー

MoveDownメソッド呼び出しの後!Positionプロパティが徹底的にテストされていることを知っているので、それはあなたが数えることができるメンバーです!あなたはここで継続を推測するかもしれません!;-)つまり、視覚コンポーネントは間違いなくテストできませんが、ヘビはヘビのように見えるはずです。これはすべて、ゲームでどのようなヘビを望むかによって異なります。ヘビを描くアーティストは、ヘビを描くことに満足していることを証明する必要があります。もちろん、TDDでテストすることはできません。しかし、他のオブジェクトとの相対的な位置、およびこの蛇を表すクラスも同様です。実際には、TDD
ウィルMarcouiller

11

TDDは、ゲーム開発の基盤としては適切ではないと思います。方法論の一環として、ユニットテストを自動化された、確かに、しかし、ゲーム開発の主要な関心事のあまりに多くがあることをテストするための主観ではなく、マシンテスト可能ですドライバ開発の。ゲームメカニックが楽しいかどうかのスクリプトテストをどのように作成しますか?レベルは視覚的に魅力的ですか?そのレベルであっても、一般的なプレイヤーが完了するのに約15分かかりますか?TDDは、プロジェクトの成熟度を仕様への準拠の観点から定量的に測定できる状況に適合し、それはゲーム開発ではありません。


3
ゲーム開発が仕様に準拠していないと言うとき、どういう意味ですか?私のポイントは、あなたがそれを書きたいとき、あなたはどんな種類のゲームを書くかを知らなければならないということです。そのため、仕様、要件は機能などとして記述されるものとします。スクラムの製品バックログの例を見てみましょう。予想されるゲームを作成するために、ゲームで開発する必要があるユーザーストーリーを知っています。次に、別の例として、おそらく格闘ゲームで衝突を検出する必要があります。これらはテスト可能なものです!ゲームが楽しいかどうかは、物語よりもプログラミングよりも私見です。
ウィルマルクイラー

@Will Marcouiller:仕様がない、またはそれらのコンプライアンスを測定できないことを意味するつもりはありませんが、他の種類の開発よりもプロジェクトに関して重要なことを有意に指定することはできません。「ゲームは楽しいはず」を仕様に書くことができますが、それは技術的な意味を持つ仕様ではありません。テスト可能なものをテストすることはできますが、TDDのポイントは、テストはプロセスの一部ではなく、プロセス全体の基本であり、基本的な考え方であり、主観的なフィールド。
カオス

2
@Will Marcouiller、私は非常に、非常に、ゲームの楽しさが物語に帰着することに同意しません。ゲームのすべての楽しみはゲームプレイに集約され、ストーリーは単なるボーナスです。
AttackingHobo

1
@Will:いいえ、彼はユーザーがゲームから得る楽しさは自動化されたテストでは決定できないと言い、ゲームには消費者の手に送ることでしかテストできない大量のものがあると言っています。
DeadMG

1
@DeadMG:それは誰もが望んでいるよりも真実ですが、私のポイント(必ずしもAttackingHoboのものではありません)には、開発プロセス自体に、デザイナー、プロデューサー、開発者、テスターに​​よるテストを組み込む必要があります。テスト、つまり、ゲームが作成するエクスペリエンスの質と感触、スタイル、および美的効果に関係します。開発の重要な部分であるTDDを行っていることを人々に伝えることは、基本的に彼らにうそをつくことです。
カオス

6

タイトルが純粋にTDDであるため、あなたが求めているものを正確に解決するのは少し難しいですが、スクラムも質問の不可欠な部分になっているようです-私は理解しているように、一方は他方を必要としません。

このGDの質問を信じるなら、TDDはゲーム開発であまり使用されません。

それは正しいです。ゲーム業界で実際に使用されたことは聞いたことがないと思います。(しかし、私はそれがゲーム業界以外で使用されていることを聞いたことはありません-個人だけです。)

コードを徹底的にテストしないと壊滅的なシナリオが発生する可能性があるため、大きな予算の大きなプロジェクトが完璧に機能する必要がある産業用プログラミングから来ています。

ゲームは問題なく動作する必要はありません。したがって、コードの正確性はそれほど重視されません。TDDはコードの正確さを保証しませんが、一部の人々はそれが不正確さを減らすと感じています。私はまだこれの証拠を見ていません。

さらに、スクラムのルールに従うことにより、スクラムのすべてのアクションがタイムボックス化されている間、作業の期日を満たすことが奨励されます!

期日を満たすことを推奨しない方法論や、タイムボックス化されていないアクションを持つ方法論を見たことはありません。問題は、どの方法を使用しても、ソフトウェアの複雑さを推定するのは非常に難しいことです。不可能ではありませんが、それを正確に推定することはプロセスとは関係ありません。私のタスクが新しいGUIパネルを追加するか、アニメーションのバグを修正するか、キャラクターに新しい統計を追加することである場合、スクラムの使用はそれをまったくスピードアップせず、TDDの使用は進んでいますタスクの速度を落とすために(後でさらにメンテナンスタスクを減らす可能性があります)。確かに、タスクの継続時間を簡単に見積もることはできません。

「完璧な」システム/ゲームを書きたくないが、TDDはバグのないコードを書くのに良いと思う。

TDDが他の方法よりも優れたコードを書くことが証明されている場合、はい。

これの証拠はありますか?産業がそれを使用するかもしれないという事実は証拠ではありません。業界は、遅いコードを生成することでよく知られており、遅れて配信されます。失敗または遅れた主要なTDDプロジェクトの例がないのは、それが新しいアプローチであり、実際にそのようなプロジェクトをまだ完了している人が少ないためかもしれません。(そして、遅れて実行されているものは...まだ実行されている可能性があります。)

とにかくゲーム開発でTDDは実行可能ですか?

実行可能ですか?もちろん。有益?それはまだ証明されていません。


1
残念ながら、TDDとスクラムはまだ誤解されています。これは、バグ修正などのスピードアップに役立たない既存のプロジェクトにも当てはまります。スクラムは、ゲームのように複雑なシステムを開発するためのフレームワークです。スクラムは、スプリントから別のスプリントへのバグ修正を推奨します。TDDはユーザーの側にあなたを置きます。ユーザーとは、コードを使用する同僚のプログラマーのことです。他の人がコードを使いやすくするために、どのように使用すべきかを考えさせられます。したがって、それは経験ごとに、より良い設計につながります。すべては言ったが、主題についての興味深い見解を得た。
ウィルマルクレール

1
バグが蓄積されないように強制すると、機能がスリップするだけです。時間を魔法のように作り出すことはできません。私の理解では、スクラムにはバグ特有の特定の方法はありません。TDDが他の人があなたのコードをどのように使用するかを考えるように強制することに関しては、それが唯一の方法ではありません。したがって、必ずしも良いとは限らず、必ずしも最も効果的な時間の使用とは限りません。
キロタン

1
参考までに、Noel LlopisはインディーゲームにTDDを使用しており、以前の会社であるHigh Moon StudiosはTDDを広範囲に使用していました。引用がありません、ごめんなさい。
tenpn

読むのが面白い点がいくつかあります!あなたの貢献をありがとう。それにもかかわらず、TDDはXP(エクストリームプログラミング)と同様にもう1つのアプローチであると付け加えたいと思います。そして、はい、スクラムはバグ固有の特定の方法を提供せず、むしろ(開発者の)チームの自己組織化に投資します。スクラムは、物事のやり方を教えてくれるのではなく、何をすべきかを伝えるだけです。それは、チームが行うべきことを順守することです。スクラムは、自己組織化されたクロスファンクショナルチームにのみ賭けます。これは、など、機能が開発され、テストされるべきかを決めるチームである
ウィルMarcouiller

(続き...)GDのクラスに関する今週の最初の質問に答えました。OPは、方向キーを押したときにスプライトを移動させる方法を知りたいと考えました。OOPの概念に慣れているため、クラスを使用してXNAを使用して最初のゲームを開発する必要があると考えました。そうは言っても、私のSpacecraftクラスはメソッドとプロパティを持つ完全にテスト可能なクラスになります。これは、TDHを使用して完全にテストできるものです。宇宙船が必要だとしましょう。そして、一度に1つのテストを達成するために必要なものについてテストを作成します。
ウィルマルクレール

4

私の英語が下手でごめんなさい。偏った見方でごめんなさい。私はゲームデザイナーではなくコーダーです。

この議論には誤解があると思います。TDDについては、より一般的な形式、いわゆるBDDで説明します。行動駆動型開発は、プロジェクトをテストする方法ではありません(テストは副作用のようなものです)。 BDDは、すべての制作中にリファクタリングとソフトウェア設計を行う方法であり、KISS、「品質を維持する」、「早期にテストし、頻繁にテストする」などのモットーを参照してください。BDDは、ウォーターフォールプロセスのような古典的なソフトウェアプロセスや、ソフトウェアを作成するための他の反復的な方法論の反対です。

もう1つのポイントは、自動テストは、計算機によって自動的にテストできる機能に対するものです。ゲームの楽しみのテストはありません。また、グラフィカルユーザーインターフェイスの使いやすさのテストもありません。楽しみや使いやすさは他の仕事の資料であり、インタラクションデザイナー、ワールド、レベルdなどのソフトウェア開発ではありません。芸術的部分(モデリング、テクスチャリングなど)は、創造性のためのツールとしてコンピューターを使用するアーティスト向けです-明らかに、これらの仕事はコードを書く同じ人が実行できますが、これはポイントではありません。物理学のテスト、最適化アルゴリズムのテスト、単一オブジェクトの動作のテスト(前述のモック、スタブ、ダミー)

最後の考えは、私見では、ゲームデザインだけでなく、コードを書くこと全体が芸術であるということです。


4

以下は、TDDとgamedevの混合をかなりうまく考えている人のケーススタディです。

http://powertwenty.com/kpd/downloads/TestDrivenDevelopmentInPython.pdf

確かに、これはPygameの小さなプロジェクトですが、グラフィカルゲームでテストできる部分とできない部分のアイデアを提供します。このシナリオでTDDを使用してどれだけのことができるかに驚いた。


1
同じプロジェクトを行ったコントロールグループ(非常に高いレベルの言語で既存のささいなアーケードゲームを複製)と比較せずに、TDDが効果的かどうかについては何も述べていません。彼はTDDを使用したとだけ言っています。

3

いいえ、テスト駆動開発はゲーム開発には適していません。確かにテストしたい部分のテストを書くことができますが、ゲーム開発プロセスはテスト駆動開発とはまったく異なります。テスト駆動開発では、進行を開始する前に正確な仕様が必要です。

ゲームが開始されたとき、正確な仕様がめったにありません。そして、もしそうなら、彼らは常に開発プロセスの間に変化し進化します。

ゲームデザインは芸術であり、芸術が良いか完成したかを知るための具体的なテストはできません。


ゲーム自体や機能分析などを分析するとき、楽しい要素を考慮すべきだと思いませんか?ゲームを楽しくプレイするための一連の機能を設定できます。この機能はテスト可能です!私は、あなたが思いついたトピックと議論について深く掘り下げるために、異なる意見を提示しようとしています。ご協力いただきありがとうございます!=)
ウィルマルクイラー

3
多くの開発は、小さなことを微調整し、それらがどれだけ楽しくプレイできるかを見ることに帰着します。それらが完全に石に設定されていない限り、これらのことをテストすることはできません。また、システムの実行後のテストはTDDではなく、テストですが、テストによって駆動される開発ではありません。
AttackingHobo

2
ほとんどの現実世界のプロジェクトは、開始時に正確な仕様を持っていると思われる場合、おそらく多くの現実世界のプロジェクトに取り組んでいないでしょう。
BlueRaja-ダニーPflughoeft
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.