# {프로젝트명} — QA 테스트 전략 > **버전**: v1 > **작성일**: {날짜} > **담당**: 개발팀장 > **적용 범위**: {프로젝트명} 전 테스트 계층 --- ## 1. 테스트 레이어 ### 1.1 Unit Test — EditMode > NerdNavis.Framework 자체 테스트와 동일 패턴 적용. | 대상 | 예시 | 실행 모드 | |------|------|----------| | `ServiceLocator` | Register/Resolve/Clear 동작 | EditMode | | `Log` | 카테고리 필터링, 로그 레벨 분기 | EditMode | | DataTable 파싱 | JSON 역직렬화, null/범위 검증 | EditMode | | 순수 C# 비즈니스 로직 | 대미지 계산 공식, 확률 계산 | EditMode | ```csharp // EditMode 테스트 예시 [TestFixture] public class ServiceLocatorTests { [SetUp] public void SetUp() => ServiceLocator.Clear(); [Test] public void Register_And_Resolve_ReturnsCorrectService() { var mock = new MockSaveProvider(); ServiceLocator.Register(mock); var resolved = ServiceLocator.Resolve(); Assert.AreEqual(mock, resolved); } } ``` ### 1.2 Unit Test — PlayMode | 대상 | 예시 | 실행 모드 | |------|------|----------| | `MonoSingleton` | 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 시 + 런타임(개발 빌드) 에서 이중 검증한다. ```csharp // 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` | **전체 예시**: ```csharp [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` | 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 설정 예시**: ```json // {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 체크리스트 정립 |