Claude-skill-registry bdd-principles
Core BDD concepts, philosophy, and the Three Amigos practice
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/bdd-principles" ~/.claude/skills/majiayu000-claude-skill-registry-bdd-principles && rm -rf "$T"
skills/data/bdd-principles/SKILL.mdBDD Principles
Master the foundational principles and philosophy of Behavior-Driven Development.
What is BDD?
Behavior-Driven Development (BDD) is a collaborative software development approach that:
- Bridges the gap between business and technical teams
- Uses concrete examples to describe system behavior
- Creates living documentation that serves as tests
- Focuses on delivering business value
- Promotes shared understanding through conversation
Core Philosophy
Discovery > Development > Delivery
Discovery: Collaborate to understand requirements
- Hold Three Amigos sessions
- Explore with examples
- Challenge assumptions
- Build shared understanding
Development: Implement guided by examples
- Use examples as specifications
- Automate examples as tests
- Follow outside-in TDD
Delivery: Validate against real behavior
- Executable specifications provide confidence
- Living documentation stays current
- Regressions are caught early
The Three Amigos
A practice where three perspectives collaborate to explore and define features:
1. Business Perspective (Product Owner/BA)
- What problem are we solving?
- What value does it provide?
- What are the business rules?
2. Development Perspective (Developer)
- How might we build this?
- What are the technical constraints?
- What are the edge cases?
3. Testing Perspective (Tester/QA)
- What could go wrong?
- What are we missing?
- How will we verify this works?
Example Three Amigos Session
Feature: Password Reset
Business: "Users who forget their password need a way to reset it via email."
Developer: "We'll need to generate secure tokens with expiration. How long should tokens be valid?"
Tester: "What happens if they request multiple reset emails? Can old tokens still be used?"
Business: "Tokens should be valid for 1 hour. Multiple requests should invalidate old tokens."
Developer: "Should we rate-limit reset requests to prevent abuse?"
Tester: "What if the email address doesn't exist in our system?"
Business: "For security, show the same success message whether or not the email exists."
Outcome: Concrete examples that become scenarios:
Scenario: Request password reset with valid email Given a user account exists for "user@example.com" When I request a password reset for "user@example.com" Then I should receive a reset email And the reset link should be valid for 1 hour Scenario: Request password reset with non-existent email When I request a password reset for "nonexistent@example.com" Then I should see a success message But no email should be sent Scenario: Multiple password reset requests Given I have requested a password reset When I request another password reset Then the previous reset link should be invalidated And I should receive a new reset email
Living Documentation
BDD scenarios serve as:
- Executable Specifications: Automated tests that verify behavior
- Documentation: Up-to-date description of how the system works
- Common Language: Shared vocabulary between business and technical teams
- Regression Suite: Safety net when making changes
Example: Living Documentation
Feature: Promotional Discount Application To attract customers and increase sales As a marketing manager I want to offer promotional discounts Rule: Percentage discounts apply to order subtotal Example: 20% off for orders over $100 Given I have a $150 order When I apply a "20% off" promotion Then my discount should be $30 And my order total should be $120 Rule: Minimum purchase amount must be met Example: Promotion requires $50 minimum Given I have a $40 order When I try to apply a "$50 minimum" promotion Then the promotion should not apply And I should see "Minimum purchase not met" Rule: Only one promotion per order Example: Cannot stack multiple promotions Given I have a $100 order And I have applied "10% off" When I try to apply "Free shipping" Then I should see "One promotion per order" And only "10% off" should be applied
Ubiquitous Language
Develop and use a shared vocabulary:
❌ Technical Jargon:
"When the user submits the form, we validate the input, hash the password with bcrypt, insert a record into the users table, and return a 201 response."
✅ Ubiquitous Language:
"When a customer registers, we verify their information, create their account, and send a welcome email."
Building Ubiquitous Language
Discover terms through conversation:
- What do you call this?
- What's the difference between X and Y?
- When does this state change?
Document terms in scenarios:
# Use "Member" not "User" (business term) Given I am a Gold Member # Use "Place order" not "Submit order" (domain term) When I place an order # Use "Pending" not "In progress" (system state) Then the order should be Pending
Keep a glossary:
Member: A customer with a subscription Guest: A customer without a subscription Order: A collection of items ready for purchase Cart: A temporary collection of items being considered
Example Mapping
A workshop technique to explore features with examples:
The Four Colors
Yellow Cards: User Stories/Features Blue Cards: Rules (acceptance criteria) Green Cards: Examples (scenarios) Red Cards: Questions (uncertainties)
Example Mapping Session
Story: User registration
Rules (Blue):
- Email must be unique
- Password must be strong
- Age must be 18+
Examples (Green):
- Register with valid details → Success
- Register with existing email → Error
- Register with weak password → Error
- Register under 18 → Error
Questions (Red):
- Do we verify email addresses?
- What defines a "strong" password?
- Do we need parent consent for minors?
Specification by Example
Use concrete examples to drive development:
Vague Requirement
"Users should be able to search for products."
Specification by Example
Scenario: Search by product name Given products "Laptop", "Mouse", "Keyboard" exist When I search for "lap" Then I should see "Laptop" in results But I should not see "Mouse" or "Keyboard" Scenario: Search with no results Given products "Laptop", "Mouse" exist When I search for "phone" Then I should see "No results found" Scenario: Search is case-insensitive Given a product "Laptop" exists When I search for "LAPTOP" Then I should see "Laptop" in results
Outside-In Development
Start from the outside (user-facing behavior) and work inward:
- Write a failing scenario (acceptance test)
- Write a failing unit test (for the layer you're working on)
- Write minimum code to make unit test pass
- Refactor
- Repeat until scenario passes
Scenario (Acceptance) ─┐ ├─> Controller Test ─┐ │ ├─> Service Test ─┐ │ │ ├─> Code │ │ │ │ ├─ Service │ │ │ │ ├─ Controller │ │ │ │ │ Scenario Passes ───────┴────────────────────┴─────────────────┘
BDD vs TDD
TDD (Test-Driven Development):
- Developer-focused
- Tests implementation
- Red-Green-Refactor cycle
- Unit tests guide design
BDD (Behavior-Driven Development):
- Business-focused
- Tests behavior
- Conversation-Specification-Automation
- Scenarios guide development
They complement each other:
- BDD: What should we build? (outside-in)
- TDD: How should we build it? (inside-out)
Key Principles
- Collaboration is essential - BDD requires active participation from business, development, and testing
- Examples clarify requirements - Concrete examples reveal ambiguities and edge cases
- Automate what matters - Not everything needs to be automated, focus on high-value scenarios
- Think behaviors, not tests - Describe what the system does, not how it's tested
- Iterate and refine - Scenarios evolve as understanding deepens
- Keep scenarios maintainable - Write clear, focused scenarios that are easy to update
Common Misconceptions
❌ "BDD is just testing with Cucumber" ✅ BDD is a collaborative practice; tools are just enablers
❌ "BDD means writing tests before code" ✅ BDD means discovering requirements through examples before implementation
❌ "BDD scenarios should test everything" ✅ BDD scenarios should document key behaviors; use unit tests for details
❌ "Only testers write scenarios" ✅ Business, developers, and testers collaborate on scenarios
❌ "BDD slows down development" ✅ BDD reduces rework by building the right thing the first time
Benefits of BDD
- Reduced rework: Build the right thing from the start
- Better collaboration: Shared understanding across roles
- Living documentation: Always up-to-date specifications
- Faster onboarding: New team members learn from scenarios
- Regression safety: Automated scenarios catch breaking changes
- Business confidence: Stakeholders see value being delivered
Remember: BDD is fundamentally about communication and collaboration. The goal is to build software that delivers real value by ensuring everyone has a shared understanding of what needs to be built.