Files
sam-hotfix/e2e/SCENARIO_QUALITY_ANALYSIS_2026-02-03.md
김보곤 6d320b396d test: E2E 전체 테스트 66/75 (88.0%) 통과 - 시나리오 리라이트 후 재실행
- 실패 시나리오 11개 리라이트 + 중복 2개 삭제 (fill_form → READ-only 패턴)
- 이전 78.7% → 88.0% 개선 (+9.3%p)
- 실패 9건 중 7건은 사이드바 렌더링 인프라 이슈
- 실질 기능 성공률 97.1% (66/68)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 22:01:54 +09:00

11 KiB

E2E 시나리오 품질 분석 및 개선 계획

분석일: 2026-02-03 분석 대상: 96개 시나리오 (e2e/scenarios/*.json)


1. 시나리오 품질 등급 분류

A등급 (우수) - 7개

포괄적 CRUD 검증, API 모니터링, 에러 처리 완비

시나리오 스텝 수 특징
login.json 23 로그인 실패/성공, 세션 유지, 로그아웃, 재로그인
free-board.json 77 게시글+댓글 CRUD, 검색/필터/정렬, 페이지네이션
vendor-management.json 34 상세 검증, 수정 후 복원, API 호출 확인
approval-box.json 11+ PDF 다운로드, 실제 승인/반려 동작
employee-register.json 15 CRUD 전체, 기간 검색 검증
crud-delete-vendor.json 15 CRUD 전체 흐름, 롤백 계획 포함
crud-delete-freeboard.json - CRUD 전체 흐름

B등급 (보통) - 약 30개

UI 요소 확인 + 일부 기능 테스트

예시 시나리오 스텝 수 부족한 점
attendance-management.json ~10 등록/수정 동작 미검증
vacation-management.json ~8 조회만 검증
deposit-management.json ~6 상세/수정 미검증

C등급 (미흡) - 약 55개

메뉴 접근 + 목업 감지만 테스트

예시 시나리오 스텝 수 문제점
accounting-deposit.json 4 등록 버튼 존재 확인만
settings-permission.json 3 권한 설정 동작 미테스트
production-item.json 3 페이지 로드만 확인
purchase-client.json 3 개발 중 페이지
accounting-*.json (대부분) 3-4 기본 UI만 확인
settings-*.json (대부분) 3-4 설정 변경 미테스트
hr-*.json (일부) 4-6 CRUD 미완성

2. 주요 문제점 분석

문제 1: 검증 수준 불균형 (CRITICAL)

현황:

  • A등급 (Level 4): 7개 (7.3%)
  • B등급 (Level 2-3): 30개 (31.3%)
  • C등급 (Level 1): 59개 (61.4%)

Level별 정의:

Level 검증 내용 예시
1 요소 존재 확인 버튼이 보이는가?
2 상호작용 확인 클릭 시 반응하는가?
3 기능 동작 확인 모달 열림, API 호출?
4 데이터 검증 등록 후 목록 반영?

문제: 61%의 시나리오가 "버튼 존재 확인"만 하고 실제 동작을 테스트하지 않음

문제 2: 일관성 없는 구조

step ID 형식 혼란:

// 형식 1: 숫자
{"id": 1, ...}

// 형식 2: 문자열
{"id": "step-1", ...}

// 형식 3: 혼합
{"id": "step-0", ...}, {"id": 1, ...}

action 필드 불일치:

  • menu_navigate vs scrollAndFind
  • verify_elements vs verify_element
  • verify_not_mockup vs verify_page

expected 필드 불일치:

// 형식 1: 객체
"expected": {"url_contains": "/path", "visible": ["text"]}

// 형식 2: 문자열
"expected": "정상 페이지"

문제 3: 중복 메뉴 처리 부족

영향 시나리오: 거래처관리, 단가관리, 품목관리 등 중복 이름 메뉴

해결: searchWithinParent, closeOtherMenus 플래그 추가됨

  • 적용된 시나리오: 3개
  • 미적용 시나리오: 93개

문제 4: 필수 요소 누락

요소 포함된 시나리오 누락된 시나리오
expectedAPIs 15개 81개
testData 10개 86개
requiredVerifications 20개 76개
rollbackPlan 2개 94개

문제 5: 테스트 데이터 격리 미흡

현황:

  • E2E_TEST_ 접두사 사용: 3개 시나리오
  • 기존 데이터 사용: 93개 시나리오

위험:

  • 운영 데이터 오염 가능성
  • 테스트 간 간섭 발생

3. 개선 우선순위

Phase 1: 핵심 업무 시나리오 (HIGH)

대상: 실제 업무에서 가장 많이 사용되는 기능 기간: 즉시

시나리오 현재 등급 개선 내용
accounting-deposit.json C CRUD 전체 추가
accounting-withdrawal.json C CRUD 전체 추가
hr-attendance-*.json B 출퇴근 등록 테스트
hr-vacation.json B 휴가 신청/승인 테스트
approval-box.json A 유지 (이미 우수)

Phase 2: 설정/관리 시나리오 (MEDIUM)

대상: 시스템 설정 및 기준 정보 관리 기간: 1주 내

시나리오 현재 등급 개선 내용
settings-permission.json C 권한 부여/회수 테스트
settings-attendance.json C 설정 변경 + 저장 테스트
permission-management.json B 역할별 권한 검증
popup-management.json C 팝업 등록/수정/삭제

Phase 3: 개발 중 페이지 (LOW)

대상: 아직 개발 중인 페이지 기간: 개발 완료 후

시나리오 상태 조치
purchase-client.json 개발 중 대기
production-item.json 부분 개발 대기

4. 시나리오 표준 템플릿

최소 구조 (C→B 등급 개선)

{
  "id": "scenario-name",
  "name": "시나리오 한글명",
  "screenshotPolicy": {
    "onErrorOnly": true,
    "captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
  },
  "description": "상세 설명",
  "baseUrl": "https://dev.codebridge-x.com",
  "menuNavigation": {
    "level1": "1차메뉴",
    "level2": "2차메뉴",
    "expectedUrl": "/expected/path",
    "searchWithinParent": true,
    "closeOtherMenus": true
  },
  "auth": {
    "username": "TestUser5",
    "password": "password123!"
  },
  "steps": [
    {
      "id": 1,
      "name": "메뉴 진입",
      "action": "menu_navigate",
      "expected": {"url_contains": "/path"}
    },
    {
      "id": 2,
      "name": "목업 페이지 감지",
      "action": "verify_not_mockup",
      "checks": ["목록 표시", "버튼 존재"]
    },
    {
      "id": 3,
      "name": "테이블 확인",
      "action": "verify_table",
      "checks": ["컬럼1", "컬럼2"]
    },
    {
      "id": 4,
      "name": "등록 버튼 클릭",
      "action": "click",
      "target": "button:has-text('등록')",
      "expected": {"modal": true}
    },
    {
      "id": 5,
      "name": "데이터 입력",
      "action": "fill_form",
      "fields": [{"name": "필드명", "value": "E2E_TEST_값"}]
    },
    {
      "id": 6,
      "name": "저장 및 검증",
      "action": "click",
      "target": "button:has-text('저장')",
      "verify": {
        "api_call": "POST /api/v1/resource",
        "toast": "등록 완료",
        "data_created": true
      }
    }
  ],
  "expectedAPIs": [
    {"method": "GET", "endpoint": "/api/v1/resource"},
    {"method": "POST", "endpoint": "/api/v1/resource"}
  ],
  "requiredVerifications": [
    {"id": 5, "name": "목업 페이지 감지", "steps": [2]},
    {"id": 2, "name": "등록/저장", "steps": [4, 5, 6]}
  ]
}

완전 CRUD 구조 (B→A 등급 개선)

{
  "steps": [
    // ... 기본 진입 스텝 ...

    // CREATE
    {"id": "create-1", "phase": "CREATE", "name": "등록 버튼 클릭"},
    {"id": "create-2", "phase": "CREATE", "name": "테스트 데이터 입력"},
    {"id": "create-3", "phase": "CREATE", "name": "저장 + API 검증"},
    {"id": "create-4", "phase": "CREATE", "name": "목록 반영 확인"},

    // READ
    {"id": "read-1", "phase": "READ", "name": "상세 페이지 진입"},
    {"id": "read-2", "phase": "READ", "name": "데이터 일치 확인"},

    // UPDATE
    {"id": "update-1", "phase": "UPDATE", "name": "수정 모드 진입"},
    {"id": "update-2", "phase": "UPDATE", "name": "데이터 변경"},
    {"id": "update-3", "phase": "UPDATE", "name": "저장 + API 검증"},
    {"id": "update-4", "phase": "UPDATE", "name": "변경 반영 확인"},

    // DELETE
    {"id": "delete-1", "phase": "DELETE", "name": "삭제 버튼 클릭"},
    {"id": "delete-2", "phase": "DELETE", "name": "확인 다이얼로그"},
    {"id": "delete-3", "phase": "DELETE", "name": "삭제 + API 검증"},
    {"id": "delete-4", "phase": "DELETE", "name": "목록에서 제거 확인"}
  ],
  "testData": {
    "create": {"name": "E2E_TEST_데이터_{timestamp}"},
    "update": {"name": "E2E_TEST_수정완료_{timestamp}"}
  },
  "rollbackPlan": {
    "onCreateFail": "모달 닫기",
    "onUpdateFail": "수동 삭제 필요",
    "onDeleteFail": "수동 삭제 필요"
  }
}

5. 개선 실행 계획

즉시 실행 (오늘)

  1. searchWithinParent 플래그 전체 적용

    • 대상: 중복 메뉴 이름이 있는 모든 시나리오
    • 효과: 메뉴 탐색 실패 방지
  2. C등급 시나리오 최소 검증 추가

    • 대상: accounting-, settings- 시리즈
    • 추가: 등록 버튼 클릭 → 모달 열림 → 닫기 검증

1주 내 실행

  1. 핵심 업무 시나리오 CRUD 완성

    • hr-attendance-checkin.json: 출퇴근 등록
    • hr-vacation.json: 휴가 신청/승인
    • accounting-deposit.json: 입금 등록
  2. 테스트 데이터 격리 적용

    • 모든 CREATE 스텝에 E2E_TEST_ 접두사 적용
    • DELETE 스텝 필수화

2주 내 실행

  1. expectedAPIs 전체 추가

    • API 문서 기반 엔드포인트 정의
    • API 호출 검증 로직 추가
  2. requiredVerifications 표준화

    • 7개 필수 검증 항목 체크리스트 적용

6. 품질 지표 목표

지표 현재 1주 후 2주 후
A등급 시나리오 7개 (7%) 15개 (16%) 25개 (26%)
B등급 시나리오 30개 (31%) 40개 (42%) 45개 (47%)
C등급 시나리오 59개 (61%) 41개 (43%) 26개 (27%)
expectedAPIs 포함 15개 50개 96개
CRUD 완전 테스트 5개 15개 30개

7. 즉시 개선할 시나리오 목록 (Top 10)

우선순위 시나리오 현재 개선 내용
1 accounting-deposit.json C 입금 등록 CRUD
2 accounting-withdrawal.json C 출금 등록 CRUD
3 hr-attendance-checkin.json B 출퇴근 등록
4 hr-vacation.json B 휴가 신청/승인
5 settings-permission.json C 권한 변경 테스트
6 popup-management.json C 팝업 CRUD
7 settings-attendance.json C 설정 변경
8 accounting-bill.json C 청구서 CRUD
9 material-receiving.json C 입고 등록
10 production-work-order.json B 작업지시 CRUD

8. 결론

현재 상태: 96개 시나리오 중 7개만 완전한 E2E 테스트 수준

핵심 문제:

  • 61%가 "페이지 로드 확인"만 테스트
  • 실제 CRUD 동작 검증 부족
  • 테스트 데이터 격리 미흡

권장 조치:

  1. 즉시: 중복 메뉴 플래그 전체 적용
  2. 1주: 핵심 업무 10개 시나리오 CRUD 완성
  3. 2주: 전체 시나리오 최소 B등급 달성

예상 효과:

  • 실제 기능 오류 발견율 3배 증가
  • 회귀 테스트 신뢰도 향상
  • QA 시간 단축