# tdc114plus 테스트 단계별 전략 (참고용 초안)

* **문서 유형:** 테스트 전략 초안 (참고용)
* **저장 경로:** `docs/references/ai-testing/tdc114plus_test_strategy.md`
* **상태:** 참조 폴더 내 초안 — 사용 전 검토/승인 필요
* **작성일:** 2026-07-02

---

## 목적

`tdc114plus` 개발 중에 적용할 테스트 단계, 진입/종료 조건, 실행 방법, 검증 포인트를 정의한다. 이 문서는 참조용 초안이며, 최종 확정 시 사용자 승인을 받아 참조 폴더 밖(프로덕션 정책 위치)으로 이동한다.

## 범위

- Flutter 앱 클라이언트: UI, 화면 흐름, 비즈니스 로직
- AI/ML 관련 컴포넌트: 추론 함수, 프롬프트 템플릿, 결과 검증 루틴
- 백엔드 연동: Baron SSO 로그인, orgFront 직원/조직 데이터 조회

---

## 개발 단계별 테스트 전략

`tdc114plus` 개발 진행은 다음 세 시기로 구분한다.

1. 초반(Initial phase)
2. 중반(Mid phase)
3. 후반(Late phase)

각 시기에 따라 테스트 우선순위와 적용 대상이 달라진다.

### 초반(Initial phase)

- 목표: 화면 흐름, 기본 기능, 코드 품질을 빠르게 검증하여 개발 기반을 마련한다.
- 주요 활동:
  - Flutter 프로젝트 골격 확립
  - 로그인/직원검색/조직도 기본 화면 구성
  - Mock 데이터 기반 화면 흐름 검증
- 적용 테스트:
  1. Static & CI Gate
     - `flutter analyze`, `dart format`, `flutter test --coverage`
     - 코드 스타일, 정적 분석, 기본 단위 테스트
  2. Unit & Component Tests
     - 화면 라우팅, 상태 전이, 데이터 변환
     - Mock 기반 ViewModel/Controller 동작 검증
  3. Mock-driven UI E2E
     - Mock API로 로그인→검색→조직도 시나리오 검증
     - 스냅샷 저장 및 회귀 검증
- 개선 포인트:
  - 코드 품질 이슈 조기 발견
  - 초기 화면 플로우의 불일치 축소
  - Mock 데이터와 실제 API 계약 간 차이를 명확히 정의
- 예시 명령:

```bash
./scripts/flutter-docker.sh analyze
flutter test --coverage
genhtml coverage/lcov.info -o coverage/html
```

### 중반(Mid phase)

- 목표: 외부 API 연동을 통합하고, 인증/권한/데이터 일관성 등을 검증한다.
- 주요 활동:
  - Baron SSO 로그인 연동
  - orgFront 직원/조직 조회 로직 구현
  - 권한/마스킹/가족사 필터 검증
- 적용 테스트:
  1. Integration Tests
     - Staging 또는 계약된 환경에서 API 연동
     - 로그인 세션, 직원 목록, 조직도 탐색 검증
  2. Unit & Component Tests
     - API 파싱, 재시도, 오류 처리, 보안 예외 로직
  3. Snapshot Loop 유지
     - Mock 데이터를 실 연동 API 형태로 업데이트
     - UI 회귀 스냅샷 재검증
- 개선 포인트:
  - API 변경 영향 조기 검증
  - 인증/권한 경계 문제 발견
  - 데이터 포맷 불일치 최소화
- 예시 명령:

```bash
export TDC114_API_BASE=https://staging-api.example.com
export TDC114_API_KEY=staging-key
./scripts/integration_tests.sh
```

### 후반(Late phase)

- 목표: 릴리스 준비 상태에서 성능, 보안, 적대적 대응, 회귀 검증을 완료한다.
- 주요 활동:
  - 릴리스 후보 빌드
  - 레드팀/적대적 테스트
  - 성능 및 데이터 드리프트 점검
- 적용 테스트:
  1. Adversarial / Red-team Automated Runs
     - Jailbreaker, Social Engineer, Poisoner 시나리오
     - 시스템 역할, 의미론적 필터, 차단/대체 동작 검증
  2. Release Gate & Performance Checks
     - APK 빌드, 메모리/CPU 스모크, 보안 스캔
     - PSI 기반 데이터 드리프트 감지
  3. Regression Snapshot Validation
     - 주요 화면 및 시나리오에 대한 스냅샷 재검증
- 개선 포인트:
  - 릴리스 이전 회귀 위험 제거
  - 보안/안정성 취약점 보강
  - 실제 운영 수준 성능 파악
- 예시 명령:

```bash
flutter build apk --debug
./scripts/perf_smoke.sh
./scripts/redteam/run_all.sh --profile=jailbreaker
```

---

## 각 단계별 테스트 분류

| 테스트 유형 | 초반 | 중반 | 후반 |
| --- | --- | --- | --- |
| Static & CI Gate | 필수 | 필수 | 필수 |
| Unit & Component Tests | 주력 | 유지 | 유지 |
| Mock-driven UI E2E | 핵심 | 일부 유지 | 회귀 검증 |
| Integration Tests | 준비 | 주력 | 유지/확장 |
| Adversarial / Red-team Runs | 준비 | 준비 | 핵심 |
| Release/Performance Checks | 없음 | 예비 | 주력 |

### 단계별 핵심 검증 포인트

- 초반: 화면 흐름, Mock 데이터 기반 상태 전환, 초기 코드 품질
- 중반: 실제 API 연동, 인증 및 권한, 외부 오류 처리
- 후반: 보안/레드팀 검증, 성능 안정성, 릴리스 체크리스트

### 초반 단계 상세 시나리오

- 로그인 화면 진입 및 입력 필드 유효성 검증
- 입력된 전화번호가 형식에 맞지 않을 때 경고 메시지 표시
- Mock 사용자 존재/미존재에 따른 로그인 성공/실패 플로우
- 직원 검색 화면 진입 후 단어 검색, 결과 없음/결과 있음 케이스
- 조직도 화면에서 노드 확장·축소, 팝업/상세 정보 표시
- 즐겨찾기 토글 및 로컬 상태 저장 확인

### 중반 단계 상세 시나리오

- 실제 SSO 인증 실패 시 재시도 및 오류 메시지 표시
- orgFront 직원 목록 중 특정 가족사 검색 시 필터 동작 확인
- 조직도 건너뛰기 및 자회사/모회사 표시 일관성 검증
- API 응답 구조 변경에 대한 파싱 예외 처리 확인
- 네트워크 타임아웃/401/500 등 실패 케이스 대응 검증

### 후반 단계 상세 시나리오

- 릴리스 후보 APK 설치 후 주요 화면 진입 안정성 검증
- Auth 세션 만료 후 재로그인 흐름 확인
- 레드팀 공격 시나리오로 프롬프트 우회/입력 조작 시 방어 검증
- 성능 기준에서 검색 응답 시간 및 UI 스크롤 부하 확인
- 데이터 드리프트 지표(PSI) 계산에 필요한 로그 수집 경로 확인

### 자동화 스크립트 템플릿

아래 예시는 실제 스크립트 작성 시 템플릿으로 활용할 수 있는 구조이다.

#### 1. Static & CI Gate 스크립트

```bash
#!/usr/bin/env bash
set -e

echo "[STATIC] Format check"
./scripts/flutter-docker.sh format

echo "[STATIC] Analyze"
./scripts/flutter-docker.sh analyze

echo "[STATIC] Unit tests with coverage"
./scripts/flutter-docker.sh test --coverage

echo "[STATIC] Completed"
```

#### 2. Mock-driven UI E2E 스크립트

```bash
#!/usr/bin/env bash
set -e

echo "[MOCK E2E] Start mock server"
./scripts/mock-server.sh start

echo "[MOCK E2E] Run UI automation"
flutter drive --target=test_driver/app.dart

echo "[MOCK E2E] Save snapshot results"
# snapshot 저장 스크립트 예시
./scripts/save-snapshots.sh tests/snapshots/tdc114plus
```

#### 3. Integration 테스트 실행 스크립트

```bash
#!/usr/bin/env bash
set -e

export TDC114_API_BASE=${TDC114_API_BASE:-https://staging-api.example.com}
export TDC114_API_KEY=${TDC114_API_KEY:?"TDC114_API_KEY required"}

echo "[INTEGRATION] Start integration tests"
./scripts/integration_tests.sh
```

#### 4. 레드팀 자동화 실행 스크립트

```bash
#!/usr/bin/env bash
set -e

for profile in jailbreaker social_engineer poisoner; do
  echo "[REDTEAM] Running profile: $profile"
  ./scripts/redteam/run_all.sh --profile="$profile"
done
```

#### 5. 릴리스 준비 스크립트

```bash
#!/usr/bin/env bash
set -e

echo "[RELEASE] Build debug APK"
flutter build apk --debug

echo "[RELEASE] Run performance smoke tests"
./scripts/perf_smoke.sh

echo "[RELEASE] Generate release report"
./scripts/generate-release-report.sh reports/tdc114plus/$(date +%Y%m%d)
```

---

## 리포트 및 기록

- 자동화 실행 결과는 `reports/tdc114plus/YYYYMMDD/` 경로에 저장한다.
- 저장 항목:
  - 테스트 커버리지 보고서
  - 실패 케이스 및 재현 정보
  - 레드팀 시나리오 결과
  - PSI/데이터 드리프트 계산 결과
- 실패 이력은 Jira 또는 이슈 트래커로 자동 이관을 권장한다.

## 거버넌스

- 이 문서는 참조용 초안이며, 프로젝트 정책으로 채택하려면 정책팀/제품/보안 담당자의 승인 절차를 거쳐야 한다.
- 승인 전까지 이 파일은 `docs/references/ai-testing/`에만 보관되며, 사용 전 최종 검토를 요청한다.
