bmad-method 6.0.0-alpha.17 → 6.0.0-alpha.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +97 -0
- package/package.json +1 -1
- package/src/modules/bmgd/_module-installer/installer.js +160 -0
- package/src/modules/bmgd/_module-installer/platform-specifics/claude-code.js +23 -0
- package/src/modules/bmgd/_module-installer/platform-specifics/windsurf.js +18 -0
- package/src/modules/bmgd/agents/game-architect.agent.yaml +23 -8
- package/src/modules/bmgd/agents/game-designer.agent.yaml +38 -18
- package/src/modules/bmgd/agents/game-dev.agent.yaml +30 -14
- package/src/modules/bmgd/agents/game-qa.agent.yaml +64 -0
- package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +27 -39
- package/src/modules/bmgd/agents/game-solo-dev.agent.yaml +56 -0
- package/src/modules/bmgd/docs/README.md +180 -0
- package/src/modules/bmgd/docs/agents-guide.md +407 -0
- package/src/modules/bmgd/docs/game-types-guide.md +503 -0
- package/src/modules/bmgd/docs/glossary.md +294 -0
- package/src/modules/bmgd/docs/quick-flow-guide.md +288 -0
- package/src/modules/bmgd/docs/quick-start.md +250 -0
- package/src/modules/bmgd/docs/troubleshooting.md +259 -0
- package/src/modules/bmgd/docs/workflow-overview.jpg +0 -0
- package/src/modules/bmgd/docs/workflows-guide.md +463 -0
- package/src/modules/bmgd/gametest/knowledge/balance-testing.md +220 -0
- package/src/modules/bmgd/gametest/knowledge/certification-testing.md +319 -0
- package/src/modules/bmgd/gametest/knowledge/compatibility-testing.md +228 -0
- package/src/modules/bmgd/gametest/knowledge/godot-testing.md +376 -0
- package/src/modules/bmgd/gametest/knowledge/input-testing.md +315 -0
- package/src/modules/bmgd/gametest/knowledge/localization-testing.md +304 -0
- package/src/modules/bmgd/gametest/knowledge/multiplayer-testing.md +322 -0
- package/src/modules/bmgd/gametest/knowledge/performance-testing.md +204 -0
- package/src/modules/bmgd/gametest/knowledge/playtesting.md +384 -0
- package/src/modules/bmgd/gametest/knowledge/qa-automation.md +190 -0
- package/src/modules/bmgd/gametest/knowledge/regression-testing.md +280 -0
- package/src/modules/bmgd/gametest/knowledge/save-testing.md +280 -0
- package/src/modules/bmgd/gametest/knowledge/smoke-testing.md +404 -0
- package/src/modules/bmgd/gametest/knowledge/test-priorities.md +271 -0
- package/src/modules/bmgd/gametest/knowledge/unity-testing.md +383 -0
- package/src/modules/bmgd/gametest/knowledge/unreal-testing.md +388 -0
- package/src/modules/bmgd/gametest/qa-index.csv +17 -0
- package/src/modules/bmgd/module.yaml +25 -9
- package/src/modules/bmgd/teams/default-party.csv +2 -0
- package/src/modules/bmgd/teams/team-gamedev.yaml +12 -1
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-01-init.md +164 -0
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-02-context.md +210 -0
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-03-ideation.md +289 -0
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-04-complete.md +275 -0
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/workflow.md +49 -0
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/workflow.yaml +29 -8
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-01-init.md +223 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-01b-continue.md +151 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-02-vision.md +218 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-03-market.md +218 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-04-fundamentals.md +231 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-05-scope.md +242 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-06-references.md +224 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-07-content.md +282 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-08-complete.md +296 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/workflow.md +62 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/workflow.yaml +40 -9
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-01-init.md +248 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-01b-continue.md +173 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-02-context.md +332 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-03-platforms.md +245 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-04-vision.md +229 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-05-core-gameplay.md +258 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-06-mechanics.md +249 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-07-game-type.md +266 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-08-progression.md +272 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-09-levels.md +264 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-10-art-audio.md +255 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-11-technical.md +275 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-12-epics.md +284 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-13-metrics.md +250 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-14-complete.md +335 -0
- package/src/modules/bmgd/workflows/2-design/gdd/workflow.md +61 -0
- package/src/modules/bmgd/workflows/2-design/gdd/workflow.yaml +27 -7
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-01-init.md +228 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-01b-continue.md +163 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-02-foundation.md +262 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-03-story.md +238 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-04-characters.md +297 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-05-world.md +262 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-06-dialogue.md +250 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-07-environmental.md +244 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-08-delivery.md +264 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-09-integration.md +254 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-10-production.md +262 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-11-complete.md +331 -0
- package/src/modules/bmgd/workflows/2-design/narrative/workflow.md +57 -0
- package/src/modules/bmgd/workflows/2-design/narrative/workflow.yaml +53 -8
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-01-init.md +223 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-01b-continue.md +153 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-02-context.md +262 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-03-starter.md +290 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-04-decisions.md +300 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-05-crosscutting.md +319 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-06-structure.md +304 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-07-patterns.md +349 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-08-validation.md +293 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-09-complete.md +302 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/workflow.md +55 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/workflow.yaml +50 -21
- package/src/modules/bmgd/workflows/4-production/code-review/checklist.md +23 -0
- package/src/modules/bmgd/workflows/4-production/code-review/instructions.xml +225 -0
- package/src/modules/bmgd/workflows/4-production/code-review/workflow.yaml +18 -15
- package/src/modules/bmgd/workflows/4-production/correct-course/checklist.md +1 -1
- package/src/modules/bmgd/workflows/4-production/correct-course/instructions.md +1 -1
- package/src/modules/bmgd/workflows/4-production/correct-course/workflow.yaml +11 -6
- package/src/modules/bmgd/workflows/4-production/create-story/checklist.md +332 -214
- package/src/modules/bmgd/workflows/4-production/create-story/instructions.xml +298 -0
- package/src/modules/bmgd/workflows/4-production/create-story/template.md +3 -5
- package/src/modules/bmgd/workflows/4-production/create-story/workflow.yaml +12 -7
- package/src/modules/bmgd/workflows/4-production/dev-story/checklist.md +65 -23
- package/src/modules/bmgd/workflows/4-production/dev-story/instructions.xml +409 -0
- package/src/modules/bmgd/workflows/4-production/dev-story/workflow.yaml +13 -3
- package/src/modules/bmgd/workflows/4-production/retrospective/instructions.md +4 -4
- package/src/modules/bmgd/workflows/4-production/retrospective/workflow.yaml +12 -7
- package/src/modules/bmgd/workflows/4-production/sprint-planning/instructions.md +32 -41
- package/src/modules/bmgd/workflows/4-production/sprint-planning/sprint-status-template.yaml +13 -13
- package/src/modules/bmgd/workflows/4-production/sprint-planning/workflow.yaml +6 -1
- package/src/modules/bmgd/workflows/4-production/sprint-status/instructions.md +229 -0
- package/src/modules/bmgd/workflows/4-production/sprint-status/workflow.yaml +35 -0
- package/src/modules/bmgd/workflows/bmgd-quick-flow/create-tech-spec/instructions.md +140 -0
- package/src/modules/bmgd/workflows/bmgd-quick-flow/create-tech-spec/workflow.yaml +27 -0
- package/src/modules/bmgd/workflows/bmgd-quick-flow/quick-dev/checklist.md +37 -0
- package/src/modules/bmgd/workflows/bmgd-quick-flow/quick-dev/instructions.md +220 -0
- package/src/modules/bmgd/workflows/bmgd-quick-flow/quick-dev/workflow.yaml +45 -0
- package/src/modules/bmgd/workflows/bmgd-quick-flow/quick-prototype/checklist.md +26 -0
- package/src/modules/bmgd/workflows/bmgd-quick-flow/quick-prototype/instructions.md +156 -0
- package/src/modules/bmgd/workflows/bmgd-quick-flow/quick-prototype/workflow.yaml +36 -0
- package/src/modules/bmgd/workflows/gametest/automate/checklist.md +93 -0
- package/src/modules/bmgd/workflows/gametest/automate/instructions.md +317 -0
- package/src/modules/bmgd/workflows/gametest/automate/workflow.yaml +50 -0
- package/src/modules/bmgd/workflows/gametest/performance/checklist.md +96 -0
- package/src/modules/bmgd/workflows/gametest/performance/instructions.md +323 -0
- package/src/modules/bmgd/workflows/gametest/performance/performance-template.md +256 -0
- package/src/modules/bmgd/workflows/gametest/performance/workflow.yaml +48 -0
- package/src/modules/bmgd/workflows/gametest/playtest-plan/checklist.md +93 -0
- package/src/modules/bmgd/workflows/gametest/playtest-plan/instructions.md +297 -0
- package/src/modules/bmgd/workflows/gametest/playtest-plan/playtest-template.md +208 -0
- package/src/modules/bmgd/workflows/gametest/playtest-plan/workflow.yaml +59 -0
- package/src/modules/bmgd/workflows/gametest/test-design/checklist.md +98 -0
- package/src/modules/bmgd/workflows/gametest/test-design/instructions.md +280 -0
- package/src/modules/bmgd/workflows/gametest/test-design/test-design-template.md +205 -0
- package/src/modules/bmgd/workflows/gametest/test-design/workflow.yaml +47 -0
- package/src/modules/bmgd/workflows/gametest/test-framework/checklist.md +103 -0
- package/src/modules/bmgd/workflows/gametest/test-framework/instructions.md +348 -0
- package/src/modules/bmgd/workflows/gametest/test-framework/workflow.yaml +48 -0
- package/src/modules/bmgd/workflows/gametest/test-review/checklist.md +87 -0
- package/src/modules/bmgd/workflows/gametest/test-review/instructions.md +272 -0
- package/src/modules/bmgd/workflows/gametest/test-review/test-review-template.md +203 -0
- package/src/modules/bmgd/workflows/gametest/test-review/workflow.yaml +48 -0
- package/src/modules/bmgd/workflows/workflow-status/init/instructions.md +299 -0
- package/src/modules/bmgd/workflows/workflow-status/init/workflow.yaml +29 -0
- package/src/modules/bmgd/workflows/workflow-status/instructions.md +395 -0
- package/src/modules/bmgd/workflows/workflow-status/paths/gamedev-brownfield.yaml +65 -0
- package/src/modules/bmgd/workflows/workflow-status/paths/gamedev-greenfield.yaml +71 -0
- package/src/modules/bmgd/workflows/workflow-status/paths/quickflow-brownfield.yaml +29 -0
- package/src/modules/bmgd/workflows/workflow-status/paths/quickflow-greenfield.yaml +39 -0
- package/src/modules/bmgd/workflows/workflow-status/project-levels.yaml +63 -0
- package/src/modules/bmgd/workflows/workflow-status/workflow-status-template.yaml +24 -0
- package/src/modules/bmgd/workflows/workflow-status/workflow.yaml +30 -0
- package/tools/cli/commands/install.js +9 -0
- package/tools/cli/installers/lib/core/installer.js +109 -109
- package/tools/cli/installers/lib/core/installer.js.bak +3204 -0
- package/tools/cli/installers/lib/modules/manager.js +16 -4
- package/tools/cli/lib/agent/compiler.js +99 -0
- package/tools/cli/lib/ui.js +78 -27
- package/src/modules/bmgd/workflows/2-design/gdd/instructions-gdd.md +0 -502
- package/src/modules/bmgd/workflows/4-production/code-review/instructions.md +0 -398
- package/src/modules/bmgd/workflows/4-production/create-story/instructions.md +0 -256
- package/src/modules/bmgd/workflows/4-production/dev-story/instructions.md +0 -267
- package/src/modules/bmgd/workflows/4-production/epic-tech-context/checklist.md +0 -17
- package/src/modules/bmgd/workflows/4-production/epic-tech-context/instructions.md +0 -164
- package/src/modules/bmgd/workflows/4-production/epic-tech-context/template.md +0 -76
- package/src/modules/bmgd/workflows/4-production/epic-tech-context/workflow.yaml +0 -58
- package/src/modules/bmgd/workflows/4-production/story-context/checklist.md +0 -16
- package/src/modules/bmgd/workflows/4-production/story-context/context-template.xml +0 -34
- package/src/modules/bmgd/workflows/4-production/story-context/instructions.md +0 -209
- package/src/modules/bmgd/workflows/4-production/story-context/workflow.yaml +0 -63
- package/src/modules/bmgd/workflows/4-production/story-done/instructions.md +0 -111
- package/src/modules/bmgd/workflows/4-production/story-done/workflow.yaml +0 -28
- package/src/modules/bmgd/workflows/4-production/story-ready/instructions.md +0 -117
- package/src/modules/bmgd/workflows/4-production/story-ready/workflow.yaml +0 -25
- /package/src/modules/bmgd/workflows/1-preproduction/game-brief/{template.md → templates/game-brief-template.md} +0 -0
- /package/src/modules/bmgd/workflows/2-design/gdd/{gdd-template.md → templates/gdd-template.md} +0 -0
- /package/src/modules/bmgd/workflows/2-design/narrative/{narrative-template.md → templates/narrative-template.md} +0 -0
- /package/src/modules/bmgd/workflows/3-technical/game-architecture/{architecture-template.md → templates/architecture-template.md} +0 -0
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
<!-- Powered by BMAD-CORE™ -->
|
|
2
|
+
|
|
3
|
+
# Game Test Automation
|
|
4
|
+
|
|
5
|
+
**Workflow ID**: `_bmad/bmgd/gametest/automate`
|
|
6
|
+
**Version**: 1.0 (BMad v6)
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
Generate automated test code for game projects based on test design scenarios or by analyzing existing game code. Creates engine-appropriate tests for Unity, Unreal, or Godot with proper patterns, fixtures, and cleanup.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Preflight Requirements
|
|
17
|
+
|
|
18
|
+
- ✅ Test framework already initialized (run `framework` workflow first)
|
|
19
|
+
- ✅ Test scenarios defined (from `test-design` or ad-hoc)
|
|
20
|
+
- ✅ Game code accessible for analysis
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Step 1: Analyze Codebase
|
|
25
|
+
|
|
26
|
+
### Actions
|
|
27
|
+
|
|
28
|
+
1. **Detect Game Engine**
|
|
29
|
+
- Check for engine-specific project files
|
|
30
|
+
- Load appropriate knowledge fragments
|
|
31
|
+
|
|
32
|
+
2. **Identify Testable Systems**
|
|
33
|
+
- Pure logic classes (calculators, managers)
|
|
34
|
+
- State machines (AI, gameplay)
|
|
35
|
+
- Data structures (inventory, save data)
|
|
36
|
+
|
|
37
|
+
3. **Locate Existing Tests**
|
|
38
|
+
- Find test directory structure
|
|
39
|
+
- Identify test patterns already in use
|
|
40
|
+
- Check for test helpers/fixtures
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Step 2: Generate Unit Tests
|
|
45
|
+
|
|
46
|
+
### Unity (C#)
|
|
47
|
+
|
|
48
|
+
**Knowledge Base Reference**: `knowledge/unity-testing.md`
|
|
49
|
+
|
|
50
|
+
```csharp
|
|
51
|
+
using NUnit.Framework;
|
|
52
|
+
|
|
53
|
+
[TestFixture]
|
|
54
|
+
public class {ClassName}Tests
|
|
55
|
+
{
|
|
56
|
+
private {ClassName} _sut; // System Under Test
|
|
57
|
+
|
|
58
|
+
[SetUp]
|
|
59
|
+
public void Setup()
|
|
60
|
+
{
|
|
61
|
+
_sut = new {ClassName}();
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
[Test]
|
|
65
|
+
public void {MethodName}_When{Condition}_Should{Expectation}()
|
|
66
|
+
{
|
|
67
|
+
// Arrange
|
|
68
|
+
{setup_code}
|
|
69
|
+
|
|
70
|
+
// Act
|
|
71
|
+
var result = _sut.{MethodName}({parameters});
|
|
72
|
+
|
|
73
|
+
// Assert
|
|
74
|
+
Assert.AreEqual({expected}, result);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
[TestCase({input1}, {expected1})]
|
|
78
|
+
[TestCase({input2}, {expected2})]
|
|
79
|
+
public void {MethodName}_Parameterized({inputType} input, {outputType} expected)
|
|
80
|
+
{
|
|
81
|
+
var result = _sut.{MethodName}(input);
|
|
82
|
+
Assert.AreEqual(expected, result);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Unreal (C++)
|
|
88
|
+
|
|
89
|
+
**Knowledge Base Reference**: `knowledge/unreal-testing.md`
|
|
90
|
+
|
|
91
|
+
```cpp
|
|
92
|
+
#include "Misc/AutomationTest.h"
|
|
93
|
+
|
|
94
|
+
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
|
|
95
|
+
F{ClassName}{MethodName}Test,
|
|
96
|
+
"{ProjectName}.{Category}.{TestName}",
|
|
97
|
+
EAutomationTestFlags::ApplicationContextMask |
|
|
98
|
+
EAutomationTestFlags::ProductFilter
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
bool F{ClassName}{MethodName}Test::RunTest(const FString& Parameters)
|
|
102
|
+
{
|
|
103
|
+
// Arrange
|
|
104
|
+
{setup_code}
|
|
105
|
+
|
|
106
|
+
// Act
|
|
107
|
+
auto Result = {ClassName}::{MethodName}({parameters});
|
|
108
|
+
|
|
109
|
+
// Assert
|
|
110
|
+
TestEqual("{assertion_message}", Result, {expected});
|
|
111
|
+
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Godot (GDScript)
|
|
117
|
+
|
|
118
|
+
**Knowledge Base Reference**: `knowledge/godot-testing.md`
|
|
119
|
+
|
|
120
|
+
```gdscript
|
|
121
|
+
extends GutTest
|
|
122
|
+
|
|
123
|
+
var _sut: {ClassName}
|
|
124
|
+
|
|
125
|
+
func before_each():
|
|
126
|
+
_sut = {ClassName}.new()
|
|
127
|
+
|
|
128
|
+
func after_each():
|
|
129
|
+
_sut.free()
|
|
130
|
+
|
|
131
|
+
func test_{method_name}_when_{condition}_should_{expectation}():
|
|
132
|
+
# Arrange
|
|
133
|
+
{setup_code}
|
|
134
|
+
|
|
135
|
+
# Act
|
|
136
|
+
var result = _sut.{method_name}({parameters})
|
|
137
|
+
|
|
138
|
+
# Assert
|
|
139
|
+
assert_eq(result, {expected}, "{assertion_message}")
|
|
140
|
+
|
|
141
|
+
func test_{method_name}_parameterized():
|
|
142
|
+
var test_cases = [
|
|
143
|
+
{{"input": {input1}, "expected": {expected1}}},
|
|
144
|
+
{{"input": {input2}, "expected": {expected2}}}
|
|
145
|
+
]
|
|
146
|
+
|
|
147
|
+
for tc in test_cases:
|
|
148
|
+
var result = _sut.{method_name}(tc.input)
|
|
149
|
+
assert_eq(result, tc.expected)
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Step 3: Generate Integration Tests
|
|
155
|
+
|
|
156
|
+
### Scene/Level Testing
|
|
157
|
+
|
|
158
|
+
**Unity Play Mode**:
|
|
159
|
+
|
|
160
|
+
```csharp
|
|
161
|
+
[UnityTest]
|
|
162
|
+
public IEnumerator {SceneName}_Loads_WithoutErrors()
|
|
163
|
+
{
|
|
164
|
+
SceneManager.LoadScene("{scene_name}");
|
|
165
|
+
yield return new WaitForSeconds(2f);
|
|
166
|
+
|
|
167
|
+
var errors = GameObject.FindObjectsOfType<ErrorHandler>()
|
|
168
|
+
.Where(e => e.HasErrors);
|
|
169
|
+
|
|
170
|
+
Assert.IsEmpty(errors, "Scene should load without errors");
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
**Unreal Functional Test**:
|
|
175
|
+
|
|
176
|
+
```cpp
|
|
177
|
+
void A{TestName}::StartTest()
|
|
178
|
+
{
|
|
179
|
+
Super::StartTest();
|
|
180
|
+
|
|
181
|
+
// Setup test scenario
|
|
182
|
+
{setup}
|
|
183
|
+
|
|
184
|
+
// Verify conditions
|
|
185
|
+
if ({condition})
|
|
186
|
+
{
|
|
187
|
+
FinishTest(EFunctionalTestResult::Succeeded, "{message}");
|
|
188
|
+
}
|
|
189
|
+
else
|
|
190
|
+
{
|
|
191
|
+
FinishTest(EFunctionalTestResult::Failed, "{failure_message}");
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
**Godot Integration**:
|
|
197
|
+
|
|
198
|
+
```gdscript
|
|
199
|
+
func test_{feature}_integration():
|
|
200
|
+
var scene = load("res://scenes/{scene}.tscn").instantiate()
|
|
201
|
+
add_child(scene)
|
|
202
|
+
|
|
203
|
+
# Wait for scene ready
|
|
204
|
+
await get_tree().process_frame
|
|
205
|
+
|
|
206
|
+
# Test interaction
|
|
207
|
+
{test_code}
|
|
208
|
+
|
|
209
|
+
# Cleanup
|
|
210
|
+
scene.queue_free()
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## Step 4: Generate Smoke Tests
|
|
216
|
+
|
|
217
|
+
Create critical path tests that run on every build:
|
|
218
|
+
|
|
219
|
+
```
|
|
220
|
+
Smoke Test Criteria:
|
|
221
|
+
1. Game launches without crash
|
|
222
|
+
2. Main menu is navigable
|
|
223
|
+
3. New game starts successfully
|
|
224
|
+
4. Core gameplay loop executes
|
|
225
|
+
5. Save/load works
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Example Smoke Test
|
|
229
|
+
|
|
230
|
+
```csharp
|
|
231
|
+
// Unity
|
|
232
|
+
[UnityTest, Timeout(60000)]
|
|
233
|
+
public IEnumerator Smoke_NewGame_StartsSuccessfully()
|
|
234
|
+
{
|
|
235
|
+
// Load main menu
|
|
236
|
+
SceneManager.LoadScene("MainMenu");
|
|
237
|
+
yield return new WaitForSeconds(2f);
|
|
238
|
+
|
|
239
|
+
// Start new game
|
|
240
|
+
var newGameButton = GameObject.Find("NewGameButton");
|
|
241
|
+
newGameButton.GetComponent<Button>().onClick.Invoke();
|
|
242
|
+
|
|
243
|
+
yield return new WaitForSeconds(5f);
|
|
244
|
+
|
|
245
|
+
// Verify gameplay loaded
|
|
246
|
+
var player = GameObject.FindWithTag("Player");
|
|
247
|
+
Assert.IsNotNull(player, "Player should exist after new game");
|
|
248
|
+
}
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## Step 5: Generate Test Report
|
|
254
|
+
|
|
255
|
+
After generating tests, create summary:
|
|
256
|
+
|
|
257
|
+
```markdown
|
|
258
|
+
## Automation Summary
|
|
259
|
+
|
|
260
|
+
**Engine**: {Unity | Unreal | Godot}
|
|
261
|
+
**Tests Generated**: {count}
|
|
262
|
+
|
|
263
|
+
### Test Distribution
|
|
264
|
+
|
|
265
|
+
| Type | Count | Coverage |
|
|
266
|
+
| ----------- | ----- | ------------- |
|
|
267
|
+
| Unit Tests | {n} | {systems} |
|
|
268
|
+
| Integration | {n} | {features} |
|
|
269
|
+
| Smoke Tests | {n} | Critical path |
|
|
270
|
+
|
|
271
|
+
### Files Created
|
|
272
|
+
|
|
273
|
+
- `tests/unit/{file1}.{ext}`
|
|
274
|
+
- `tests/unit/{file2}.{ext}`
|
|
275
|
+
- `tests/integration/{file3}.{ext}`
|
|
276
|
+
|
|
277
|
+
### Next Steps
|
|
278
|
+
|
|
279
|
+
1. Review generated tests
|
|
280
|
+
2. Fill in test-specific logic
|
|
281
|
+
3. Run tests to verify
|
|
282
|
+
4. Add to CI pipeline
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## Test Patterns
|
|
288
|
+
|
|
289
|
+
### Common Patterns to Generate
|
|
290
|
+
|
|
291
|
+
1. **Calculator/Logic Tests** - Pure functions
|
|
292
|
+
2. **State Machine Tests** - State transitions
|
|
293
|
+
3. **Event Tests** - Signal/delegate firing
|
|
294
|
+
4. **Resource Tests** - ScriptableObject/Resource validation
|
|
295
|
+
5. **Serialization Tests** - Save/load round-trip
|
|
296
|
+
|
|
297
|
+
### Anti-Patterns to Avoid
|
|
298
|
+
|
|
299
|
+
- Testing engine functionality
|
|
300
|
+
- Hard-coded waits (use signals/events)
|
|
301
|
+
- Tests that depend on execution order
|
|
302
|
+
- Tests without cleanup
|
|
303
|
+
|
|
304
|
+
---
|
|
305
|
+
|
|
306
|
+
## Deliverables
|
|
307
|
+
|
|
308
|
+
1. **Unit Test Files** - Per-class test coverage
|
|
309
|
+
2. **Integration Test Files** - Feature-level tests
|
|
310
|
+
3. **Smoke Test Suite** - Critical path validation
|
|
311
|
+
4. **Automation Summary** - Coverage report
|
|
312
|
+
|
|
313
|
+
---
|
|
314
|
+
|
|
315
|
+
## Validation
|
|
316
|
+
|
|
317
|
+
Refer to `checklist.md` for validation criteria.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Game QA workflow: automate
|
|
2
|
+
name: gametest-automate
|
|
3
|
+
description: "Generate automated game tests for Unity, Unreal, or Godot based on test design scenarios"
|
|
4
|
+
author: "BMad"
|
|
5
|
+
|
|
6
|
+
# Critical variables from config
|
|
7
|
+
config_source: "{project-root}/_bmad/bmgd/config.yaml"
|
|
8
|
+
output_folder: "{config_source}:output_folder"
|
|
9
|
+
user_name: "{config_source}:user_name"
|
|
10
|
+
communication_language: "{config_source}:communication_language"
|
|
11
|
+
document_output_language: "{config_source}:document_output_language"
|
|
12
|
+
date: system-generated
|
|
13
|
+
|
|
14
|
+
# Workflow components
|
|
15
|
+
installed_path: "{project-root}/_bmad/bmgd/workflows/gametest/automate"
|
|
16
|
+
instructions: "{installed_path}/instructions.md"
|
|
17
|
+
validation: "{installed_path}/checklist.md"
|
|
18
|
+
|
|
19
|
+
# Variables and inputs
|
|
20
|
+
variables:
|
|
21
|
+
test_dir: "{project-root}/tests"
|
|
22
|
+
source_dir: "{project-root}/src"
|
|
23
|
+
coverage_target: "critical-paths" # critical-paths, comprehensive, selective
|
|
24
|
+
game_engine: "auto" # auto, unity, unreal, godot
|
|
25
|
+
|
|
26
|
+
# Output configuration
|
|
27
|
+
default_output_file: "{output_folder}/automation-summary.md"
|
|
28
|
+
|
|
29
|
+
# Required tools
|
|
30
|
+
required_tools:
|
|
31
|
+
- read_file
|
|
32
|
+
- write_file
|
|
33
|
+
- create_directory
|
|
34
|
+
- list_files
|
|
35
|
+
- search_repo
|
|
36
|
+
- glob
|
|
37
|
+
|
|
38
|
+
tags:
|
|
39
|
+
- qa
|
|
40
|
+
- automation
|
|
41
|
+
- game-testing
|
|
42
|
+
- regression
|
|
43
|
+
- coverage
|
|
44
|
+
|
|
45
|
+
execution_hints:
|
|
46
|
+
interactive: false
|
|
47
|
+
autonomous: true
|
|
48
|
+
iterative: true
|
|
49
|
+
|
|
50
|
+
web_bundle: false
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Performance Testing - Validation Checklist
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
- [ ] Target platforms identified
|
|
8
|
+
- [ ] Hardware specs defined (min/recommended)
|
|
9
|
+
- [ ] Performance targets established
|
|
10
|
+
- [ ] Profiling tools available
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Target Definition
|
|
15
|
+
|
|
16
|
+
- [ ] Frame rate targets per platform
|
|
17
|
+
- [ ] Memory budgets per platform
|
|
18
|
+
- [ ] Loading time targets defined
|
|
19
|
+
- [ ] Regression thresholds set
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Test Scenarios
|
|
24
|
+
|
|
25
|
+
### Frame Rate Tests
|
|
26
|
+
|
|
27
|
+
- [ ] Stress test scenarios created
|
|
28
|
+
- [ ] Worst-case scenarios identified
|
|
29
|
+
- [ ] Benchmark levels available
|
|
30
|
+
- [ ] Automated tests possible
|
|
31
|
+
|
|
32
|
+
### Memory Tests
|
|
33
|
+
|
|
34
|
+
- [ ] Leak detection scenarios
|
|
35
|
+
- [ ] Extended play scenarios
|
|
36
|
+
- [ ] Level transition tests
|
|
37
|
+
- [ ] Maximum content scenarios
|
|
38
|
+
|
|
39
|
+
### Loading Tests
|
|
40
|
+
|
|
41
|
+
- [ ] Cold boot test defined
|
|
42
|
+
- [ ] Level load tests defined
|
|
43
|
+
- [ ] Save/load tests defined
|
|
44
|
+
- [ ] Fast travel tests (if applicable)
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Methodology
|
|
49
|
+
|
|
50
|
+
- [ ] Automated test framework identified
|
|
51
|
+
- [ ] Manual profiling checklist created
|
|
52
|
+
- [ ] Measurement tools specified
|
|
53
|
+
- [ ] Data collection process defined
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Benchmarks
|
|
58
|
+
|
|
59
|
+
- [ ] Benchmark scenarios defined
|
|
60
|
+
- [ ] Baseline metrics captured
|
|
61
|
+
- [ ] Regression criteria established
|
|
62
|
+
- [ ] CI integration planned
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Platform Coverage
|
|
67
|
+
|
|
68
|
+
- [ ] PC specs covered (min/recommended)
|
|
69
|
+
- [ ] Console modes tested (performance/quality)
|
|
70
|
+
- [ ] Mobile tiers addressed
|
|
71
|
+
- [ ] Platform-specific issues documented
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Documentation
|
|
76
|
+
|
|
77
|
+
- [ ] Performance test plan complete
|
|
78
|
+
- [ ] Targets documented
|
|
79
|
+
- [ ] Scenarios detailed
|
|
80
|
+
- [ ] Methodology explained
|
|
81
|
+
- [ ] Schedule defined
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Completion Criteria
|
|
86
|
+
|
|
87
|
+
- [ ] All platforms have performance targets
|
|
88
|
+
- [ ] Test scenarios cover critical areas
|
|
89
|
+
- [ ] Baseline metrics captured
|
|
90
|
+
- [ ] Automated tests in CI
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
**Completed by:** {name}
|
|
95
|
+
**Date:** {date}
|
|
96
|
+
**Platforms:** {list}
|