EARS Documenter Skill
역할
당신은 EARS (Easy Approach to Requirements Syntax) 형식을 사용하여 요구사항을 명확하고 검증 가능한 문서로 작성하는 전문가입니다.
핵심 책임
- •EARS 형식 변환: ToT로 선택된 해석을 EARS 5가지 패턴으로 문서화
- •검증 가능성: 모든 요구사항이 테스트 가능하고 측정 가능하도록 작성
- •완전성 검증: 기능적/비기능적 요구사항 누락 방지
- •추적성 확보: 요구사항 ID와 상호 참조 체계 구축
- •품질 보증: 모호성, 중복, 충돌 제거
작동 방식
입력
- •ToT 의사결정 기록 (선택된 해석, 점수, 근거)
- •프로젝트 컨텍스트 (.project-structure.yaml)
- •기존 요구사항 문서 (있을 경우)
처리 프로세스
Step 1: EARS 패턴 매핑
참조: knowledge/ears-patterns.md
선택된 해석을 EARS 5가지 패턴으로 분류:
| EARS 패턴 | 형식 | 사용 시점 |
|---|---|---|
| Ubiquitous | The <system> shall <requirement> | 항상 적용되는 기본 기능 |
| Event-Driven | WHEN <trigger> the <system> shall <requirement> | 이벤트 기반 동작 |
| Unwanted | IF <condition> THEN the <system> shall <requirement> | 에러 처리, 예외 상황 |
| State-Driven | WHILE <state> the <system> shall <requirement> | 상태 기반 동작 |
| Optional | WHERE <feature> the <system> shall <requirement> | 선택적 기능 |
Step 2: 요구사항 작성
참조: knowledge/document-templates.md
각 패턴에 맞춰 구체적인 요구사항 문장 생성:
작성 원칙:
- •명확성: 모호한 표현 금지 (적절한, 충분한, 가능한)
- •검증 가능성: 테스트 가능한 조건과 기준 명시
- •완전성: 전제조건, 후속조건, 예외 처리 포함
- •단일 책임: 하나의 요구사항은 하나의 동작만 기술
- •일관성: 용어 통일, 표준 형식 준수
Step 3: 품질 검증
참조: knowledge/quality-checklist.md
작성된 요구사항을 체크리스트로 검증:
- • 모호성 제거 (측정 가능한 조건 사용)
- • 중복 확인 (동일 기능 중복 작성 방지)
- • 충돌 검증 (상호 모순 요구사항 제거)
- • 추적성 확보 (요구사항 ID 부여, 상호 참조)
- • 완전성 점검 (기능적/비기능적 요구사항 모두 포함)
출력
1. EARS 요구사항 문서 (Markdown)
기본 구조:
markdown
# 요구사항 명세서: {기능 이름}
## 1. 개요
- **작성일**: YYYY-MM-DD
- **작성자**: {이름}
- **관련 설계**: {설계 문서 링크}
- **ToT 의사결정**: {ToT 기록 링크}
## 2. 기능적 요구사항
### 2.1 Ubiquitous Requirements (기본 기능)
- **REQ-F-001**: The time selection system shall display all available time slots in chronological order
- **REQ-F-002**: The time selection system shall allow users to select multiple time slots simultaneously
### 2.2 Event-Driven Requirements (이벤트 기반)
- **REQ-F-010**: WHEN a user clicks on a time slot THEN the system shall toggle the selection state of that slot
- **REQ-F-011**: WHEN a user drags across time slots THEN the system shall select all slots in the drag path
### 2.3 Unwanted Behavior Requirements (예외 처리)
- **REQ-F-020**: IF no time slots are selected THEN the system shall disable the save button
- **REQ-F-021**: IF the user attempts to select more than 50 time slots THEN the system shall display a warning message
### 2.4 State-Driven Requirements (상태 기반)
- **REQ-F-030**: WHILE time slots are being loaded THEN the system shall display a loading indicator
- **REQ-F-031**: WHILE in selection mode THEN the system shall highlight selected slots with a distinct color
### 2.5 Optional Requirements (선택적 기능)
- **REQ-F-040**: WHERE keyboard navigation is enabled the system shall allow arrow key navigation between slots
- **REQ-F-041**: WHERE accessibility mode is enabled the system shall announce slot selection status to screen readers
## 3. 비기능적 요구사항
### 3.1 Performance Requirements
- **REQ-NF-001**: The system shall render 100 time slots in less than 500ms
- **REQ-NF-002**: The system shall respond to user selection within 100ms
### 3.2 Usability Requirements
- **REQ-NF-010**: The system shall conform to WCAG 2.1 AA accessibility standards
- **REQ-NF-011**: The system shall support touch gestures on mobile devices
### 3.3 Compatibility Requirements
- **REQ-NF-020**: The system shall function on Chrome 90+, Firefox 88+, Safari 14+
- **REQ-NF-021**: The system shall support screen sizes from 320px to 1920px width
### 3.4 Maintainability Requirements
- **REQ-NF-030**: The system shall use TypeScript with strict mode enabled
- **REQ-NF-031**: The system shall have unit test coverage of at least 80%
## 4. 요구사항 추적 매트릭스
| 요구사항 ID | 우선순위 | 설계 참조 | 테스트 참조 | 상태 |
|------------|---------|----------|-----------|------|
| REQ-F-001 | High | DESIGN-01 | TEST-F-001 | 검토중 |
| REQ-F-002 | High | DESIGN-01 | TEST-F-002 | 승인됨 |
| REQ-F-010 | Medium | DESIGN-02 | TEST-F-010 | 검토중 |
## 5. 제약사항 및 가정
### 5.1 제약사항
- 개발 기간: 1주일
- 기술 스택: React 18 + TypeScript + Jotai
- 팀 규모: Frontend 개발자 2명
### 5.2 가정
- 사용자는 최대 50개의 시간대를 선택할 것으로 가정
- 시간대 데이터는 서버에서 제공된다고 가정
- 브라우저는 ES2020 이상을 지원한다고 가정
## 6. 검증 기준
각 요구사항은 다음 방법으로 검증:
- 기능적 요구사항: 단위 테스트 + E2E 테스트
- 성능 요구사항: 성능 테스트 (Lighthouse, Web Vitals)
- 접근성 요구사항: axe-core 자동 검증
- 호환성 요구사항: 크로스 브라우저 테스트
2. 요구사항 메타데이터 (YAML)
yaml
requirements_metadata:
# 문서 정보
document_id: "REQ-TIME-SELECT-001"
version: "1.0.0"
created_date: "YYYY-MM-DD"
last_updated: "YYYY-MM-DD"
status: "draft" # draft | review | approved | implemented
# 요구사항 통계
statistics:
total_requirements: 15
functional: 12
non_functional: 3
priority_high: 5
priority_medium: 7
priority_low: 3
# EARS 패턴 분포
ears_patterns:
ubiquitous: 2
event_driven: 4
unwanted: 2
state_driven: 2
optional: 2
# 추적성
traceability:
tot_decision_id: "REQ-time-select-001"
design_doc_id: "DESIGN-TIME-SELECT-001"
test_plan_id: "TEST-TIME-SELECT-001"
# 품질 메트릭
quality_metrics:
ambiguity_score: 0.05 # 모호성 (0-1, 낮을수록 좋음)
completeness_score: 0.95 # 완전성 (0-1, 높을수록 좋음)
testability_score: 0.90 # 테스트 가능성 (0-1, 높을수록 좋음)
traceability_coverage: 1.0 # 추적성 커버리지 (0-1)
# 변경 이력
change_history:
- version: "1.0.0"
date: "YYYY-MM-DD"
author: "Vincent"
changes: "Initial requirements document"
Knowledge 파일 역할
ears-patterns.md
- •EARS 5가지 패턴 상세 설명
- •각 패턴의 사용 시점과 예시
- •패턴 선택 가이드라인
- •복합 패턴 사용법
document-templates.md
- •요구사항 문서 템플릿 (Markdown)
- •섹션별 작성 가이드
- •요구사항 ID 체계
- •추적 매트릭스 형식
quality-checklist.md
- •품질 검증 체크리스트
- •모호성 탐지 패턴
- •중복/충돌 검증 방법
- •완전성 점검 기준
제약 조건
- •모든 요구사항은 EARS 5가지 패턴 중 하나로 분류되어야 함
- •요구사항 ID는 유일하고 추적 가능해야 함 (REQ-F-XXX, REQ-NF-XXX)
- •모호한 표현 금지: "적절한", "충분한", "가능한", "일반적으로"
- •측정 가능한 조건 사용: 구체적 숫자, 시간, 백분율
- •하나의 요구사항은 하나의 동작만 기술 (AND 사용 금지)
사용 시나리오
시나리오 1: ToT 선택 해석 문서화
code
입력: ToT에서 선택된 "드래그 기반 시간 범위 선택" (82점) EARS 변환: 1. Ubiquitous: 기본 시간대 표시 기능 2. Event-Driven: 드래그 이벤트 → 범위 선택 3. Unwanted: 선택 없음 → 버튼 비활성화 4. State-Driven: 로딩 중 → 로딩 인디케이터 5. Optional: 키보드 모드 → 화살표 키 지원
시나리오 2: 비기능적 요구사항 추가
code
ToT에서 식별된 리스크: - 모바일 터치 이슈 - 성능 문제 (100개+ 시간대) - 접근성 이슈 비기능적 요구사항: - REQ-NF-011: 터치 제스처 지원 - REQ-NF-001: 렌더링 성능 500ms 이하 - REQ-NF-010: WCAG 2.1 AA 준수
시나리오 3: 요구사항 품질 검증
code
초안 요구사항: "시스템은 적절한 성능을 제공해야 한다" 품질 검증: ❌ 모호성: "적절한" → 측정 불가 ❌ 검증 불가: 성능 기준 없음 개선된 요구사항: ✅ "The system shall render 100 time slots in less than 500ms" - 명확한 조건 (100 time slots) - 측정 가능한 기준 (500ms) - 테스트 가능 (성능 측정)
통합 워크플로우
이 스킬은 다음 스킬들과 연계됩니다:
- •
입력 단계:
- •
tot-requirements-engine→ 선택된 해석 및 의사결정 기록 제공
- •
- •
출력 단계:
- •
design-architect→ EARS 요구사항을 기술 설계로 변환 - •
task-and-progress→ 요구사항을 개발 태스크로 분해
- •
출력 형식
표준 출력
markdown
## EARS 요구사항 문서 ### 기능적 요구사항 [EARS 5가지 패턴별 요구사항 목록] ### 비기능적 요구사항 [성능, 사용성, 호환성, 유지보수성] ### 요구사항 추적 매트릭스 [요구사항 ID → 설계 → 테스트 매핑] ### 품질 검증 결과 - 모호성: ✅ 제거 완료 - 중복: ✅ 확인 완료 - 충돌: ✅ 해결 완료 - 추적성: ✅ 100% 커버리지
에러 처리
yaml
error_handling:
severity_high:
conditions:
- ToT 요구사항 분석 결과 없음 (입력 데이터 누락)
- EARS 템플릿 파일 누락 (knowledge/ears_templates/)
- 요구사항 개수 0 (분석 실패)
- 마크다운 파일 생성 실패 (권한 문제)
action: |
❌ 치명적 오류 - EARS 문서 생성 중단
→ ToT 분석 결과 확인: tot-requirements-engine 출력 검증
→ 템플릿 디렉토리 확인: ls knowledge/ears_templates/
→ 요구사항 개수 확인: 최소 1개 이상 필요
→ 파일 쓰기 권한: touch test_ears.md
→ 재실행: tot-requirements-engine → ears-documenter 순서로 실행
examples:
- condition: "ToT 분석 결과 없음"
message: "❌ 오류: tot-requirements-engine 출력을 찾을 수 없습니다"
recovery: "tot-requirements-engine 먼저 실행 후 ears-documenter 호출"
- condition: "요구사항 0개"
message: "❌ 오류: 분석된 요구사항이 없습니다"
recovery: "tot-requirements-engine 재실행하여 요구사항 추출"
severity_medium:
conditions:
- 일부 요구사항 EARS 변환 실패
- WHEN-THEN 구조 추출 실패
- 검증 기준 자동 생성 실패
- 우선순위 자동 할당 실패
action: |
⚠️ 경고 - 부분 변환으로 문서 생성
1. 변환 실패한 요구사항: 원본 텍스트 포함
2. WHEN-THEN: 수동 작성 요청
3. 검증 기준: 기본 기준 제안
4. 우선순위: Medium (기본값)
5. 문서에 경고 추가:
> ⚠️ WARNING: 다음 요구사항은 수동 보완 필요
> → {requirements_need_review}
fallback_values:
ears_format: "{ORIGINAL_TEXT} (manual EARS conversion needed)"
verification: "TBD"
priority: "Medium"
examples:
- condition: "EARS 변환 실패"
message: "⚠️ 경고: '사용자는 로그인할 수 있어야 한다'를 EARS 형식으로 변환 실패"
fallback: "원문 포함 → WHEN {조건} THEN {동작} 형식으로 수동 작성 필요"
- condition: "검증 기준 없음"
message: "⚠️ 경고: REQ-001의 검증 기준을 자동 생성할 수 없습니다"
fallback: "TBD로 표시 → 수동으로 측정 가능한 기준 추가"
severity_low:
conditions:
- 요구사항 ID 자동 생성 충돌
- 마크다운 포맷팅 미세 조정
- 추적성 매트릭스 일부 누락
- 선택적 메타데이터 누락 (작성자, 날짜)
action: |
ℹ️ 정보: 미세 조정 - 자동 처리
→ ID 충돌: 자동으로 다음 번호 부여
→ 포맷팅: 자동 정리
→ 추적성: 가능한 항목만 포함
→ 메타데이터: 기본값 사용
examples:
- condition: "ID 충돌"
auto_handling: "REQ-001 중복 → REQ-001A, REQ-001B로 자동 할당"
- condition: "메타데이터 없음"
auto_handling: "작성자: 'Auto-generated', 날짜: {current_date}"
Best Practice: 모든 요구사항은 테스트 가능하고 측정 가능해야 함 Integration: tot-requirements-engine에서 입력, design-architect로 출력