272 lines
8.1 KiB
Markdown
272 lines
8.1 KiB
Markdown
# TDD Workshop
|
|
|
|
**A hands-on, 80-minute workshop for learning Test-Driven Development through deliberate practice.**
|
|
|
|
---
|
|
|
|
## Workshop Overview
|
|
|
|
This workshop teaches the RED-GREEN-REFACTOR cycle through:
|
|
1. **Live demonstration** (FizzBuzz kata)
|
|
2. **Hands-on practice** (Password Validator or Shopping Cart)
|
|
3. **Group reflection** and retrospective
|
|
|
|
**Target audience:** 3-person team (2 developers + facilitator)
|
|
**Duration:** 80 minutes
|
|
**Language:** Dart
|
|
|
|
---
|
|
|
|
## Repository Structure
|
|
|
|
```
|
|
tdd-workshop/
|
|
├── README.md (you are here) # Workshop overview
|
|
├── WORKSHOP_PLAN.md # Complete facilitator schedule & scripts
|
|
├── FACILITATOR_GUIDE.md # Quick reference for facilitators
|
|
├── TDD_REFERENCE_CARD.md # One-page handout for participants
|
|
├── SETUP_GUIDE.md # Installation & troubleshooting
|
|
│
|
|
├── fizzbuzz/ # Live demo kata
|
|
│ ├── README.md # Kata overview
|
|
│ ├── DEMO_SCRIPT.md # Step-by-step demo guide (15 min)
|
|
│ ├── lib/fizzbuzz.dart # Final implementation
|
|
│ └── test/fizzbuzz_test.dart # Progressive tests
|
|
│ └── .git/ # Git history shows TDD progression!
|
|
│
|
|
├── password_validator/ # Hands-on exercise (Option A)
|
|
│ ├── README.md # Exercise instructions
|
|
│ ├── DEMO_SCRIPT.md # Facilitator reference guide
|
|
│ ├── lib/
|
|
│ │ ├── password_validator.dart # Starter code (TODO)
|
|
│ │ └── password_validator_solution.dart # Reference solution
|
|
│ └── test/
|
|
│ └── password_validator_test.dart # Tests to uncomment step-by-step
|
|
│
|
|
└── shopping_cart/ # Hands-on exercise (Option B)
|
|
├── README.md # Exercise instructions
|
|
├── DEMO_SCRIPT.md # Facilitator reference guide
|
|
├── lib/
|
|
│ ├── shopping_cart.dart # Starter code (TODO)
|
|
│ └── shopping_cart_solution.dart # Reference solution
|
|
└── test/
|
|
└── shopping_cart_test.dart # Tests to uncomment step-by-step
|
|
```
|
|
|
|
---
|
|
|
|
## For Facilitators
|
|
|
|
### Quick Start
|
|
|
|
1. **Read the plan:**
|
|
- Start with `WORKSHOP_PLAN.md` for complete details
|
|
- Review `FACILITATOR_GUIDE.md` for quick reference
|
|
- Study `fizzbuzz/DEMO_SCRIPT.md` for the live demo
|
|
- Review kata demo scripts:
|
|
- `password_validator/DEMO_SCRIPT.md` (reference for helping stuck participants)
|
|
- `shopping_cart/DEMO_SCRIPT.md` (reference for helping stuck participants)
|
|
|
|
2. **Practice the demo:**
|
|
```bash
|
|
cd fizzbuzz
|
|
git log --oneline # See the RED-GREEN-REFACTOR commits
|
|
```
|
|
Each commit shows one step of the TDD cycle.
|
|
|
|
3. **Prepare materials:**
|
|
- See "Pre-Workshop Preparation" in `WORKSHOP_PLAN.md`
|
|
- Share `SETUP_GUIDE.md` with participants 1 week before
|
|
- Have `TDD_REFERENCE_CARD.md` ready to share
|
|
|
|
4. **Day of workshop:**
|
|
- Arrive 15 minutes early
|
|
- Test projector/screen sharing
|
|
- Write schedule on whiteboard
|
|
- Have solution files ready (don't share early!)
|
|
|
|
### Key Documents
|
|
|
|
| Document | Purpose |
|
|
|----------|---------|
|
|
| **WORKSHOP_PLAN.md** | Complete schedule, scripts, checklists |
|
|
| **FACILITATOR_GUIDE.md** | Quick reference, kata insights |
|
|
| **fizzbuzz/DEMO_SCRIPT.md** | Minute-by-minute live demo walkthrough |
|
|
| **password_validator/DEMO_SCRIPT.md** | Reference guide for helping stuck participants |
|
|
| **shopping_cart/DEMO_SCRIPT.md** | Reference guide for helping stuck participants |
|
|
| **TDD_REFERENCE_CARD.md** | Participant handout (print or share digitally) |
|
|
| **SETUP_GUIDE.md** | For participants before workshop |
|
|
|
|
---
|
|
|
|
## For Participants
|
|
|
|
### Before the Workshop
|
|
|
|
1. **Complete setup:** Follow `SETUP_GUIDE.md` to install Dart and verify tests run
|
|
2. **Verify installation:**
|
|
```bash
|
|
cd password_validator
|
|
dart pub get
|
|
dart test # Should see "All tests skipped" or passing
|
|
```
|
|
3. **Bookmark reference:** Have `TDD_REFERENCE_CARD.md` ready during the workshop
|
|
|
|
### During the Workshop
|
|
|
|
1. **Watch the live demo** — See RED-GREEN-REFACTOR in action (FizzBuzz)
|
|
2. **Choose a kata:**
|
|
- **Password Validator:** Rules-based validation, interesting refactoring
|
|
- **Shopping Cart:** Stateful domain object, data structure decisions
|
|
3. **Follow the 3-Way Ping-Pong workflow:**
|
|
- **Dev A (RED):** Uncomment one test, run it, watch it fail. Pass the keyboard.
|
|
- **Dev B (GREEN):** Write minimal code to pass. Pass the keyboard.
|
|
- **Dev C (REFACTOR):** Clean up the code. Write the next test (RED). Pass the keyboard.
|
|
- Rotate roles and repeat
|
|
|
|
### Kata Instructions
|
|
|
|
#### Password Validator
|
|
- Open `password_validator/README.md` for instructions
|
|
- Implement validation rules one at a time
|
|
- Step 6 is the refactoring challenge (rules as data)
|
|
|
|
#### Shopping Cart
|
|
- Open `shopping_cart/README.md` for instructions
|
|
- Build a shopping cart with add, remove, total, discount
|
|
- Discover when to use Map vs List (Step 3)
|
|
- Learn Value Object pattern (Step 5)
|
|
|
|
---
|
|
|
|
## What You'll Learn
|
|
|
|
### The TDD Rhythm
|
|
- **RED:** Write a failing test (proves it can fail)
|
|
- **GREEN:** Write minimal code to pass (make it work)
|
|
- **REFACTOR:** Clean up code (make it right)
|
|
- **REPEAT:** Next test
|
|
|
|
### Design Insights
|
|
|
|
Through hands-on practice, you'll discover:
|
|
|
|
**Password Validator:**
|
|
- How duplication in tests reveals duplication in code
|
|
- Rules as data (Open-Closed Principle)
|
|
- Refactoring with tests as a safety net
|
|
|
|
**Shopping Cart:**
|
|
- How tests drive data structure choices (List → Map)
|
|
- Value Objects for validation
|
|
- Stateful domain modeling
|
|
|
|
**General:**
|
|
- Tests as living documentation
|
|
- Design emerges from simple tests
|
|
- Small steps lead to robust solutions
|
|
|
|
---
|
|
|
|
## After the Workshop
|
|
|
|
### Continue Practicing
|
|
|
|
Explore the **tdd-katas** repository for more practice:
|
|
https://github.com/dhemasnurjaya/tdd-katas
|
|
|
|
It contains 5 complete katas with git commit history showing every RED-GREEN-REFACTOR step:
|
|
1. **Roman Numerals** — Table-driven algorithms
|
|
2. **Bowling Game** — State management and look-ahead logic
|
|
3. **Gilded Rose** — Refactoring legacy code safely
|
|
4. **String Calculator** — Bug hunting with TDD
|
|
5. **Mars Rover** — Command pattern and value objects
|
|
|
|
### Resources
|
|
|
|
**Reference materials:**
|
|
- `TDD_REFERENCE_CARD.md` — Quick reference for TDD practice
|
|
|
|
**Books:**
|
|
- *Test-Driven Development* by Kent Beck
|
|
- *Clean Code* by Robert C. Martin
|
|
- *Growing Object-Oriented Software, Guided by Tests* by Freeman & Pryce
|
|
|
|
**Online practice:**
|
|
- Kata-Log: https://kata-log.rocks
|
|
- Exercism: https://exercism.org
|
|
- Coding Dojo: https://codingdojo.org
|
|
|
|
---
|
|
|
|
## Running the Katas
|
|
|
|
### Password Validator
|
|
```bash
|
|
cd password_validator
|
|
dart pub get
|
|
dart test
|
|
```
|
|
|
|
### Shopping Cart
|
|
```bash
|
|
cd shopping_cart
|
|
dart pub get
|
|
dart test
|
|
```
|
|
|
|
### FizzBuzz (Demo)
|
|
```bash
|
|
cd fizzbuzz
|
|
dart pub get
|
|
dart test
|
|
|
|
# See TDD progression through git history
|
|
git log --oneline
|
|
```
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
|
|
See `SETUP_GUIDE.md` for detailed troubleshooting of common issues:
|
|
- Dart installation problems
|
|
- `dart pub get` failures
|
|
- Test execution errors
|
|
- IDE setup
|
|
|
|
---
|
|
|
|
## Questions?
|
|
|
|
**For facilitators:**
|
|
- Review `WORKSHOP_PLAN.md` for comprehensive guidance
|
|
- Check `FACILITATOR_GUIDE.md` for kata-specific insights
|
|
|
|
**For participants:**
|
|
- During workshop: Raise your hand or ask facilitator
|
|
- Before workshop: Contact your facilitator with setup questions
|
|
- After workshop: Continue practicing with tdd-katas repository
|
|
|
|
---
|
|
|
|
## Philosophy
|
|
|
|
> "Clean code that works." — Ron Jeffries
|
|
|
|
TDD is a **discipline**, not a burden. The rhythm becomes automatic with practice:
|
|
- Tests first (even for "obvious" code)
|
|
- Small steps (one test at a time)
|
|
- Refactor fearlessly (tests protect you)
|
|
|
|
**The goal:** Build muscle memory for the RED-GREEN-REFACTOR cycle.
|
|
|
|
---
|
|
|
|
## License
|
|
|
|
This workshop material is provided for educational purposes. Feel free to adapt and use for your own workshops.
|
|
|
|
---
|
|
|
|
**Ready to start? Facilitators: See `WORKSHOP_PLAN.md`. Participants: See `SETUP_GUIDE.md`.**
|