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

9.7 KiB

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

// 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;
}
// 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);
}
# 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