ゲームテスト
QAエンジニアのようにゲームをテストします。Claude Codeまたはプロジェクトファイルがあるチャットセッションを使用します。
ワークフロー
- ルールを読む:
RULES.mdが存在すれば開きます(game-rules-coreスキルから)。存在しない場合は、コードからルールを推測し、最初に書き留めます。テスト不可能なルールは仕様のバグです。 - コードをマッピングする: ゲームループ、ステートマシン、入力処理、衝突、スポーン、スコアリングのコードを見つけます。
- 静的レビュー:
references/checklist.mdの一般的なバグをスキャンします。 - テストを書く: 純粋なロジック(衝突計算、スコアリング、状態遷移)のユニットテストと、可能な限り決定論的なシミュレーションテスト(固定シード、固定デルタタイム、スクリプト化された入力)を追加します。
- 実行して観察する: テストを実行し、ブラウザツールが利用可能な場合はゲームをプレイしてコンソールエラーをキャプチャします。
- 報告する: 以下の形式を使用して
BUG_REPORT.mdを作成します。
テストカテゴリ(すべてカバー)
- コアループ: 開始、一時停止、再開、再起動、ゲームオーバー、勝利。すべての状態遷移が機能し、適切なものをリセットする。
- 入力: 同時キー入力、一時停止中のキー押下保持、高速タップ、フォーカス喪失(ブラー)、タッチ操作とゲームパッド(対応している場合)。
- 衝突/物理: 高速時のすり抜け、角への引っ掛かり、エッジへの立つ、移動プラットフォーム、ワールド外への落下。
- ルール:
RULES.mdの各行に対して少なくとも1つのテスト:トリガー、条件、効果、エッジケース。 - スコアリング/進行: 正しく加算される、二重カウントがない、再起動時にリセットされる、永続化(localStorage)がリロード後も維持され、破損データを処理する。
- スポーン: 制限が尊重される、常に通過可能、再起動後にエンティティが残らない、経時的なメモリ増加がない。
- フレームレート独立性: シミュレートされた30、60、144FPSで実行し、ゲームプレイ結果が一致する必要がある。
- パフォーマンス: フレーム時間、エンティティ数の増加、メモリリーク、ドローコール(3D)。
- ロバストネス: ウィンドウのリサイズ、タブの切り替え、高速再起動、モバイルビューポート。
- 決定論性: 同じシードと同一の入力で同じ結果が得られる。
バグレポート形式
各バグに対して:
- ID / タイトル
- 重要度: Critical(クラッシュ、ソフトロック、進行不能)/ Major(ルール違反)/ Minor(視覚、感触)/ Polish
- 再現手順(番号付き、正確)
- 期待値 vs 実績値
- 証拠: ファイルと行、コンソールエラー、または失敗したテスト名
- 修正案(1行か2行)
レポートの最後に、重要度別の集計表と、テストされなかった項目のリストを記載します。
厳格なルール
- 証拠(失敗するテスト、ログ、または指摘可能なコードパス)なしにバグを主張しない。
- 実行していない機能が動作するとは主張せず、「レビュー済み、未実行」と述べる。
- 「プレイしてみて問題なかった」という感覚よりも、決定論的テストを優先する。
- 依頼がない限りゲームプレイコードを変更しない。まず報告し、依頼があれば修正する。