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
آخر نشاط في المصدر
١٢ يناير ٢٠٢٦ في ٠٧:٢٦
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
٠
التفرعات
٠

خيارات التثبيت

يُحدَّد 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