Claude-skill-registry generate-test-cases
Generate comprehensive test cases from specification documents using AI in the QuickRail project. Use when users want to create test cases from requirements, spec documents, or feature descriptions. Supports both Web UI and API-based generation with customizable prompts and context engineering.
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/generate-test-cases" ~/.claude/skills/majiayu000-claude-skill-registry-generate-test-cases && rm -rf "$T"
skills/data/generate-test-cases/SKILL.mdGenerate Test Cases
AI를 활용하여 스펙 문서로부터 테스트 케이스를 자동 생성합니다.
When to Use This Skill
이 스킬은 다음과 같은 상황에서 사용하세요:
- 사용자가 스펙 문서나 요구사항 문서로부터 테스트 케이스를 생성하고 싶을 때
- 기획서, PRD, 기능 명세서를 기반으로 구조화된 테스트 시나리오가 필요할 때
- 수동으로 케이스를 작성하는 시간을 절약하고 AI의 도움을 받고 싶을 때
- 기존 테스트 케이스의 커버리지를 확장하고 싶을 때
Prompt Files Architecture
QuickRail은 모듈형 프롬프트 시스템을 사용합니다. 각 파일은 명확한 역할을 가집니다:
📁 prompt_files/case_gen/
prompt_files/case_gen/ ├── common_core.md (필수) 모든 모드 적용 - 절대 규칙 ├── common_booster.md (권장) Balanced/Quality 모드 - 품질 강화 ├── spec_digest.md (선택) Quality 모드 - 스펙 분석 ├── rewrite.md (선택) Quality 모드 - 케이스 개선 ├── validate.md (선택) Quality 모드 - 최종 검증 ├── profile_web_app.md (선택) 웹 앱 특화 ├── profile_api.md (선택) API 테스트 특화 ├── profile_mobile.md (선택) 모바일 앱 특화 └── category_security.md (선택) 보안 테스트 특화
1. common_core.md (필수, 모든 모드)
용도: 절대 규칙, 출력 형식, 품질 기준
수정 빈도: 분기 1회 이하
핵심 내용:
- 1 케이스 = 1 기대결과 규칙
- Steps/Expected/Priority 작성법
- JSON 출력 형식
- 테스트 설계 기법 (동등분할, 경계값, 상태전이)
2. common_booster.md (Balanced/Quality 모드)
용도: 품질 강화, 필수 커버리지 체크리스트
수정 빈도: 월 1-2회
핵심 내용:
- 8가지 필수 커버리지 영역 (Happy Path, 입력검증, 경계값...)
- 놓치기 쉬운 시나리오 (타이밍, 취소, 브라우저 이슈)
- info_requests 가이드
3. 도메인/카테고리 프롬프트 (선택)
용도: 프로젝트 특성별 추가 규칙
예시:
: 브라우저 호환성, 반응형, SEOprofile_web_app.md
: HTTP 상태코드, 인증, Rate Limitingprofile_api.md
: OWASP Top 10, XSS, CSRFcategory_security.md
프롬프트 수정 가이드
| 상황 | 수정 파일 | 조치 |
|---|---|---|
| Steps가 너무 추상적 | | "좋은/나쁜 예시" 섹션에 실제 케이스 추가 |
| 특정 케이스 항상 누락 | | 해당 체크리스트 항목을 "필수" 표시 및 예시 추가 |
| 새 프로젝트 타입 | 새 생성 | common_core 참고하여 구조 유지 |
| 보안 강화 필요 | | OWASP 최신 버전 반영 |
프롬프트 수정 후 테스트:
# 간단한 스펙으로 테스트 curl -X POST http://localhost:5000/api/projects/1/cases/ai-generate \ -d "spec_text=사용자 로그인 기능" \ -d "generation_mode=balanced" \ -H "Cookie: session=..."
Instructions
당신은 QuickRail의 테스트 케이스 생성 전문가입니다. 다음 단계를 정확히 따라 작업을 수행하세요.
Step 1: 요구사항 수집 및 검증
먼저 사용자에게 다음 정보를 확인합니다:
필수 정보
- 스펙 문서 경로 또는 텍스트 내용
- 파일 경로 제공 시 → Read 도구로 내용 읽기
- 텍스트 직접 제공 시 → 그대로 사용
- 스펙 품질 간단 검증:
✅ 기능 목적이 명시되어 있는가? ✅ 입력/출력이 구체적인가? ✅ 성공/실패 시나리오가 있는가? ❌ 품질이 낮으면 사용자에게 스펙 개선 제안
선택 정보 (기본값 제공)
- 대상 프로젝트 ID (기본: 현재 활성 프로젝트)
- 생성 모드 (기본:
)balanced
: 빠른 생성 (10-30초, 기본 품질)fast
: 권장 (30초-1분, 체크리스트 적용)balanced
: 최고 품질 (1-3분, 다단계 검증)quality
- 프로파일 키 (선택:
,web_app
,mobile_app
)api_testing - 카테고리 키 (선택:
,ui
,api
,security
)performance
예시 대화:
사용자: "로그인 기능 테스트 케이스 만들어줘" 어시스턴트: "네, 로그인 기능 테스트 케이스를 생성하겠습니다. 몇 가지 확인할게요: 1. 스펙 문서가 있나요? (파일 경로 또는 요구사항을 직접 알려주세요) 2. 프로젝트 타입: 웹 앱인가요, 모바일 앱인가요? (기본: 웹) 3. 생성 모드: balanced 모드로 진행할까요? (권장) 스펙 문서가 없다면 기본적인 로그인 시나리오로 생성할 수도 있습니다."
Step 2: QuickRail 서버 상태 확인
QuickRail 서버가 실행 중인지 확인합니다:
# Windows tasklist | findstr python # Linux/Mac ps aux | grep python | grep run.py
결과 해석:
- ✅
프로세스 있음 → Step 3으로python run.py - ❌ 프로세스 없음 → 사용자에게 서버 시작 안내:
"QuickRail 서버가 실행되지 않았습니다. 새 터미널에서 다음 명령어로 서버를 시작해주세요: cd /path/to/quickrail python run.py 서버가 시작되면 http://localhost:5000 에서 확인할 수 있습니다."
Step 3: 프롬프트 시스템 확인
3-1. 활성 프롬프트 확인 (DB)
venv/Scripts/python.exe -c " import sys sys.path.insert(0, '.') from app import create_app, db from app.models import CaseGenerationPrompt app = create_app('development') with app.app_context(): prompt = CaseGenerationPrompt.query.filter_by(is_active=True).first() if prompt: print(f'✅ Active DB Prompt: {prompt.name} (ID: {prompt.id})') print(f' Created: {prompt.created_at}') print(f' Updated: {prompt.updated_at}') else: print('⚠️ No active DB prompt - using file-based prompts') "
3-2. 파일 기반 프롬프트 확인
# 프롬프트 파일 목록 확인 ls -lh prompt_files/case_gen/ # 필수 파일 존재 여부 test -f prompt_files/case_gen/common_core.md && echo "✅ common_core.md" || echo "❌ common_core.md 누락" test -f prompt_files/case_gen/common_booster.md && echo "✅ common_booster.md" || echo "❌ common_booster.md 누락"
파일 없으면 초기화:
venv/Scripts/python.exe scripts/init_case_generation_prompt.py # 초기화 후 재확인 ls -lh prompt_files/case_gen/
3-3. 프롬프트 내용 간단 검증
# common_core.md 핵심 키워드 확인 grep -c "1 케이스 = 1 기대결과" prompt_files/case_gen/common_core.md grep -c "Priority" prompt_files/case_gen/common_core.md # common_booster.md 체크리스트 개수 확인 grep -c "\- \[ \]" prompt_files/case_gen/common_booster.md
Step 4: API 키 확인 및 검증
venv/Scripts/python.exe -c " import sys sys.path.insert(0, '.') from app import create_app, db from app.models import APIKey app = create_app('development') with app.app_context(): key = APIKey.query.filter_by(service='openai', is_active=True).first() if key: print('✅ OpenAI API Key: Configured') # 키 마스킹 출력 masked = key.api_key[:8] + '...' + key.api_key[-4:] print(f' Key: {masked}') print(f' Model: {key.model or \"gpt-4o-mini (default)\"}') else: print('❌ ERROR: No active OpenAI API key') print(' 조치: Settings > API Keys에서 OpenAI 키를 추가하고 활성화하세요') sys.exit(1) "
에러 발생 시 조치:
"OpenAI API 키가 설정되지 않았습니다. 다음 단계로 설정해주세요: 1. http://localhost:5000/settings/api-keys 접속 2. 'Add API Key' 클릭 3. Service: OpenAI 선택 4. API Key 입력 (sk-...로 시작) 5. Model: gpt-4o-mini 또는 gpt-4o 선택 6. 'Active' 체크박스 활성화 7. 저장"
Step 5: 케이스 생성 실행
방법 A: Web UI 사용 (권장)
사용자에게 다음 단계를 구체적으로 안내:
1. 브라우저에서 http://localhost:5000 접속 2. 좌측 사이드바에서 프로젝트 선택 예: "QuickRail Project" 3. 상단 탭에서 "Cases" 클릭 4. 우측 상단의 "AI Generate Cases" 버튼 클릭 (파란색 버튼, AI 아이콘) 5. 팝업 창에서: ┌─────────────────────────────────────┐ │ Specification Text │ │ ┌─────────────────────────────────┐ │ │ │ 여기에 스펙 입력 또는 │ │ │ │ "Upload File" 버튼으로 파일 │ │ │ └─────────────────────────────────┘ │ │ │ │ Generation Mode: [Balanced ▼] │ │ Profile: [None ▼] (선택) │ │ Category: [None ▼] (선택) │ │ │ │ [Generate Preview] │ └─────────────────────────────────────┘ 6. "Generate Preview" 클릭 후 대기 (30초~1분) 7. 결과 확인: - 좌측: 생성된 섹션 및 케이스 트리 - 우측: 각 케이스의 상세 내용 - 체크박스로 선택 가능 8. 품질 검토 (Step 6 참고) 9. 커밋: - "Commit All": 모든 케이스 저장 - "Commit Selected": 체크된 케이스만 저장
방법 B: API 직접 호출
Python 스크립트로 API 호출 (자동화/스크립트용):
import requests import json from pathlib import Path # 1. 스펙 파일 읽기 spec_path = Path("specs/login_feature.md") if not spec_path.exists(): print(f"❌ 스펙 파일 없음: {spec_path}") exit(1) spec_text = spec_path.read_text(encoding='utf-8') print(f"✅ 스펙 로드: {len(spec_text)} 글자") # 2. 세션 생성 및 로그인 session = requests.Session() login_response = session.post( 'http://localhost:5000/auth/login', data={ 'email': 'admin@quickrail.com', 'password': 'admin123' } ) if login_response.status_code != 200: print(f"❌ 로그인 실패: {login_response.status_code}") exit(1) print("✅ 로그인 성공") # 3. AI 케이스 생성 요청 print("📝 케이스 생성 중...") response = session.post( 'http://localhost:5000/api/projects/1/cases/ai-generate', data={ 'spec_text': spec_text, 'generation_mode': 'balanced', # fast | balanced | quality 'profile_key': 'web_app', # 선택 'category_key': '', # 선택 'model': 'gpt-4o-mini' # gpt-4o-mini | gpt-4o } ) # 4. 결과 처리 if response.status_code == 200: result = response.json() # 통계 출력 sections = result.get('sections', []) total_cases = sum(len(s.get('cases', [])) for s in sections) print(f"✅ 생성 완료:") print(f" 섹션: {len(sections)}개") print(f" 케이스: {total_cases}개") # 파일 저장 output_path = Path('generated_cases.json') with open(output_path, 'w', encoding='utf-8') as f: json.dump(result, f, indent=2, ensure_ascii=False) print(f" 저장 위치: {output_path}") # info_requests 확인 info_requests = result.get('info_requests', []) if info_requests: print(f"\n⚠️ 추가 정보 필요 ({len(info_requests)}건):") for req in info_requests: print(f" - {req['topic']}: {req['question']}") else: print(f"❌ 생성 실패: {response.status_code}") print(f" 에러: {response.text}") # 에러 분석 if response.status_code == 400: print("\n 가능한 원인:") print(" - 스펙 텍스트가 너무 짧음 (최소 50자 필요)") print(" - 잘못된 generation_mode 값") elif response.status_code == 401: print("\n 가능한 원인:") print(" - 세션 만료 (로그인 재시도)") elif response.status_code == 500: print("\n 가능한 원인:") print(" - OpenAI API 키 오류") print(" - 프롬프트 파일 손상") print(" - 서버 로그 확인: tail -f logs/quickrail.log")
Step 6: 생성 결과 검증 및 품질 체크
생성된 케이스를 다음 체크리스트로 검증하도록 안내:
✅ 구조 검증
- 섹션이 논리적으로 그룹화되었는가?
- 예: "로그인 > 정상 케이스", "로그인 > 에러 처리"
- 각 섹션에 최소 2개 이상의 케이스가 있는가?
- 관련 없는 케이스가 섞여있지 않은가?
✅ 완성도 검증
-
Title: 테스트 의도가 명확한가?
- ❌ "로그인 테스트"
- ✅ "잘못된 비밀번호로 로그인 시도 시 에러 메시지 표시"
-
Steps: 구체적인 행동이 번호로 나열되었는가?
- ❌ "로그인 시도"
- ✅ "1) 이메일 필드에 'test@example.com' 입력\n2) 비밀번호 필드에 'wrong123' 입력\n3) [로그인] 버튼 클릭"
-
Expected Result: 검증 가능한 결과인가?
- ❌ "정상 동작"
- ✅ "비밀번호 필드 하단에 빨간색 '비밀번호가 일치하지 않습니다' 에러 메시지 표시"
✅ 우선순위 검증
- Priority가 Blocker/Critical/High/Medium/Low 중 하나인가?
- 핵심 기능은 Blocker/Critical로 설정되었는가?
- 엣지 케이스는 Medium/Low로 설정되었는가?
✅ 커버리지 검증
- Happy Path (정상 흐름) 케이스가 있는가?
- Negative 케이스 (에러, 예외)가 있는가?
- 입력 검증 케이스가 충분한가? (빈 값, 형식 오류, 특수문자)
- 경계값 케이스가 있는가? (최소, 최대, 0)
- 인증/권한 케이스가 있는가? (해당 시)
✅ 중복/유사 케이스 체크
# 중복 검사 스크립트 import json with open('generated_cases.json', 'r', encoding='utf-8') as f: data = json.load(f) titles = [] for section in data['sections']: for case in section.get('cases', []): title = case['title'].lower() if title in titles: print(f"⚠️ 중복 케이스: {case['title']}") titles.append(title)
검증 실패 시 조치:
- Web UI: 체크박스 해제하여 해당 케이스만 제외
- API:
수정 후 수동 커밋generated_cases.json - 재생성: 더 구체적인 스펙 제공 후 다시 생성
Generation Modes 상세
Fast Mode
사용 시기: 프로토타이핑, 간단한 기능, 빠른 피드백 필요
적용 프롬프트:
common_core.md만예상 시간: 10-30초
장점: 빠름
단점: 기본 품질, 누락 가능성 있음
예시 결과:
- 섹션: 2-3개
- 케이스: 5-10개
- 커버리지: Happy Path + 기본 에러
Balanced Mode (권장)
사용 시기: 일반적인 모든 케이스, 프로덕션 사용
적용 프롬프트:
common_core.md + common_booster.md + 선택한 프로파일/카테고리예상 시간: 30초-1분
장점: 품질과 속도 균형, 체크리스트 적용
단점: -
예시 결과:
- 섹션: 4-6개 (중첩 가능)
- 케이스: 15-30개
- 커버리지: Happy Path + 입력검증 + 경계값 + 에러처리
Quality Mode
사용 시기: 중요한 기능, 복잡한 시나리오, 최고 품질 필요
적용 프롬프트: 모든 프롬프트 + 다단계 검증
예상 시간: 1-3분
장점: 최고 품질, 포괄적 커버리지, 다단계 검증
단점: 느림
예시 결과:
- 섹션: 6-10개 (중첩 구조)
- 케이스: 30-50개
- 커버리지: 모든 체크리스트 항목 + 엣지케이스 + 통합 테스트
Quality 모드 파이프라인:
1. spec_digest.md → 스펙 분석 및 핵심 추출 2. common_core.md → 기본 규칙 적용 3. common_booster.md → 체크리스트 적용 4. profile_*.md → 도메인 특화 (선택) 5. category_*.md → 카테고리 특화 (선택) 6. [AI 초안 생성] 7. rewrite.md → 품질 개선 (Steps 구체화, Expected 명확화) 8. validate.md → 최종 검증 (중복 제거, 우선순위 재조정) 9. [최종 출력]
Best Practices
1. 스펙 문서 품질이 결과를 좌우합니다
좋은 스펙 예시:
## 기능: 사용자 로그인 ### 목적 등록된 사용자가 이메일과 비밀번호로 인증하여 시스템에 접근 ### 입력 필드 - 이메일 (필수) - 형식: RFC 5322 표준 - 예시: user@example.com - 최대 길이: 255자 - 비밀번호 (필수) - 최소 8자, 최대 128자 - 영문 대소문자, 숫자, 특수문자 조합 - 마스킹 처리됨 ### 성공 시나리오 1. 올바른 이메일/비밀번호 입력 2. 서버 인증 성공 3. 세션 생성 (유효기간 30분) 4. 대시보드 페이지로 리다이렉트 ### 실패 시나리오 - 잘못된 비밀번호 → "비밀번호가 일치하지 않습니다" 에러 - 존재하지 않는 이메일 → "등록되지 않은 이메일입니다" 에러 - 5회 연속 실패 → 계정 잠금 (15분) - 빈 필드 제출 → 해당 필드에 "필수 입력입니다" 에러 ### 제약사항 - 동시 로그인: 최대 3개 디바이스 - Rate Limiting: IP당 분당 10회 - 2FA 활성화 시: OTP 추가 입력 필요
나쁜 스펙 예시:
로그인 기능 만들기 - 이메일이랑 비밀번호 입력받음 - 맞으면 로그인됨 - 틀리면 에러 보여줌
2. 적절한 모드 선택
| 상황 | 권장 모드 | 이유 |
|---|---|---|
| 스펙 초안 단계, 빠른 검토 필요 | Fast | 빠른 피드백 |
| 일반 기능 개발 | Balanced | 품질과 속도 균형 |
| 핵심 기능, 결제, 보안 | Quality | 최고 품질 필요 |
| 레거시 코드 리팩토링 | Quality | 포괄적 커버리지 |
3. 프로파일/카테고리 활용
프로파일 선택 기준:
- 웹 앱 →
: 브라우저 이슈, CORS, SEOweb_app - 모바일 앱 →
: 화면 회전, 백그라운드, 오프라인mobile_app - REST API →
: HTTP 메서드, 상태코드, 인증api_testing
카테고리 선택 기준:
- 로그인, 결제, 개인정보 →
: XSS, CSRF, SQL Injectionsecurity - 대시보드, 목록 →
: 로딩 시간, 대용량 데이터performance - 폼, 입력 →
: 접근성, 반응형, 브라우저 호환성ui
조합 예시:
웹 쇼핑몰 결제 기능: - Profile: web_app - Category: security → SSL, PCI DSS, XSS 방어 케이스 자동 추가
4. 생성 후 검증은 필수
AI는 도구일 뿐입니다. 반드시 검토하세요:
- 비즈니스 로직이 정확한가?
- 중복 케이스는 없는가?
- Priority가 적절한가?
- 실제로 실행 가능한가?
검증 실패 사례:
생성된 케이스: "관리자가 사용자 삭제 시 확인 팝업 표시" 문제: 실제 스펙에는 "삭제" 기능 없음 → AI가 일반적인 CRUD 패턴으로 추측
5. 반복적 개선
첫 생성 → 검토 → 프롬프트 튜닝 → 재생성 사이클:
1차 생성: - 입력 검증 케이스 부족 → common_booster.md 수정: "입력 검증 최소 5개" 명시 2차 생성: - Steps가 너무 추상적 ("로그인 시도") → common_core.md 수정: "나쁜 예시" 섹션에 추가 3차 생성: - ✅ 품질 만족 → 프롬프트 버전 관리 (git commit)
Troubleshooting
문제 1: 프롬프트 파일 없음
증상:
FileNotFoundError: prompt_files/case_gen/common_core.md
해결:
# 프롬프트 초기화 스크립트 실행 venv/Scripts/python.exe scripts/init_case_generation_prompt.py # 결과 확인 ls -la prompt_files/case_gen/
문제 2: OpenAI API 키 오류
증상:
OpenAI API Error: Incorrect API key provided
해결:
- API 키 확인: http://localhost:5000/settings/api-keys
- OpenAI 대시보드에서 키 유효성 확인
- 키 재생성 및 교체
- 서버 재시작
문제 3: 생성된 케이스가 너무 적음
증상:
- Balanced 모드인데 케이스 5개만 생성됨
원인:
- 스펙이 너무 짧거나 모호함
- common_booster.md가 적용 안 됨
해결:
# 1. 모드별 프롬프트 로딩 확인 grep -r "generation_mode" app/routes/api.py # 2. 스펙 보강 (최소 200자 이상 권장) # 3. Quality 모드로 재시도
문제 4: 생성 중 타임아웃
증상:
504 Gateway Timeout
원인:
- 스펙이 너무 김 (5000자 초과)
- Quality 모드에서 복잡한 스펙
해결:
# 스펙을 섹션별로 분할하여 생성 sections = ["로그인", "회원가입", "비밀번호 찾기"] for section in sections: spec = extract_section(section) # 섹션별 추출 generate_cases(spec, mode='balanced') # 최종 병합
문제 5: DB 마이그레이션 에러
증상:
sqlalchemy.exc.OperationalError: no such table: case_generation_prompt
해결:
# DB 마이그레이션 적용 cd /path/to/quickrail venv/Scripts/flask.exe db upgrade # 마이그레이션 히스토리 확인 venv/Scripts/flask.exe db history # 최신 상태 확인 venv/Scripts/flask.exe db current
문제 6: 한글 인코딩 깨짐
증상:
- 생성된 케이스에 ��� 같은 문자
해결:
# 스펙 파일 읽을 때 UTF-8 명시 spec_text = Path("spec.md").read_text(encoding='utf-8') # API 호출 시 헤더 추가 response = session.post( url, data={'spec_text': spec_text}, headers={'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'} )
Related Files
코드
-app/routes/api.py:5809
함수 (메인 로직)ai_generate_cases()
-app/models.py
모델CaseGenerationPrompt
- 프롬프트 파일 로딩 유틸app/utils/prompt_files.py
- OpenAI API 호출 (추정)app/services/openai_service.py
스크립트
- 프롬프트 초기화scripts/init_case_generation_prompt.py
프롬프트
- 절대 규칙prompt_files/case_gen/common_core.md
- 품질 강화prompt_files/case_gen/common_booster.md
- 도메인 특화 (선택)prompt_files/case_gen/profile_*.md
- 카테고리 특화 (선택)prompt_files/case_gen/category_*.md
설정
- QuickRail 설정config.py
- 환경 변수 (API 키 등).env
Advanced Tips
1. 커스텀 프롬프트 작성
새 프로파일 추가 예시:
# prompt_files/case_gen/profile_iot.md 생성 cat > prompt_files/case_gen/profile_iot.md << 'EOF' # IoT 디바이스 테스트 특화 프롬프트 ## 추가 체크리스트 ### 하드웨어 연동 - [ ] 센서 데이터 수신 실패 시나리오 - [ ] 펌웨어 업데이트 중단 - [ ] 배터리 부족 상황 ### 네트워크 - [ ] WiFi 연결 끊김 - [ ] MQTT 브로커 다운 - [ ] 저대역폭 환경 ### 물리적 상황 - [ ] 온도 범위 (-10°C ~ 50°C) - [ ] 습도 영향 - [ ] 진동/충격 EOF
2. 배치 생성 스크립트
#!/bin/bash # batch_generate.sh SPECS_DIR="specs/" OUTPUT_DIR="generated_cases/" for spec_file in $SPECS_DIR/*.md; do echo "Processing: $spec_file" python - <<EOF import requests from pathlib import Path spec_text = Path("$spec_file").read_text(encoding='utf-8') session = requests.Session() session.post('http://localhost:5000/auth/login', data={'email': 'admin@quickrail.com', 'password': 'admin123'}) response = session.post( 'http://localhost:5000/api/projects/1/cases/ai-generate', data={'spec_text': spec_text, 'generation_mode': 'balanced'} ) output_file = Path("$OUTPUT_DIR") / Path("$spec_file").with_suffix('.json').name output_file.write_text(response.text, encoding='utf-8') EOF done
3. 품질 메트릭 추적
# analyze_quality.py import json from pathlib import Path def analyze_cases(json_file): with open(json_file, 'r', encoding='utf-8') as f: data = json.load(f) total_cases = 0 priorities = {'Blocker': 0, 'Critical': 0, 'High': 0, 'Medium': 0, 'Low': 0} avg_steps = [] for section in data['sections']: for case in section.get('cases', []): total_cases += 1 priorities[case['priority']] += 1 steps_count = len(case['steps'].split('\n')) avg_steps.append(steps_count) print(f"Total Cases: {total_cases}") print(f"Priorities: {priorities}") print(f"Avg Steps: {sum(avg_steps)/len(avg_steps):.1f}") print(f"Info Requests: {len(data.get('info_requests', []))}") analyze_cases('generated_cases.json')
Changelog
2025-01-22
- SKILL.md 대폭 개선
- 프롬프트 파일 아키텍처 섹션 추가
- Troubleshooting 섹션 확장
- 실전 예시 코드 보강
2025-01-15
- Generation Modes 상세 설명 추가
- Best Practices 섹션 신규 작성
2025-01-10
- 초기 버전 작성