"매 잘 쓴 requirement = 절반의 implementation". Requirements engineering은 매 stakeholder의 needs를 매 unambiguous, testable, prioritized statements로 매 변환 — 2026 의 매 AI-aided spec drafting (Claude/GPT-5)이 매 standard, 매 BDD/Gherkin은 매 living spec format 의 dominant.
매 핵심
매 분류
Functional (FR): 매 system이 매 무엇을 하는가 — input/output, behavior.
Non-functional (NFR): 매 어떻게 — performance, security, scalability, accessibility, reliability (SLO/SLA).
매 Ambiguity의 매 적: "fast", "user-friendly" → 매 numeric ("p95 < 200ms", "SUS > 80").
매 Formats (modern 2026)
User story: As a <role>, I want <goal> so that <benefit>.
Acceptance criteria: Given-When-Then (Gherkin) — executable via Cucumber/pytest-bdd.
Job stories (alternative): When <situation>, I want to <motivation>, so I can <outcome>.
PRD (Product Requirements Doc): living markdown in repo, AI-assisted draft.
RFC / Design doc: technical spec for engineering decisions.
매 AI-aided workflow (2026)
PM의 매 rough idea → Claude Opus 4.7 로 PRD draft.
Engineering review → AI 의 매 ambiguity flags ("매 'fast'를 quantify").
Gherkin scenarios 매 generate → directly executable.
Trace matrix (req → test → code) 매 AI auto-link.
Change requests → AI의 매 impact analysis (영향 받는 spec/test/code).
매 응용
SaaS feature spec.
Embedded system safety (DO-178C, ISO 26262 traceability).
RFP/contract scope.
AI agent task specification (prompt = 매 spec).
💻 패턴
User story + acceptance criteria
## US-142: Email-based password reset
**As a** registered user
**I want** to reset my password via email
**So that** I can regain access without contacting support
### Acceptance Criteria (Gherkin)
\`\`\`gherkin
Feature: Password reset
Scenario: Valid email triggers reset link
Given a user with email "alice@example.com" exists
When I POST /auth/reset with that email
Then a reset email is sent within 30 seconds
And the email contains a token valid for 1 hour
Scenario: Unknown email returns generic success
Given no user with email "ghost@example.com"
When I POST /auth/reset with that email
Then the response is 200 OK
And no email is sent
# Reason: avoid user enumeration
\`\`\`
### NFR
- p95 endpoint latency < 300ms
- Email delivery SLA: 99.5% within 60s
- Token: 256-bit, single-use, 1h TTL
pytest-bdd executable spec
# features/password_reset.feature → tests/test_password_reset.pyfrompytest_bddimportscenarios,given,when,thenscenarios("../features/password_reset.feature")@given('a user with email "alice@example.com" exists')defalice(db):db.users.insert(email="alice@example.com")@when('I POST /auth/reset with that email')defpost_reset(client,ctx):ctx["resp"]=client.post("/auth/reset",json={"email":"alice@example.com"})@then('a reset email is sent within 30 seconds')defemail_sent(mailbox):assertmailbox.last(timeout=30).to=="alice@example.com"
prompt=f"""You are a senior PM. Draft a PRD for: {feature_idea}Output sections:
1. Problem (user pain quantified)
2. Goals / non-goals
3. User stories (INVEST format)
4. Acceptance criteria (Gherkin)
5. NFRs with measurable targets
6. Open questions
Flag every ambiguous adjective ('fast', 'easy') and demand a number."""
Change-impact analysis
defimpact_of_change(req_id:str)->dict:"""Walk trace matrix to find affected artifacts."""trace=yaml.safe_load(open("requirements/trace.yaml"))node=trace[req_id]return{"tests":node["acceptance_tests"],"code":node["code"],"downstream_reqs":[rforr,nintrace.items()ifreq_idinn.get("related",[])],}
매 결정 기준
상황
Approach
Agile feature
User stories + Gherkin AC
Compliance-heavy (med, aero)
Formal SRS (IEEE 830) + traceability
Internal tool
Lightweight one-pager PRD
AI agent task
Structured prompt = spec
Cross-team API
OpenAPI/AsyncAPI as contract
Performance critical
Explicit SLO table
기본값: User story + Gherkin AC + NFR table; AI-drafted, human-reviewed.
언제: PRD draft, ambiguity detection, Gherkin generation, impact analysis.
언제 X: regulated safety-critical (FDA, FAA) 매 final sign-off는 매 human SME — LLM의 매 unverified.
❌ 안티패턴
Vague adjectives: "fast", "scalable" without numbers.
Solution masquerading as requirement: "Use Redis cache" (impl detail, not need).
Untestable AC: "should feel intuitive" → 매 measurable proxy 의 부재.
Spec drift: code changes 의 매 spec update 의 X — 매 living spec과 매 sync.
Big bang requirements: 매 모든 feature 의 매 upfront freeze → agile 의 violation.