BMAD-METHOD/src/modules/bmgd/gametest/knowledge/certification-testing.md

320 lines
9.7 KiB
Markdown

# Platform Certification Testing Guide
## Overview
Certification testing ensures games meet platform holder requirements (Sony TRC, Microsoft XR, Nintendo Guidelines). Failing certification delays launch and costs money—test thoroughly before submission.
## Platform Requirements Overview
### Major Platforms
| Platform | Requirements Doc | Submission Portal |
| --------------- | -------------------------------------- | ------------------------- |
| PlayStation | TRC (Technical Requirements Checklist) | PlayStation Partners |
| Xbox | XR (Xbox Requirements) | Xbox Partner Center |
| Nintendo Switch | Guidelines | Nintendo Developer Portal |
| Steam | Guidelines (less strict) | Steamworks |
| iOS | App Store Guidelines | App Store Connect |
| Android | Play Store Policies | Google Play Console |
## Common Certification Categories
### Account and User Management
```
REQUIREMENT: User Switching
GIVEN user is playing game
WHEN system-level user switch occurs
THEN game handles transition gracefully
AND no data corruption
AND correct user data loads
REQUIREMENT: Guest Accounts
GIVEN guest user plays game
WHEN guest makes progress
THEN progress is not saved to other accounts
AND appropriate warnings displayed
REQUIREMENT: Parental Controls
GIVEN parental controls restrict content
WHEN restricted content is accessed
THEN content is blocked or modified
AND appropriate messaging shown
```
### System Events
```
REQUIREMENT: Suspend/Resume (PS4/PS5)
GIVEN game is running
WHEN console enters rest mode
AND console wakes from rest mode
THEN game resumes correctly
AND network reconnects if needed
AND no audio/visual glitches
REQUIREMENT: Controller Disconnect
GIVEN player is in gameplay
WHEN controller battery dies
THEN game pauses immediately
AND reconnect prompt appears
AND gameplay resumes when connected
REQUIREMENT: Storage Full
GIVEN storage is nearly full
WHEN game attempts save
THEN graceful error handling
AND user informed of issue
AND no data corruption
```
### Network Requirements
```
REQUIREMENT: PSN/Xbox Live Unavailable
GIVEN online features
WHEN platform network is unavailable
THEN offline features still work
AND appropriate error messages
AND no crashes
REQUIREMENT: Network Transition
GIVEN active online session
WHEN network connection lost
THEN graceful handling
AND reconnection attempted
AND user informed of status
REQUIREMENT: NAT Type Handling
GIVEN various NAT configurations
WHEN multiplayer is attempted
THEN appropriate feedback on connectivity
AND fallback options offered
```
### Save Data
```
REQUIREMENT: Save Data Integrity
GIVEN save data exists
WHEN save is loaded
THEN data is validated
AND corrupted data handled gracefully
AND no crashes on invalid data
REQUIREMENT: Cloud Save Sync
GIVEN cloud saves enabled
WHEN save conflict occurs
THEN user chooses which to keep
AND no silent data loss
REQUIREMENT: Save Data Portability (PS4→PS5)
GIVEN save from previous generation
WHEN loaded on current generation
THEN data migrates correctly
AND no features lost
```
## Platform-Specific Requirements
### PlayStation (TRC)
| Requirement | Description | Priority |
| ----------- | --------------------------- | -------- |
| TRC R4010 | Suspend/resume handling | Critical |
| TRC R4037 | User switching | Critical |
| TRC R4062 | Parental controls | Critical |
| TRC R4103 | PS VR comfort ratings | VR only |
| TRC R4120 | DualSense haptics standards | PS5 |
| TRC R5102 | PSN sign-in requirements | Online |
### Xbox (XR)
| Requirement | Description | Priority |
| ----------- | ----------------------------- | ----------- |
| XR-015 | Title timeout handling | Critical |
| XR-045 | User sign-out handling | Critical |
| XR-067 | Active user requirement | Critical |
| XR-074 | Quick Resume support | Series X/S |
| XR-115 | Xbox Accessibility Guidelines | Recommended |
### Nintendo Switch
| Requirement | Description | Priority |
| ------------------ | ------------------- | -------- |
| Docked/Handheld | Seamless transition | Critical |
| Joy-Con detachment | Controller handling | Critical |
| Home button | Immediate response | Critical |
| Screenshots/Video | Proper support | Required |
| Sleep mode | Resume correctly | Critical |
## Automated Test Examples
### System Event Testing
```cpp
// Unreal - Suspend/Resume Test
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FSuspendResumeTest,
"Certification.System.SuspendResume",
EAutomationTestFlags::ApplicationContextMask | EAutomationTestFlags::ProductFilter
)
bool FSuspendResumeTest::RunTest(const FString& Parameters)
{
// Get game state before suspend
FGameState StateBefore = GetCurrentGameState();
// Simulate suspend
FCoreDelegates::ApplicationWillEnterBackgroundDelegate.Broadcast();
// Simulate resume
FCoreDelegates::ApplicationHasEnteredForegroundDelegate.Broadcast();
// Verify state matches
FGameState StateAfter = GetCurrentGameState();
TestEqual("Player position preserved",
StateAfter.PlayerPosition, StateBefore.PlayerPosition);
TestEqual("Game progress preserved",
StateAfter.Progress, StateBefore.Progress);
return true;
}
```
```csharp
// Unity - Controller Disconnect Test
[UnityTest]
public IEnumerator ControllerDisconnect_ShowsPauseMenu()
{
// Simulate gameplay
GameManager.Instance.StartGame();
yield return new WaitForSeconds(1f);
// Simulate controller disconnect
InputSystem.DisconnectDevice(Gamepad.current);
yield return null;
// Verify pause menu shown
Assert.IsTrue(PauseMenu.IsVisible, "Pause menu should appear");
Assert.IsTrue(Time.timeScale == 0, "Game should be paused");
// Simulate reconnect
InputSystem.ReconnectDevice(Gamepad.current);
yield return null;
// Verify prompt appears
Assert.IsTrue(ReconnectPrompt.IsVisible);
}
```
```gdscript
# Godot - Save Corruption Test
func test_corrupted_save_handling():
# Create corrupted save file
var file = FileAccess.open("user://save_corrupt.dat", FileAccess.WRITE)
file.store_string("CORRUPTED_GARBAGE_DATA")
file.close()
# Attempt to load
var result = SaveManager.load("save_corrupt")
# Should handle gracefully
assert_null(result, "Should return null for corrupted save")
assert_false(OS.has_feature("crashed"), "Should not crash")
# Should show user message
var message_shown = ErrorDisplay.current_message != ""
assert_true(message_shown, "Should inform user of corruption")
```
## Pre-Submission Checklist
### General Requirements
- [ ] Game boots to interactive state within platform time limit
- [ ] Controller disconnect pauses game
- [ ] User sign-out handled correctly
- [ ] Save data validates on load
- [ ] No crashes in 8+ hours of automated testing
- [ ] Memory usage within platform limits
- [ ] Load times meet requirements
### Platform Services
- [ ] Achievements/Trophies work correctly
- [ ] Friends list integration works
- [ ] Invite system functions
- [ ] Store/DLC integration validated
- [ ] Cloud saves sync properly
### Accessibility (Increasingly Required)
- [ ] Text size options
- [ ] Colorblind modes
- [ ] Subtitle options
- [ ] Controller remapping
- [ ] Screen reader support (where applicable)
### Content Compliance
- [ ] Age rating displayed correctly
- [ ] Parental controls respected
- [ ] No prohibited content
- [ ] Required legal text present
## Common Certification Failures
| Issue | Platform | Fix |
| --------------------- | ------------ | ----------------------------------- |
| Home button delay | All consoles | Respond within required time |
| Controller timeout | PlayStation | Handle reactivation properly |
| Save on suspend | PlayStation | Don't save during suspend |
| User context loss | Xbox | Track active user correctly |
| Joy-Con drift | Switch | Proper deadzone handling |
| Background memory | Mobile | Release resources when backgrounded |
| Crash on corrupt data | All | Validate all loaded data |
## Testing Matrix
### Build Configurations to Test
| Configuration | Scenarios |
| --------------- | ----------------------- |
| First boot | No save data exists |
| Return user | Save data present |
| Upgrade path | Previous version save |
| Fresh install | After uninstall |
| Low storage | Minimum space available |
| Network offline | No connectivity |
### Hardware Variants
| Platform | Variants to Test |
| ----------- | ------------------------------- |
| PlayStation | PS4, PS4 Pro, PS5 |
| Xbox | One, One X, Series S, Series X |
| Switch | Docked, Handheld, Lite |
| PC | Min spec, recommended, high-end |
## Best Practices
### DO
- Read platform requirements document thoroughly
- Test on actual hardware, not just dev kits
- Automate certification test scenarios
- Submit with extra time for re-submission
- Document all edge case handling
- Test with real user accounts
### DON'T
- Assume debug builds behave like retail
- Skip testing on oldest supported hardware
- Ignore platform-specific features
- Wait until last minute to test certification items
- Use placeholder content in submission build
- Skip testing with real platform services