PetAI WBS 6.0 QA·CI/CD·릴리즈

목표: 구현 완료 선언을 자동 테스트, 실제 Player 입력, 데이터 복구, 한국어와 배포 재현성으로 증명한다.
주 책임: QA/DevOps
협업: 모든 담당
핵심 원칙: 과거 로그 재사용 금지, 실제 build와 evidence lineage 유지

1. 테스트 층

층 검증 대상 대표 증거
Domain unit 관계·claim·날짜·merge 규칙 test report
Application integration result/action/event transaction fixture result
Persistence tmp·backup·corruption·migration file hash·test
Content validation schema·reference·condition validator output
EditMode Unity 독립 로직 최신 XML
PlayMode scene·UI·resource 흐름 최신 XML
Player manual 물리 입력·레이아웃·재실행 영상·캡처·state diff
Device/performance frame·memory·thermal·AI latency profiler·기기표
Language/accessibility 한국어·잘림·색·무음 review sheet
CI/CD clean checkout→artifact workflow run·hash

2. 작업분해구조

WBS 작업 우선 선행 산출물 수용 기준
6.1.1 Test plan·traceability P0 기능 범위 requirement→case map IN 기능 누락 0
6.1.2 EditMode suite P0 domain XML·failure logs latest 100% pass
6.1.3 PlayMode suite P0 scene builder XML·capture latest 100% pass
6.1.4 Player smoke P0 fresh build launch/home/result crash 0
6.2.1 Success manual P0 playable build uninterrupted video state expected
6.2.2 Failure manual P0 playable build uninterrupted video no relationship loss
6.2.3 Restart persistence P0 result save before/after diff duplicate reward 0
6.2.4 Recovery manual P0 corrupt fixtures restore/export/fresh source preserved
6.3.1 Responsive layout P0/P1 screens 360×780,390×844,430×932 overlap 0
6.3.2 Offline matrix P0/P1 adapters AI/backend/weather off core loop complete
6.3.3 Language QA P0/P1 content build screenshot+review P0/P1 Korean issue 0
6.4.1 Repository policy P2 canonical root ignore/LFS/attributes generated files excluded
6.4.2 GitHub Actions P2 CLI tests/build PR workflow clean runner pass
6.4.3 Build artifact P2 signing policy app/archive+hash source commit trace
6.4.4 Fastlane CONDITIONAL manual iOS archive lanes·match policy TestFlight upload rehearsal
6.5.1 Release report P2 all evidence versioned report blocker truth 유지

3. P0 수동 시나리오

QA-P0-A 신규 설치

  1. 기존 save가 없는 상태에서 실행한다.
  2. 권한 팝업 없이 첫 캐릭터 장면이 3초 내 나타난다.
  3. 첫인상 선택과 이름 생략을 수행한다.
  4. 홈에서 캐릭터와 가구를 실제 입력으로 구분한다.
  5. 첫 공동 놀이를 완료하고 결과·홈 변화·추억을 확인한다.

QA-P0-B 실패와 재도전

  1. 공동 놀이에서 장르 adapter의 실패 결과를 만든다.
  2. 친밀도 감소가 없고 실패를 숨기지 않는 문장을 확인한다.
  3. 홈 또는 재도전을 선택한다.
  4. 이전 결과가 손상되지 않고 claim이 중복되지 않는지 확인한다.

QA-P0-C 프로세스 재실행

  1. 결과 저장 직후 앱을 정상 종료한다.
  2. 프로세스 종료를 확인하고 다시 실행한다.
  3. 관계, 진행, keepsake, 대표 추억을 이전 캡처와 비교한다.
  4. 재실행만으로 보상이 다시 지급되지 않는지 확인한다.

QA-P0-D 양쪽 저장 손상

  1. primary와 backup을 각기 파싱 불가능 fixture로 교체한다.
  2. 앱이 Recovery로 진입하고 gameplay autosave가 멈추는지 확인한다.
  3. export가 원본을 바꾸지 않는지 hash로 확인한다.
  4. fresh start 첫 클릭은 경고만, 두 번째 확인만 새 active save를 만드는지 확인한다.
  5. 손상 원본이 .corrupt-* 형태로 남는지 확인한다.

4. 버그 심각도

등급 기준 예
P0 데이터 손실·진행 불가·개인정보 유출 corrupt save 덮어쓰기, 원문 전송
P1 핵심 가설 검증 불가 홈 입력 불가, 결과 중복, 사건 재개 실패
P2 기능은 되지만 오해·불편 큼 거절이 관계 손실처럼 보임, UI 겹침
P3 polish 경미한 간격, 드문 표현 반복

P0는 릴리즈 즉시 중단, P1은 해당 Gate 통과 금지다. P2를 알려진 문제로 허용하려면 사용자 영향과 임시 대응을 릴리즈 문서에 적는다.

5. GitHub Actions 파이프라인

pull_request
  → secret/absolute-path scan
  → content/contract validation
  → C# formatting/static checks
  → EditMode tests
  → PlayMode tests
  → build dry run or licensed runner build
  → artifact manifest + hashes
  • Unity licensing 실패와 test 실패를 같은 상태로 합치지 않는다.
  • XML이 생성되지 않은 run은 PASS로 재해석하지 않는다.
  • 과거 날짜 XML·build log를 최신 변경 증거로 재사용하지 않는다.
  • runner와 local Unity patch version을 일치시킨다.
  • source asset과 build artifact를 분리 보존한다.

6. Fastlane·배포

단계 선행 산출물 중단 조건
manual archive iOS settings·signing 검증된 .ipa/.xcarchive 로컬 archive 실패
lane init archive 재현 Fastfile/Appfile secret hardcode
signing team policy match/manual ADR 권한 불명
TestFlight upload release candidate build number·upload log QA blocker
staged test tester group feedback·crash P0/P1 발견

Fastlane은 수동 build 문제를 해결하는 도구가 아니다. 동일 source로 수동 archive가 성공한 뒤 자동화한다.

7. 릴리즈 증거 패키지

  • commit SHA 또는 source snapshot hash
  • Unity version과 package lock
  • fresh EditMode·PlayMode XML
  • fresh build log와 artifact hash
  • success·failure·restart·recovery 수동 영상
  • 기기·OS·화면 크기·입력 장치
  • content bundle version/hash
  • schema version과 migration matrix
  • known issue와 severity
  • privacy/network capture
  • 승인자와 시간

8. 릴리즈 체크리스트

기능

  • 기능 범위 IN 항목 전부 trace됨
  • OUT 기능이 UI·데이터·API에 숨어 있지 않음
  • 리듬게임 미정 수치가 제품 승인값으로 표시되지 않음

데이터

  • 정상·손상·future schema·양쪽 손상 검증
  • delete/export/restore가 원본과 정책 일치
  • AI·backend가 local authority를 덮지 않음

경험

  • 실패·거절·부재 관계 압박 없음
  • 한국어 P0/P1 문제 없음
  • 390×844와 인접 두 화면에서 겹침 없음

운영

  • 새 build와 새 test evidence
  • secret scan 0건
  • rollback 경로와 담당자
  • team handoff가 canonical root만 참조

9. 연결 문서


11. 2026-07-23 기능 범위 QA 보완

WBS 검증 여정 합격 기준
6.6.1 튜토리얼 중단·재개·계정 연결 중복 지급 없이 마지막 완료 단계 다음부터 재개
6.6.2 권한 거절/철회 알림·위치·건강 권한 off에서도 핵심 게임 완주
6.6.3 스트레스·회복 원시 값/음수/최대치에서도 보상 하한과 회복 카피가 일관
6.6.4 도감·한정·히든 소유/미소유 filter, 종료 정책, 공정한 힌트, 기능 아이템 표시
6.6.5 구매·복원·환불 중복 entitlement 0건, 방/복장 반영과 복원 상태 일치
6.6.6 위젯·푸시 category off, quiet hours, stale snapshot, invalid deep link, offline fallback
6.6.7 친구 안전 수락 전 접근 차단, 차단/삭제 후 모든 entry point 차단, 신고 기록
6.6.8 데이터 경계 network/log/widget/backup에 memory body·health raw·exact location 0건

11.1 릴리즈 차단 조건

  • 권한 off가 핵심 게임 진행을 막음
  • 푸시 opt-out·조용한 시간 위반
  • 한정 상품의 종료/재등장 정책 누락
  • 구매 복원·환불 뒤 entitlement/방 상태 불일치
  • 친구 차단 뒤 snapshot·푸시·딥링크 중 하나라도 접근 가능
  • 대화 원문, 건강 원본, 정확 위치가 서버·로그·위젯·백업으로 유출

상세 기준은 최종 기능 정의서를 따른다.