| name | bdd-practices |
| description | Writes behavior specifications in Gherkin format. Use when defining features from user perspective or creating acceptance tests. |
BDD Practices
Gherkin ํ์์ผ๋ก ๊ธฐ๋ฅ์ ๋ช
์ธํ๊ณ , ์ ํ์ ์ผ๋ก ์๋ํ ํ
์คํธ๋ก ์ฐ๊ฒฐํฉ๋๋ค.
ํต์ฌ ์ฒ ํ:
- Feature First: .feature ๋ช
์ธ ๋จผ์ , ๊ตฌํ ๋์ค
- Specification by Example: ์ถ์์ ์๊ตฌ์ฌํญ ๋์ ๊ตฌ์ฒด์ ์๋๋ฆฌ์ค
- Living Documentation: .feature = ์คํ ๊ฐ๋ฅํ ๋ฌธ์ (์๋ํ ์์ด๋ ๊ฐ์น ์์)
.feature ํ์ผ์ ๊ฐ์น
.feature ํ์ผ ์์ฒด๊ฐ:
- ์๊ตฌ์ฌํญ ๋ช
์ธ์ - Given/When/Then์ผ๋ก ๊ตฌ์กฐํ
- ์ธ์ ์กฐ๊ฑด (Acceptance Criteria) - ์๋ฃ ๊ธฐ์ค ๋ช
ํํ
- ์ฃ์ง ์ผ์ด์ค ๋ฌธ์ - ์์ธ ์ํฉ ์ ๋ฆฌ
- ํ ์ปค๋ฎค๋์ผ์ด์
๋๊ตฌ - ๋น๊ฐ๋ฐ์๋ ์ฝ์ ์ ์์
์๋ํ ์์ด ๋ช
์ธ๋ก๋ง ์ฌ์ฉํด๋ ์ถฉ๋ถํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
Phase 1: Discovery (๋ฐ๊ฒฌ)
์ ๊ธฐ๋ฅ์ด๋ ์๊ตฌ์ฌํญ ๋
ผ์ ์:
-
์๊ตฌ์ฌํญ ํ์
- ์ฌ์ฉ์๊ฐ ์์ฒญํ ๊ธฐ๋ฅ์ ๋ช
ํํ ์ดํด
- ๋ชจํธํ ๋ถ๋ถ์ ์ฌ์ฉ์์๊ฒ ์ง๋ฌธ
-
Example Mapping
- ๊ท์น(Rules)๊ณผ ์์(Examples) ๋์ถ
- ์ฃ์ง ์ผ์ด์ค ์๋ณ
- ์ง๋ฌธ ๋ชฉ๋ก ์์ฑ
-
์๋๋ฆฌ์ค ๋ชฉ๋ก ์์ฑ
- ํต์ฌ ์๋๋ฆฌ์ค ๋์ด (Happy Path)
- ์์ธ ์๋๋ฆฌ์ค ๋์ด (Edge Cases)
- ์ฐ์ ์์ ๊ธฐ์ค:
- Happy Path (์ ์ ํ๋ก์ฐ) - ๊ฐ์ฅ ๋จผ์
- ๊ฐ์ฅ ํํ ์์ธ ์ผ์ด์ค
- ๋น์ฆ๋์ค ํฌ๋ฆฌํฐ์ปฌ ์ผ์ด์ค
- ์ฃ์ง ์ผ์ด์ค - ๋์ค์
- ์: "๋ค์ ์๋๋ฆฌ์ค๋ค์ ์์๋๋ก ์งํํ๊ฒ ์ต๋๋ค: 1) ์ ํจํ ๋ก๊ทธ์ธ, 2) ์๋ชป๋ ๋น๋ฐ๋ฒํธ, 3) ์กด์ฌํ์ง ์๋ ์ฌ์ฉ์"
-
์ฌ์ฉ์ ํ์ธ
- ์๋๋ฆฌ์ค ๋ชฉ๋ก ๋ณด์ฌ์ฃผ๊ธฐ
- ๋๋ฝ๋ ์ผ์ด์ค ํ์ธ
-
Phase 2๋ก ์งํ
Phase 2: Formulation (๋ช
์ธํ)
์๋๋ฆฌ์ค๋ฅผ Gherkin ํ์์ผ๋ก ์์ฑ:
-
ํ์ผ ์์น ๊ฒฐ์
- ํ๋ก์ ํธ ๋ด
features/ ๋๋ ํ ๋ฆฌ (๊ถ์ฅ)
- ๊ธฐ์กด .feature ํ์ผ์ด ์๋์ง ํ์ธ
- ์ฌ์ฉ์์๊ฒ ํ์ธ
-
.feature ํ์ผ ์์ฑ
Feature: ๊ธฐ๋ฅ๋ช
๊ธฐ๋ฅ์ ๋ํ ์ค๋ช
Scenario: ์๋๋ฆฌ์ค๋ช
Given ์ ์ ์กฐ๊ฑด
When ํ๋
Then ๊ฒฐ๊ณผ
-
Gherkin ์์ฑ ์์น
- ํ ์๋๋ฆฌ์ค์ ํ๋์ ํ๋๋ง
- ๊ตฌ์ฒด์ ์ธ ์์ ๋ฐ์ดํฐ ์ฌ์ฉ
- ๊ตฌํ ์ธ๋ถ์ฌํญ ๋
ธ์ถ ๊ธ์ง (UI ์์, DB ์ฟผ๋ฆฌ ๋ฑ)
- ๋น์ฆ๋์ค ์ธ์ด๋ก ์์ฑ
-
์ธ์ด ์ ํ
- ํ๊ธ ํค์๋ ์ฌ์ฉ ์ ํ์ผ ์ฒซ ์ค์
# language: ko ์ถ๊ฐ
- ๋น๊ฐ๋ฐ์ ํ์
, ํ๊ตญ์ด ๋๋ฉ์ธ โ ํ๊ธ ๊ถ์ฅ
- ๊ธ๋ก๋ฒ ํ, ์คํ์์ค โ ์์ด ๊ถ์ฅ
-
์์ธ ๋ฌธ๋ฒ: resources/01-gherkin-syntax.md ์ฐธ์กฐ (ํ๊ธ ํค์๋ ํฌํจ)
-
์ฌ์ฉ์ ํ์ธ
- ์์ฑ๋ ์๋๋ฆฌ์ค ๋ณด์ฌ์ฃผ๊ธฐ
- "์ด ์๋๋ฆฌ์ค๊ฐ ์๊ตฌ์ฌํญ์ ์ ํํ ๋ฐ์ํ๋์?"
-
ldoc ์ฐ๊ณ (์ ํ)
- .feature๋ ldoc์ ์๊ตฌ์ฌํญ ๋ฌธ์๋ก ํ์ฉ ๊ฐ๋ฅ
docs/requirements/ ๋๋ features/ ๋๋ ํ ๋ฆฌ์ ๋ฐฐ์น ๊ถ์ฅ
-
Phase 3์ผ๋ก ์งํ
Phase 3: Automation (์ ํ)
.feature๋ฅผ ์๋ํ ํ
์คํธ๋ก ์ฐ๊ฒฐํ๋ ค๋ฉด:
-
์๋ํ ์ฌ๋ถ ํ์ธ
- ๋ช
์ธ๋ง ํ์ํ ๊ฒฝ์ฐ โ Phase 2์์ ์๋ฃ
- ์๋ํ ํ
์คํธ๊ฐ ํ์ํ ๊ฒฝ์ฐ โ ์๋ ์งํ
-
์์ธ ๊ฐ์ด๋: resources/02-automation.md ์ฐธ์กฐ
- Step definitions ์์ฑ (Python/JavaScript)
- pytest-bdd, behave, cucumber-js ์ค์
- RED โ GREEN โ REFACTOR ์ฌ์ดํด
-
tdd-practices ์ฐ๊ณ
- Step definition์ ์๊ฒ ์ ์ง
- ๋ณต์กํ ๋ด๋ถ ๋ก์ง์ tdd-practices๋ก ๊ฐ๋ฐ
AI Red Flags ๐จ
๋ค์ ์งํ ๋ฐ๊ฒฌ ์ ์ฆ์ ์ค๋จํ๊ณ ์ฌ์ฉ์์๊ฒ ๋ณด๊ณ :
-
๐จ .feature ์์ด ๊ตฌํ๋ถํฐ ์์
- BDD๋ ๋ช
์ธ ๋จผ์ , ๊ตฌํ ๋์ค
- "๋จผ์ ์๋๋ฆฌ์ค๋ฅผ ์์ฑํ๊ฒ ์ต๋๋ค"
-
๐จ Step definition ์์ด ํ
์คํธ ์คํ ์๋
- Step definition์ด ์์ผ๋ฉด ํ
์คํธ ์คํ ๋ถ๊ฐ
- Phase 3 ๊ฑด๋๋ฐ๊ธฐ ๊ธ์ง
-
๐จ ์๋๋ฆฌ์ค์ ์๋ ๊ธฐ๋ฅ ๊ตฌํ
- .feature์ ์ ์๋ ํ๋๋ง ๊ตฌํ
- ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ ์๋๋ฆฌ์ค๋ก
-
๐จ ๊ตฌํ ์ธ๋ถ์ฌํญ์ .feature์ ๋
ธ์ถ
- "๋ฒํผ์ ํด๋ฆญํ๋ค" โ
- "๋ก๊ทธ์ธ์ ์๋ํ๋ค" โ
tdd-practices ์ฐ๊ณ
BDD vs TDD:
- BDD: ์๋๋ฆฌ์ค ๋ ๋ฒจ (.feature โ Step definitions)
- TDD: ์ ๋ ๋ ๋ฒจ (ํ
์คํธ โ ํจ์/ํด๋์ค)
์ฐ๊ณ ์์ : ์๋ํ ๋จ๊ณ์์ ๋ณต์กํ ๋ก์ง์ด ํ์ํ ๋
- Step definition์ ์๊ฒ ์ ์ง
- ๋ด๋ถ ๋ก์ง์ tdd-practices์ RED-GREEN-REFACTOR๋ก ๊ฐ๋ฐ
Examples
๊ธฐ๋ฅ ๋ช
์ธ ์์ฑ (์๋ํ ์์)
User: "์ฃผ๋ฌธ ์ทจ์ ๊ธฐ๋ฅ ๋ช
์ธํด์ค"
โ Phase 1: ์๋๋ฆฌ์ค ๋์ถ
- ๋ฐฐ์ก ์ ์ทจ์ โ ์ ์ก ํ๋ถ
- ๋ฐฐ์ก ์ค ์ทจ์ โ ๋ถ๊ฐ
- ๋ฐฐ์ก ์๋ฃ ํ โ ๋ฐํ ์ ์ฐจ
โ Phase 2: features/order-cancel.feature ์์ฑ
โ ์๋ฃ (๋ช
์ธ ๋ฌธ์๋ก ํ์ฉ)
BDD ์ ์ฒด ํ๋ก์ฐ (์๋ํ ํฌํจ)
User: "๋ก๊ทธ์ธ ๊ธฐ๋ฅ BDD๋ก ๊ตฌํํด์ค"
โ Phase 1-2: .feature ์์ฑ
โ Phase 3: resources/02-automation.md ์ฐธ์กฐ
โ Step definitions + ๊ตฌํ
๊ธฐ์กด .feature์ ์๋๋ฆฌ์ค ์ถ๊ฐ
User: "๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ ์๋๋ฆฌ์ค ์ถ๊ฐํด์ค"
โ Phase 1: ์๋๋ฆฌ์ค ๋์ถ
โ Phase 2: ๊ธฐ์กด .feature์ ์ถ๊ฐ
Technical Details
- Gherkin ์์ธ ๋ฌธ๋ฒ:
resources/01-gherkin-syntax.md
- ์๋ํ ๊ฐ์ด๋:
resources/02-automation.md
- ํ
ํ๋ฆฟ:
templates/crud.feature, templates/auth.feature
- ์ ๋ ํ
์คํธ ์ฐ๊ณ:
tdd-practices