BurningTimesAi/프로젝트/_템플릿/개발/06_QA_테스트_전략.md

6.6 KiB

{프로젝트명} — QA 테스트 전략

버전: v1 작성일: {날짜} 담당: 개발팀장 적용 범위: {프로젝트명} 전 테스트 계층


1. 테스트 레이어

1.1 Unit Test — EditMode

NerdNavis.Framework 자체 테스트와 동일 패턴 적용.

대상 예시 실행 모드
ServiceLocator Register/Resolve/Clear 동작 EditMode
Log 카테고리 필터링, 로그 레벨 분기 EditMode
DataTable 파싱 JSON 역직렬화, null/범위 검증 EditMode
순수 C# 비즈니스 로직 대미지 계산 공식, 확률 계산 EditMode
// EditMode 테스트 예시
[TestFixture]
public class ServiceLocatorTests
{
    [SetUp]
    public void SetUp() => ServiceLocator.Clear();

    [Test]
    public void Register_And_Resolve_ReturnsCorrectService()
    {
        var mock = new MockSaveProvider();
        ServiceLocator.Register<ISaveProvider>(mock);

        var resolved = ServiceLocator.Resolve<ISaveProvider>();

        Assert.AreEqual(mock, resolved);
    }
}

1.2 Unit Test — PlayMode

대상 예시 실행 모드
MonoSingleton<T> Instance 생성, Persistent 동작 PlayMode
CoroutineRunner Start/Stop, 키 중복 방지 PlayMode
UI View 전환 UIManager Push/Pop 동작 PlayMode
씬 로딩 Bootstrap → Title 씬 전환 PlayMode

1.3 Integration Test

대상 내용
DataTable 전체 로딩 Bootstrap 씬 진입 → TableChecker.AllLoaded 확인
서버 연동 E2E 로그인 → 데이터 로딩 → 저장 → 재로그인 후 복원
핵심 게임 루프 {장르} 핵심 액션 1회 플레이 성공 (크래시·콘솔 에러 없음)

1.4 Data Validation

DataTable의 무결성을 Export 시 + 런타임(개발 빌드) 에서 이중 검증한다.

// 04_데이터_파이프라인 섹션 5 참조
#if DEVELOPMENT_BUILD || UNITY_EDITOR
DataValidator.ValidateAll(); // FK 정합성, null, 범위
#endif

1.5 Manual QA

수동 QA는 5축 체크리스트(섹션 3)에 따라 수행한다. 자동화 범위를 초과하는 UX 검증·디바이스 다양성·성능 체감은 수동 QA 영역이다.


2. 테스트 네이밍

NerdNavis.Framework 테스트와 동일한 패턴 적용.

{Method}_{Condition}_{Expected}
구성 설명 예시
{Method} 테스트 대상 메서드/동작 TakeDamage
{Condition} 입력 조건 WithMaxShield
{Expected} 기대 결과 ReducesShieldFirst

전체 예시:

[Test] public void TakeDamage_WithMaxShield_ReducesShieldFirst() { }
[Test] public void TakeDamage_WhenHpIsZero_TriggersDeathEvent() { }
[Test] public void GetOrNull_WithUnknownId_ReturnsNull() { }
[Test] public void ServiceLocator_Resolve_WhenNotRegistered_ThrowsException() { }

3. QA 체크리스트 프레임 (5축)

각 기능 머지 전 해당 5축 중 적용 항목을 확인한다 (P14 QA 게이트).

3.1 기능(Functional)

  • 핵심 게임 루프 정상 동작 ({장르} 핵심 액션)
  • DataTable 로딩 완료 후 진행 (TableChecker.AllLoaded)
  • UI 전환 정상 동작 (화면맵 경로별)
  • 저장/로드 복원 일치
  • 서버 인증 정상 처리
  • 엣지 케이스: 재화 0, 최대치, 연속 탭 등

3.2 성능(Performance)

  • 초기 로딩 체감 (Bootstrap → 첫 플레이 가능 시점)
  • 인게임 FPS 안정성 (목표 프레임 유지)
  • 메모리 증가 없음 (Profiler 확인)
  • GC Alloc 핫패스 없음 (Profiler Deep Profile)

3.3 메모리(Memory)

  • 씬 전환 시 메모리 해제 확인 (Addressables Release)
  • 장시간 플레이 메모리 누수 없음
  • TextAsset 언로드 확인 (DataTable Awake 패턴)

3.4 네트워크(Network)

  • 오프라인 상태 진입 처리 (에러 메시지 + 복구 흐름)
  • 느린 네트워크(3G 상당) 타임아웃 처리
  • 재연결 후 상태 복원
  • IAP 영수증 서버 검증 정상 처리 (해당 프로젝트)

3.5 보안(Security)

  • 빌드에 하드코딩 키 없음 (02_기술스택_결정 섹션 3.2)
  • IAP 클라이언트 단독 결제 처리 경로 없음
  • SpeedHack/TimeCheck Detector 동작 확인 (해당 프로젝트)
  • 개발용 씬/치트 코드 릴리스 빌드에서 제거 확인

4. 자동화 범위

4.1 Framework 테스트 (기구현)

NerdNavis.Framework 패키지에 포함된 테스트. 프로젝트 도입 시 자동으로 사용 가능.

영역 테스트 유형 위치
MonoSingleton<T> PlayMode NerdNavis.Framework.Tests
ServiceLocator EditMode NerdNavis.Framework.Tests
CoroutineRunner PlayMode NerdNavis.Framework.Tests
EventBus EditMode NerdNavis.Framework.Tests
Log EditMode NerdNavis.Framework.Tests
DataTable 파싱 EditMode NerdNavis.Framework.Tests

4.2 프로젝트 테스트 (프로젝트에서 추가)

asmdef 위치 내용
{ProjectNamespace}.Tests Assets/Tests/Runtime/ PlayMode 통합 테스트
{ProjectNamespace}.EditorTests Assets/Tests/Editor/ EditMode 단위 테스트

asmdef 설정 예시:

// {ProjectNamespace}.Tests.asmdef
{
    "name": "{ProjectNamespace}.Tests",
    "references": [
        "NerdNavis.Framework.Tests",
        "{ProjectNamespace}.Core",
        "UnityEngine.TestRunner",
        "UnityEditor.TestRunner"
    ],
    "includePlatforms": [],
    "excludePlatforms": [],
    "allowUnsafeCode": false,
    "testPlatforms": ["PlayMode"]
}

4.3 CI 자동화 실행 (해당 시)

Git push → CI 트리거
    └── Unity Test Runner (EditMode + PlayMode)
    └── 결과 리포트 → 실패 시 머지 차단

5. 버그 관리

심각도 기준 처리
P0 Critical 크래시, 결제 실패, 데이터 손실 즉시 수정 (C2 근원 해결)
P1 High 핵심 기능 불가, 보안 이슈 현 개발 단계 완료 전 수정
P2 Medium 기능 이상, 표시 오류 다음 개발 단계 전 수정
P3 Low 미관, 텍스트 오탈자 여유 시 수정

규칙: P14에 따라 Unity 빌드 에러·콘솔 에러 잔존 상태로 작업 종료 금지. 버그 수정 시 동일 경로의 회귀 검증 포함.


변경 이력

버전 일자 작성자 내용
v1 {날짜} 개발팀장 템플릿 초안. Framework 테스트 패턴 + 5축 QA 체크리스트 정립