tdd-practices
npx skills add https://github.com/ssiumha/dots --skill tdd-practices
Agent 安装分布
Skill 文档
TDD Practices
Phase 1: TDD ì¸ì ìì
ì 기ë¥ì´ë ìì ìì ìì ì:
-
ì구ì¬í íì
- ì¬ì©ìê° ìì²í 기ë¥ì ëª íí ì´í´
- 모í¸í ë¶ë¶ì ì¬ì©ììê² ì§ë¬¸
-
í ì¤í¸ 리ì¤í¸ ìì±
- 구íì íìí 모ë í ì¤í¸ ì¼ì´ì¤ ëì´
- ë¨ìí ê²ë¶í° ë³µì¡í ììë¡ ì ë ¬
- ì¬ì©ììê² ëª©ë¡ ë³´ì¬ì£¼ê³ íì¸ë°ê¸°
- ì: “ë¤ì í ì¤í¸ë¤ì ììëë¡ ì§ííê² ìµëë¤: 1) …, 2) …, 3) …”
-
Baseline íì¸
- 기존 í ì¤í¸ ì ì²´ ì¤í
- 모ë íµê³¼íëì§ íì¸
- ì¤í¨íë í ì¤í¸ê° ìë¤ë©´ 먼ì ìì
-
Phase 2 (RED)ë¡ ì§í
Phase 2: RED – ì¤í¨íë í ì¤í¸ ìì±
í ì¤í¸ 리ì¤í¸ì ê° í목ì ëí´:
-
ìê³ êµ¬ì²´ì ì¸ í ì¤í¸ íë ìì±
- í ë²ì íëì ëìë§ ê²ì¦
- í ì¤í¸ ì´ë¦ì ìë를 ëª íí íí
- AAA í¨í´ ê¶ì¥ (Arrange-Act-Assert)
- ⨠í
ì¤í¸ ìì± = ì¤ê³ íë: í
ì¤í¸í기 ì¬ì´ ì¸í°íì´ì¤ë¥¼ ì¤ê³
- ë¶ìì© ìµìí
- ìì¡´ì± ëª ìì ì¼ë¡ íí
- ì ë ¥ê³¼ ì¶ë ¥ì´ ëª íí 구조
-
í ì¤í¸ ì¤í
- ìì±í í ì¤í¸ë§ 먼ì ì¤í
- ì¤í¨ ë©ìì§ì ì´ì íì¸
-
ì¬ë°ë¥¸ ì´ì ë¡ ì¤í¨íëì§ ê²ì¦
- â ï¸ í ì¤í¸ê° ì¦ì íµê³¼: ì´ë¯¸ 구íì´ ì¡´ì¬í¨, ë¤ë¥¸ í ì¤í¸ ì í
- â ï¸ í ì¤í¸ê° ì¤í ì ë¨: ë¬¸ë² ì¤ë¥, ì§í ì ìì íì
- â ììí ì´ì ë¡ ì¤í¨: ì ì, ë¤ì ë¨ê³ ì§í
-
ì¤í¨ ì¶ë ¥ì ì¬ì©ììê² ë³´ì¬ì£¼ê¸°
- ì´ë¤ í ì¤í¸ê° ì¤í¨íëì§
- ì ì¤í¨íëì§ (ììê° vs ì¤ì ê°)
-
Phase 3 (GREEN)ì¼ë¡ ì§í
Phase 3: GREEN – ìµì 구í
í ì¤í¸ë¥¼ íµê³¼ìí¤ê¸° ìí´:
-
ê°ì¥ ë¨ìí ì½ë ìì±
- íëì½ë© íì© (Fake It ì ëµ)
- ì ë§ ë¨ìíê³ ëª ë°±í ê²½ì°ìë§ ì¼ë°íë 구í
- ìì²íì§ ìì ê¸°ë¥ ì ë ì¶ê° ê¸ì§ â ï¸
-
íì©ëë ì ëµ
- Fake It: íëì½ë©ë ê° ë°í (ëì¤ì ì¼ê°ì¸¡ëì¼ë¡ ì¼ë°í)
- Obvious Implementation: 구íì´ ì ë§ ëª ë°±í ê²½ì°
- Triangulation: ì¬ë¬ í ì¤í¸ë¡ ì¼ë°í ì ë â ⨠ì¬ë¬ í ì¤í¸ë¥¼ íµê³¼ìí¤ë¤ ë³´ë©´ ìì°ì¤ë½ê² ë²ì©ì ì¤ê³ê° ëì¶ë¨
-
í ì¤í¸ ì¤í â íµê³¼ íì¸
- ë°©ê¸ ìì±í í ì¤í¸ ì¤í
- íµê³¼íëì§ íì¸
-
ì ì²´ í ì¤í¸ ì¤í â íê· ìì íì¸
- 기존 í ì¤í¸ë¤ì´ ì¬ì í íµê³¼íëì§ íì¸
- íê·ê° ë°ìíë¤ë©´ ì¦ì ìì
-
íµê³¼ ì¶ë ¥ì ì¬ì©ììê² ë³´ì¬ì£¼ê¸°
-
Phase 4 (REFACTOR)ë¡ ì§í
GREEN ë¨ê³ì AI Red Flags ð¨
ë¤ì ì§í ë°ê²¬ ì ì¦ì ì¤ë¨íê³ ì¬ì©ììê² ë³´ê³ :
- ð¨ íì¬ í
ì¤í¸ì ìë ê¸°ë¥ ì¶ê°
- ì: ë¡ê·¸ì¸ í ì¤í¸ì¸ë° ê´ë¦¬ì ì²´í¬, ë¡ê¹ ì¶ê°
- ð¨ íëì½ë©ì¼ë¡ ì¶©ë¶íë° ë°ë³µë¬¸/조건문 ì¬ì©
- 첫 í ì¤í¸ììë íëì½ë©ì´ ì ì
- ð¨ í
ì¤í¸ ìì /ìì ë¡ íµê³¼ ìë
- í ì¤í¸ê° íë ¸ë¤ë©´ ì¬ì©ì íì¸ íì
- ð¨ 조기 ìµì í
- ìºì±, ì±ë¥ ìµì íë ìì²ë°ì§ ììë¤ë©´ ê¸ì§
Phase 4: REFACTOR – ëì ë³ê²½ ìì´ ê°ì
íµì¬ ìì¹: 구조 ë³ê²½ê³¼ ê¸°ë¥ ë³ê²½ì ì ë ìì§ ë§ ê²
í ì¤í¸ê° 모ë íµê³¼í í:
-
ì½ë ëì ìë³
- ì¤ë³µ ì½ë (Copy & Paste)
- ë¶ëª íí ë³ì/í¨ì ì´ë¦
- 긴 í¨ì
- ë³µì¡í 조건문
- ⨠í
ì¤í¸í기 ì´ë ¤ì´ ì½ë (ì¤ê³ ì¬ê³ ì í¸):
- ë¶ìì©ì´ ë§ê±°ë ìì¡´ì±ì´ ê°íê² ê²°í©ë ì½ë
- ë¨ì¼ ì± ì ìì¹(SRP) ìë°
- í ì¤í¸ ìì±ì´ ì´ë µë¤ë©´ â í¨ì 쪼ê°ê¸°, ìì¡´ì± ì£¼ì ê³ ë ¤
-
í ë²ì íëì 리í©í ë§ë§ ì ì©
- Extract Method (ë©ìë ì¶ì¶)
- Rename (ì´ë¦ ë³ê²½)
- Remove Duplication (ì¤ë³µ ì ê±°)
- Inline (ë¶íìí ê°ì 참조 ì ê±°)
-
ê° ë¦¬í©í ë§ í ì¦ì í ì¤í¸ ì¤í
- 모ë í ì¤í¸ê° ì¬ì í íµê³¼íëì§ íì¸
- ì¤í¨ ì â 리í©í ë§ ëëë¦¬ê³ ë¤ë¥¸ ë°©ë² ìë
-
리í©í ë§ì´ ëëë©´ 커ë°
- 깨ëí ìíë¡ ì ì§
REFACTOR ë¨ê³ìì ì ë ê¸ì§ â
- â ì ê¸°ë¥ ì¶ê°: 기ë¥ì ë¤ì RED-GREEN ì¬ì´í´ìì
- â í ì¤í¸ 기ëê° ë³ê²½: ëì ë³ê²½ì ì¦ê±°
- â 리í©í ë§ê³¼ ê¸°ë¥ ë³ê²½ í¼í©: ë³ë 커ë°ì¼ë¡ ë¶ë¦¬
- â í ì¤í¸ íµê³¼ë¥¼ ìí ì½ë ìì : REFACTORë ì´ë¯¸ íµê³¼í ìí
REFACTOR ì¤ í ì¤í¸ ì¤í¨ ì
í ì¤í¸ê° ì¤í¨íë¤ë©´:
- 리í©í ë§ì´ ìëë¼ ëì ë³ê²½ì íë¤ë ì¦ê±°
- ì¦ì ëë리기
- ë ìì ë¨ìë¡ ë¦¬í©í ë§ ìë
- Phase 5ë¡ ì§í
Phase 5: ë°ë³µ ëë ìë£
리í©í ë§ í:
-
í ì¤í¸ 리ì¤í¸ë¡ ëìê°ê¸°
- ìë£í í ì¤í¸ ì²´í¬
- ë¨ì í ì¤í¸ íì¸
-
ë¤ì ë¨ê³ ê²°ì
- ë¨ì í ì¤í¸ ìì â Phase 2 (RED)ë¡ ëìê°ê¸°
- 모ë í ì¤í¸ ìë£ â ìë£ ì¡°ê±´ íì¸
-
ìë£ ì¡°ê±´ íì¸
- â 모ë í ì¤í¸ íµê³¼
- â ì¤ë³µ ì½ë ì ê±°ë¨
- â ìëê° ëª íí¨ (ì´ë¦, 구조)
- â ììí 모ë ì¼ì´ì¤ 커ë²
-
íì ì 문ì ì ë°ì´í¸
- ì 기ë¥ì ëí ì¤ëª
- API ë³ê²½ì¬í 기ë¡
ìì
ìì 1: Fake Itìì ì¼ë°í
첫 ë²ì§¸ í ì¤í¸ + 구í (Fake It):
def test_add():
assert add(2, 3) == 5
def add(a, b):
return 5 # íëì½ë© OK
ë ë²ì§¸ í ì¤í¸ â ì¼ë°í ê°ì :
def test_add_different():
assert add(1, 1) == 2 # ì¤í¨: assert 5 == 2
# ì¼ë°íë 구í
def add(a, b):
return a + b
ì ì²´ í ì¤í¸ ì¤í â 모ë íµê³¼ â
ìì 2: AI Red Flag ê°ì§
í ì¤í¸:
def test_login():
assert login("user", "pass") == True
â ï¸ AIê° ìì±í ì½ë (ëì¨):
def login(username, password):
check_admin_privileges(username) # ð¨ ìì² ì í¨
log_access(username) # ð¨ ìì² ì í¨
send_notification(username) # ð¨ ìì² ì í¨
return True
ì¡°ì¹: ì¦ì ì¤ë¨íê³ ì¬ì©ììê² ë³´ê³
â ï¸ AI Red Flag ê°ì§:
íì¬ í
ì¤í¸ë True ë°íë§ ê²ì¦í©ëë¤.
AIê° ìì²íì§ ìì 기ë¥ë¤ì ì¶ê°íë ¤ í©ëë¤:
- ê´ë¦¬ì ê¶í ì²´í¬
- ì ê·¼ ë¡ê¹
- ì림 ì ì¡
GREEN ë¨ê³ììë í
ì¤í¸ íµê³¼ì íìí ìµì ì½ëë§ ìì±í´ì¼ í©ëë¤.
ì§í ë°©ë²ì ì íí´ì£¼ì¸ì:
1. Fake Itì¼ë¡ ë¨ìí True ë°í (ê¶ì¥)
2. ì¶ê° 기ë¥ì í
ì¤í¸ 리ì¤í¸ì ì¶ê°íê³ ìì°¨ ì§í
â ì¬ë°ë¥¸ ì½ë:
def login(username, password):
return True # Fake It OK
ìì¸ ì°¸ì¡°ë REFERENCE.md를 íì¸íì¸ì.