bdd-principles

安装量: 42
排名: #17199

安装

npx skills add https://github.com/thebushidocollective/han --skill bdd-principles
BDD 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.
返回排行榜