Skip to main content

requirements-writing

BDD requirements using Gherkin syntax. Activates when users describe features, requirements, user stories, acceptance criteria, or work with .feature files. Generates Given-When-Then scenarios, validates Gherkin structure, and creates complete feature files.

설치로 이동

소스 정보

저장소
SmidigStorm/bdd-ai-showcase
최근 소스 활동
2026년 1월 12일 07:26
감지된 SKILL.md 언어
영어
스타
0
포크
0

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
requirements-writing
description
BDD requirements using Gherkin syntax. Activates when users describe features, requirements, user stories, acceptance criteria, or work with .feature files. Generates Given-When-Then scenarios, validates Gherkin structure, and creates complete feature files.
# Requirements Writing ## Overview This skill enables assistance with Behavior-Driven Development (BDD) requirements documentation using Gherkin syntax. It helps create well-structured feature files with Given-When-Then scenarios. ## Core Principles ### The Golden Gherkin Rule > "Write Gherkin so that people who don't know the feature will understand it." Treat readers as you'd want to be treated - prioritize clarity for all audiences, including non-technical stakeholders. ### The Cardinal Rule of BDD > "One Scenario, One Behavior!" Each scenario must cover exactly ONE independent behavior. Never write multiple When-Then pairs in a single scenario. If you find yourself wanting to add another When-Then, create a separate scenario. ## CRITICAL: NO ASSUMPTIONS POLICY **This skill MUST trigger dialogue with users, NOT make assumptions.** AI has a strong tendency to: - Fill in gaps when information is missing - Invent business rules and validation logic - Make up entity names and relationships - Assume default behaviors and error messages **NEVER do any of the above.** Instead: - **ASK questions** when information is missing - **WAIT for answers** before proceeding - **DOCUMENT gaps** as open questions if user doesn't know - **VERIFY understanding** before generating scenarios ### What to Always Ask - "What error message should be shown?" - "What validations are needed for this field?" - "What should be the default behavior?" - "Can you provide an example?" - "What edge cases should we handle?" ## Requirement IDs Every feature file gets a unique requirement ID for traceability. ### ID Format ``` [SUB]-[CAP]-[NUMBER] [Name] ``` - **SUB**: 3-letter subdomain prefix (e.g., ADM for "Admission Rules") - **CAP**: 3-letter capability prefix (e.g., GRD for "Grade Calculation") - **NUMBER**: 3-digit sequential number (001, 002, ...) - **Name**: Human-readable requirement name Examples: - `ADM-GRD-001 Weighted Average` (Admission Rules subdomain, Grade Calculation capability) - `ADM-ELG-001 Check Prerequisites` (Admission Rules subdomain, Eligibility capability) - `ENR-CRS-001 Register for Courses` (Enrollment subdomain, Course Registration capability) ### Prefix Mapping Prefixes are derived from subdomain and capability names: - Subdomain "Admission Rules" → `ADM` - Capability "Grade Calculation" → `GRD` - Capability "Eligibility Criteria" → `ELG` For new subdomains/capabilities, ask the user for preferred 3-letter prefixes. ### ID Tag in Feature Files The requirement ID is added as a tag on the Feature: ```gherkin @ADM-GRD-001 Feature: Weighted Average Calculation As an admission officer I want grades to be calculated as weighted averages So that I can fairly evaluate applicants ``` ### Requirements Registry All requirement IDs are tracked in `docs/requirements/registry.md`: ```markdown # Requirements Registry ## Admission (Domain) ### ADM - Admission Rules (Subdomain) #### GRD - Grade Calculation (Capability) | ID | Name | File | Status | |----|------|------|--------| | ADM-GRD-001 | Weighted Average | admission/admission-rules/grade-calculation/weighted-average.feature | Active | #### ELG - Eligibility Criteria (Capability) | ID | Name | File | Status | |----|------|------|--------| | ADM-ELG-001 | Check Prerequisites | admission/admission-rules/eligibility-criteria/check-prerequisites.feature | Active | ``` ### Registry Management Rules 1. **IDs are immutable** - Never reuse a deleted ID 2. **Sequential numbering** - Always use the next available number 3. **Status values**: `Active`, `Draft`, `Deprecated` 4. **Update registry** when creating, renaming, or deprecating features ## File Location and Organization ### Directory Structure Feature files are organized in `docs/requirements/` with subdirectories for domain, subdomain, and capability: ``` docs/requirements/ ├── registry.md # Tracks all requirement IDs └── [domain]/ └── [subdomain]/ └── [capability]/ └── feature-name.feature # @SUB-CAP-NNN ``` **Example:** ``` docs/requirements/ ├── registry.md └── admission/ └── admission-rules/ ├── grade-calculation/ │ └── weighted-average.feature # @ADM-GRD-001 └── eligibility-criteria/ └── check-prerequisites.feature # @ADM-ELG-001 ``` ### File Naming - Use **kebab-case** for filenames: `user-registration.feature`, `order-checkout.feature` - Make names descriptive and match the feature's purpose - Always use `.feature` extension ### Auto-Detection Workflow 1. **Read the registry** (`docs/requirements/registry.md`) to get existing IDs 2. **Search for existing feature files** (use Glob: `docs/requirements/**/*.feature`) 3. **Determine location** (domain, subdomain, capability) and derive prefixes 4. **Assign next ID** based on registry 5. **Update registry** after creating the feature file ## Domain Knowledge Discovery **Before writing scenarios, ALWAYS ask about domain knowledge.** 1. **"Where do you keep your domain knowledge?"** - Schema files, type definitions, documentation - If none: Ask them to describe entities verbally 2. **"What entities are involved in this feature?"** - What do you call them in your system? - NEVER assume entity names 3. **"What are the business rules?"** - Validations, success criteria, error cases - NEVER invent business logic **If user doesn't provide enough information:** - Mark gaps with `# TODO:` or `# QUESTION:` comments - Tag incomplete scenarios with `@wip` - List open questions at top of file ### Example Mapping (Optional Discovery Technique) A structured technique for refining requirements before writing Gherkin: | Card Color | Purpose | |------------|---------| | **Yellow** | The user story or feature being discussed | | **Blue** | Business rules / acceptance criteria | | **Green** | Concrete examples for each rule | | **Red** | Open questions to resolve | **Process:** 1. Put the story on a yellow card 2. For each business rule, add a blue card 3. For each rule, add green cards with specific examples 4. Capture unknowns on red cards **Benefits:** - ~25 minutes per story - Visual indicator if story is too large (too many cards) - Green cards convert directly to Gherkin scenarios - Red cards become `# QUESTION:` comments ## Core Capabilities ### 1. Auto-Detect Requirements When users describe functionality, recognize it as a feature requirement and offer to create Gherkin scenarios. ### 2. Parse Feature Files Read and understand existing feature files: - Identify scenarios, steps, and structure - Recognize Gherkin keywords - Extract business rules and test coverage ### 3. Generate Scenarios Convert descriptions into Given-When-Then scenarios: 1. **Extract context** - Preconditions (Given) 2. **Identify action** - Event or user action (When) 3. **Determine outcomes** - Expected results (Then) **Guidelines:** - Use declarative style (focus on "what" not "how") - Write from user's perspective - Make scenarios independent - Add appropriate tags ### 4. Validate Syntax Check feature files for: - Proper keyword usage - Correct hierarchy (Feature > Rule > Scenario > Steps) - Valid Given-When-Then flow - Data table and doc string formatting ### 5. Create Complete Feature Files **Feature file structure:** ```gherkin @ADM-001 Feature: User Registration As a new user I want to register an account So that I can access the system Background: Given the registration page is displayed Rule: Users must provide valid email and password Scenario: Successful registration Given I enter email "user@example.com" And I enter password "SecurePass123" When I submit the registration form Then I should see a confirmation message And a verification email should be sent @negative Scenario: Registration with existing email Given a user with email "existing@example.com" exists When I try to register with "existing@example.com" Then I should see "Email already registered" Rule: Password must meet security requirements Scenario Outline: Password validation When I enter password "<password>" Then I should see "<message>" Examples: | password | message | | short | Password too short | | nodigits | Password must have numbers | ``` ## Gherkin Keywords - **Feature** - High-level feature description - **Rule** - Business rule grouping (organize scenarios under rules) - **Scenario** / **Example** - Concrete test scenario - **Given** - Initial context/precondition - **When** - Action or event - **Then** - Expected outcome - **And** / **But** - Step continuation - **Background** - Common setup steps - **Scenario Outline** - Parameterized scenario - **Examples** - Data table for outlines ## Handling Open Questions ### When to Document - Business rules aren't fully defined - Technical solutions are uncertain - Stakeholder decisions are pending ### How to Document **1. Use comments:** ```gherkin # OPEN QUESTIONS: # - What happens if the user is already registered? # - Should we send a confirmation email? Feature: User Registration ``` **2. Use tags:** ```gherkin @wip @needs-clarification Scenario: Registration with existing email Given a user with email "test@example.com" exists When I try to register with "test@example.com" # TODO: Clarify error message with product owner Then I should see an error message ``` **3. Document in steps:** ```gherkin Scenario: Order with invalid payment Given I have items in my cart When I submit an invalid credit card # QUESTION: Should we show specific validation errors or generic message? Then I should see a payment error ``` ### Tags for Incomplete Work - `@wip` - Work in progress - `@needs-clarification` - Awaiting stakeholder decision - `@todo` - Needs additional work ## Best Practices ### CRITICAL: Keep It Focused **1. Business Rules, Not Edge Cases** Focus on documenting the core business rules - not every possible edge case or validation detail. A feature file should capture WHAT the system does, not exhaustively test every input combination. **Too detailed (avoid):** ```gherkin Scenario: Password too short (5 chars) Scenario: Password too short (6 chars) Scenario: Password too short (7 chars) Scenario: Password missing uppercase Scenario: Password missing lowercase Scenario: Password missing number Scenario: Password missing special char ``` **Focused on business rule (preferred):** ```gherkin Rule: Password must meet security requirements Scenario Outline: Invalid password rejected When I enter password "<invalid_password>" Then I should see "<error_message>" Examples: | invalid_password | error_message | | short | Minimum 8 characters | | nouppercas3 | Must include uppercase | | NOLOWERCASE1 | Must include lowercase | ``` **2. CRITICAL: Never Duplicate Scenarios - Use Scenario Outline** > "Copying and pasting scenarios to use different values quickly becomes tedious and repetitive." — [Cucumber Documentation](https://cucumber.io/docs/gherkin/reference/) **The Rule:** If you see multiple scenarios with the same steps but different data values, you MUST refactor into a Scenario Outline. This is not optional. **How to spot duplication:** - Same Given-When-Then structure - Only values in quotes or numbers change - You're copy-pasting and changing one field **Duplicated scenarios (NEVER do this):** ```gherkin # BAD - Three scenarios that are essentially the same Scenario: Admin can access dashboard Given I am logged in as "admin" When I navigate to the dashboard Then I should see the dashboard Scenario: Manager can access dashboard Given I am logged in as "manager" When I navigate to the dashboard Then I should see the dashboard Scenario: Guest cannot access dashboard Given I am logged in as "guest" When I navigate to the dashboard Then I should see "Access denied" ``` **Scenario Outline (ALWAYS do this instead):** ```gherkin # GOOD - One template, multiple examples Scenario Outline: Role-based dashboard access Given I am logged in as "<role>" When I navigate to the dashboard Then I should see "<result>" Examples: | role | result | | admin | the dashboard | | manager | the dashboard | | guest | Access denied | ``` **Scenario Outline best practices:** - Use descriptive parameter names: `<student_name>` not `<input1>` - Each row should test a distinct business case - Group related examples using multiple Examples blocks with tags: ```gherkin @positive Examples: Authorized users | role | result | | admin | the dashboard | | manager | the dashboard | @negative Examples: Unauthorized users | role | result | | guest | Access denied | | blocked | Access denied | ``` ### Scenario Titles **3. Good Scenario Titles** Titles should be short one-liners that summarize the behavior. **Avoid in titles:** - Conjunctions: "and", "or", "but", "because", "since" (implies multiple behaviors) - Assertion words: "verify", "assert", "should" (testing language, not behavior) - Long titles (if hard to name, scenario needs restructuring) **Good:** `Successful login with valid credentials` **Bad:** `Verify user can login and should see dashboard` ### Limits **4. Keep It Small** - **Max ~10 steps per scenario** - lengthy scenarios indicate poor practices - **Max ~12 scenarios per feature** - avoid overwhelming documents - **One feature per file** - keep files focused and findable ### Writing Style **5. Third-Person, Present Tense** - Write consistently in third-person - Use present tense for all steps - Every step needs clear subject and predicate **Good:** `Given the user is logged in` / `When the user submits the form` **Avoid:** `Given I am logged in` (mixing perspectives) ### Structure **6. Organize with Rules** - Always use Rule to group scenarios by business rules - Name rules after the business rule they represent **7. Declarative over Imperative** - Good: `When the user registers a new account` - Avoid: `When the user clicks the button, fills the form, and submits` **8. Business Language** - Use domain terminology - Match language from domain documentation **9. Vivid, Concrete Examples (Background AND Scenarios)** Use realistic, specific values that tell a story - both in Background setup and Scenario steps. **Background - Use data tables, not generic statements:** ```gherkin # GOOD - Concrete data that readers can understand Background: Given the following students exist: | Name | Email | Program | | Emma Wilson | emma@university.edu | Psychology | | James Chen | james@university.edu | Economics | # BAD - Generic, tells nothing Background: Given that there is data in the system Given that students exist ``` **Scenarios - Use vivid, realistic values:** ```gherkin # GOOD - Specific, meaningful values When I filter by the domain "Admission" When I search for student "Emma Wilson" Then I should see the course "Introduction to Psychology" # BAD - Generic placeholders When I choose to filter by domain When I search for a student When I select option "X" Then I should see results ```
GitHub에서 보기
이 SKILL.md는 매우 커서 SkillsMP가 여기에는 첫 섹션만 미리 보여줍니다. GitHub에서 보기