Skip to content

Latest commit

Β 

History

History
134 lines (78 loc) Β· 10.9 KB

TDD (Test Driven Development).md

File metadata and controls

134 lines (78 loc) Β· 10.9 KB

TDD (Test Driven Development)

Aseembled by GimunLee (2020-01-13)


Introduction

Microsoft, IBM

TDDλ₯Ό λ„μž…ν•œ μ†Œν”„νŠΈμ›¨μ–΄λŠ” μ•½ 15~35% μ •λ„μ˜ κ°œλ°œμ‹œκ°„ 증가, κ²°ν•¨μœ¨(버그)은 μ•½ 40~90% 정도 μ€„μ–΄λ“€μ—ˆλ‹€.

ν…ŒμŠ€νŠΈλ₯Ό ν†΅ν•œ κ³ ν’ˆμ§ˆ ν™•λ³΄λŠ” μ†Œν”„νŠΈμ›¨μ–΄ κ°œλ°œμ— μžˆμ–΄ 맀우 μ€‘μš”ν•œ ν™œλ™μž…λ‹ˆλ‹€. 특히, λ‹€λ₯Έ ν…ŒμŠ€νŠΈμ— λΉ„ν•΄ 적은 λΉ„μš©μœΌλ‘œ μˆ˜ν–‰ν•  수 μžˆλŠ” λ‹¨μœ„ ν…ŒμŠ€νŠΈλŠ” μ†Œν”„νŠΈμ›¨μ–΄μ˜ ν’ˆμ§ˆμ„ ν–₯μƒμ‹œν‚€λŠ” 데 μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€. 개발 μ΄ˆκΈ°λΆ€ν„° μ μš©ν•˜μ—¬ λΉ λ₯΄κ²Œ μˆ˜ν–‰ κ²°κ³Όλ₯Ό ν™•μΈν•¨μœΌλ‘œμ¨ 개발자의 생산성을 λ†’μ΄λŠ” 데 효과적이기 λ•Œλ¬Έμž…λ‹ˆλ‹€. ν…ŒμŠ€νŠΈ 주도 개발(Test Driven Development) 방식도 λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό ν™œμš©ν•˜μ—¬ 보닀 높은 μˆ˜μ€€μ˜ μ½”λ“œ ν’ˆμ§ˆμ„ ν™•λ³΄ν•˜λ €λŠ” 개발 방법 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€.


TDD (Test Driven Development) λž€?

TDDλŠ” 반볡 ν…ŒμŠ€νŠΈλ₯Ό μ΄μš©ν•œ μ†Œν”„νŠΈμ›¨μ–΄ κ°œλ°œλ²•μœΌλ‘œ, μž‘μ€ λ‹¨μœ„μ˜ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό μž‘μ„±ν•˜κ³  이λ₯Ό ν†΅κ³Όν•˜λŠ” μ½”λ“œλ₯Ό μΆ”κ°€ν•˜λŠ” 단계λ₯Ό λ°˜λ³΅ν•˜μ—¬ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό κ΅¬ν˜„ν•©λ‹ˆλ‹€. TDD의 핡심적인 λͺ©ν‘œλŠ” μž‘λ™ν•˜λŠ” κΉ”λ”ν•œ μ½”λ“œ(Clean code that works) μž…λ‹ˆλ‹€. TDD의 μ‚¬μš© 이점에 λŒ€ν•΄ μ•ŒκΈ° μœ„ν•΄, 일반적인 개발 λ°©λ²•μ˜ λ¬Έμ œμ μ„ μ‚΄νŽ΄λ³΄λ©΄μ„œ μžμ„Ένžˆ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

일반적인 개발 방법

문제점

  • μ†ŒλΉ„μžμ˜ μš”κ΅¬μ‚¬ν•­μ΄ μ²˜μŒλΆ€ν„° λͺ…ν™•ν•˜μ§€ μ•Šμ„ 수 μžˆλ‹€. λ”°λΌμ„œ μ²˜μŒλΆ€ν„° μ™„λ²½ν•œ μ„€κ³„λŠ” μ–΄λ ΅λ‹€.
  • 섀계 β†’ κ΅¬ν˜„ 을 μ§„ν–‰ν•˜λ©΄μ„œ μ‹€μ œ μ†ŒμŠ€μ½”λ“œμ™€ 섀계 κ°„ κ°ˆλ“±μ΄ 생길 수 μžˆλ‹€.
  • ν•œ 곳의 μˆ˜μ •μ΄ λ‹€λ₯Έ 곳에 λ―ΈμΉ˜λŠ” 영ν–₯을 확인 및 λ‹€λ₯Έ κΈ°λŠ₯의 정상 λ™μž‘μ„ 보μž₯ν•˜κΈ° μ–΄λ ΅λ‹€.

일반적인 개발 방법은 μš”κ΅¬ 사항을 기반으둜 λͺ¨λ“ˆ 등을 μ„€κ³„ν•˜μ—¬ κ°œλ°œν•©λ‹ˆλ‹€. κ·Έ 뒀에 λͺ¨λ“ˆμ΄ μ œλŒ€λ‘œ κ°œλ°œλ˜μ—ˆλŠ”μ§€ ν…ŒμŠ€νŠΈλ₯Ό ν•˜κ²Œ λ©λ‹ˆλ‹€. 개발된 μ½”λ“œλ₯Ό ν…ŒμŠ€νŠΈν•˜κΈ° μœ„ν•΄μ„œλŠ” μ˜ˆμƒλ˜λŠ” κΈ°λŒ“κ°’κ³Ό 비ꡐ ν•˜κ±°λ‚˜ ν…ŒμŠ€νŠΈ λͺ¨λ“ˆμ„ μΆ”κ°€λ‘œ κ°œλ°œν•˜μ—¬ ν…ŒμŠ€νŠΈ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ TTDλ₯Ό 기반으둜 κ°œλ°œμ„ ν•˜λŠ” κ³Όμ •μ—μ„œλŠ” λ‹€μŒ 과정을 κ±°μ³μ„œ κ°œλ°œν•˜κ²Œ λ©λ‹ˆλ‹€.

TDD μ‚¬μš©ν•˜κΈ°

TDDλ₯Ό 기반으둜 κ°œλ°œν•  경우, κ°€μž₯ λ¨Όμ € λͺ¨λ“  κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λŠ” 것이 μ•„λ‹ˆλΌ μ΅œμ†Œν•œμ˜ κΈ°λŠ₯을 λ¨Όμ € κ΅¬ν˜„ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ ν•¨μˆ˜μ˜ ν”„λ‘œν† νƒ€μž… ν˜•νƒœ λ“±μœΌλ‘œ κ΅¬ν˜„ν•©λ‹ˆλ‹€. 그리고 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€κ°€ μ‹€ν–‰λ˜λ„λ‘ κ΅¬ν˜„ ν›„ μ‹€ν–‰ν•©λ‹ˆλ‹€. κΈ°λŠ₯이 κ΅¬ν˜„λ˜μ§€ μ•Šμ•˜κΈ°μ— ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό μ‹€ν–‰ν•˜λ©΄ λ‹Ήμ—°νžˆ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λŠ” μ‹€νŒ¨λ˜κ²Œ λ©λ‹ˆλ‹€. λ‹€μŒμœΌλ‘œ μ‹€μ œ κΈ°λŠ₯을 κ΅¬ν˜„ ν›„ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€κ°€ 톡과 λ˜λŠ” 것을 ν™•μΈν•©λ‹ˆλ‹€.

TDD κ°œλ°œλ°©λ²•μ—μ„œ κ°€μž₯ μ€‘μš”ν•œ 것이 κΈ°λŠ₯ κ΅¬ν˜„μ„ 제일 λ§ˆμ§€λ§‰μ— ν•œλ‹€λŠ” μ μž…λ‹ˆλ‹€. κΈ°λŠ₯ κ΅¬ν˜„μ„ 제일 λ§ˆμ§€λ§‰μ— ν•˜μ—¬ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€κ°€ 톡과 λ˜λŠ” 것을 ν™•μΈν•˜λ©΄ κ°œλ°œμ— ν₯λ―Έλ₯Ό μœ μ§€ μ‹œν‚¬ 수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. κ·Έ 뒀에 ν•„μš”ν•˜λ©΄ 개발된 μ½”λ“œλ₯Ό 기반으둜 λ¦¬νŽ™ν† λ§(Refactoring) 과정을 μ§„ν–‰ν•©λ‹ˆλ‹€.

μΆ”κ°€λ‘œ Robert C. Martin 이 μ œμ‹œν•œ TDD μ›μΉ™μž…λ‹ˆλ‹€.

  • μ‹€νŒ¨ν•˜λŠ” ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜κΈ° μ „μ—λŠ” μ ˆλŒ€λ‘œ μ†ŒμŠ€μ½”λ“œλ₯Ό μž‘μ„±ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • μ‹€νŒ¨ν•˜λŠ” ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό ν•œ λ²ˆμ— ν•˜λ‚˜ 이상 μž‘μ„±ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • ν˜„μž¬ μ‹€νŒ¨ν•˜κ³  μžˆλŠ” ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όν•˜κΈ°μ— μΆ©λΆ„ν•œ 정도λ₯Ό λ„˜μ–΄μ„œλŠ” μ†ŒμŠ€μ½”λ“œλ₯Ό μž‘μ„±ν•˜μ§€ μ•ŠλŠ”λ‹€.

이 μ„Έ 가지 원칙은 λ‚˜λ…Έ μ£ΌκΈ° 라 λΆˆλ¦¬λŠ”λ°, κ·Έ μ΄μœ λŠ” μ½”λ“œμ˜ ν–‰ λ‹¨μœ„ 개발 및 ν…ŒμŠ€νŠΈκ°€ 이루어지기 λ•Œλ¬Έμž…λ‹ˆλ‹€. μ΄λ•Œ, 초 λ‹¨μœ„μ˜ 반볡적인 ν…ŒμŠ€νŠΈ μ£ΌκΈ°κ°€ λ°œμƒν•˜κ²Œ λ˜λŠ”λ° 이 μ£ΌκΈ°λ₯Ό TDD의 λ‚˜λ…Έ μ£ΌκΈ° 라 λΆ€λ¦…λ‹ˆλ‹€. Kent Beck κ³Ό Robert C. Martin 은 ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„±μ— μžˆμ–΄ λ‹€μ–‘ν•œ μŠ€νƒ€μΌμ΄ μžˆμ§€λ§Œ, μœ„μ™€ 같은 μ„Έ 가지 원칙을 λ²—μ–΄λ‚œ 개발 μŠ€νƒ€μΌμ„ κΈˆκΈ°μ‹œν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.


RGR μ£ΌκΈ°

초 λ‹¨μœ„μ— λ°œμƒλ˜λŠ” λ‚˜λ…Έ μ£ΌκΈ° κ°€ μžˆλ‹€λ©΄ λΆ„ λ‹¨μœ„μ— λ°œμƒλ˜λŠ” RGR μ£ΌκΈ° κ°€ μžˆμŠ΅λ‹ˆλ‹€. RGR μ£ΌκΈ°λŠ” λ‹¨μœ„ ν…ŒμŠ€νŠΈ(Unit Test) λ§ˆλ‹€ λ°œμƒλ˜λ©°, RGR 주기의 κ·œμΉ™μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  1. RED : μ‹€νŒ¨ν•˜λŠ” ν…ŒμŠ€νŠΈ μ½”λ“œ λ§Œλ“€κΈ°
  2. GREEN : ν…ŒμŠ€νŠΈκ°€ ν†΅κ³Όν•˜λ„λ‘ κ°€λŠ₯ν•œ 빨리 μ½”λ“œ μž‘μ„±ν•˜κΈ°
  3. REFACTOR : ν†΅κ³Όλœ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό λ¦¬νŒ©ν† λ§ν•˜κΈ°

μ„Έ 단계 쀑 RED , GREEN 은 κ°€λŠ₯ν•œ 빨리 μ™„λ£Œν•˜λŠ” 것이 μ›μΉ™μž…λ‹ˆλ‹€. κ·Έλž˜μ„œ TDD λ°©λ²•λ‘ μœΌλ‘œ κ°œλ°œμ„ ν•  λ•ŒλŠ” μ΅œμ†Œν•œμ˜ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ²Œ λ©λ‹ˆλ‹€. RED μ—μ„œ μ‹€νŒ¨ν•˜λŠ” ν…ŒμŠ€νŠΈ μ½”λ“œλŠ” λ‚΄κ°€ ν’€κ³ μž ν•˜λŠ” 문제λ₯Ό μ½”λ“œ ν˜•νƒœλ‘œ ν‘œν˜„ν•œ κ²°κ³Όλ¬Ό μž…λ‹ˆλ‹€. κ²½μš°μ— λ”°λΌμ„œ μΆ”κ°€ν•˜κ³ μž ν•˜λŠ” κΈ°λŠ₯이 될 μˆ˜λ„ 있고, 고치고자 ν•˜λŠ” 버그가 될 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ μ‹€νŒ¨ν•˜λŠ” ν…ŒμŠ€νŠΈ μ½”λ“œλŠ” 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 데 μ‹€νŒ¨ν•œ 것이 μ•„λ‹Œ, 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ 첫 번째 κ³Όμ •μœΌλ‘œ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 그리고 κ°€λŠ₯ν•œ 빨리 μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” κ³Όμ •μ—μ„œλŠ” μ½”λ“œ 쀑볡 λ“± μ—¬λŸ¬ λΆ€μž‘μš©μ΄ λ°œμƒν•  수 μžˆλŠ”λ°, 이것은 REFACTOR κ³Όμ •μ—μ„œ ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


Unit Test

μ•žμ„œ TDD의 주기듀은 μ–΄λ””κΉŒμ§€λ‚˜ TDDκ°€ Clean code that works을 지ν–₯ν•˜κ³  있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. Clean code that works λ₯Ό μ‹€ν˜„ν•˜κΈ° μœ„ν•΄μ„  λ¦¬νŒ©ν† λ§ 과정은 ν•„μ—°μ μž…λ‹ˆλ‹€. λ¦¬νŽ™ν† λ§μ€ RGR μ£ΌκΈ°μ—μ„œ λ‹¨μœ„ ν…ŒμŠ€νŠΈ λ‹¨μœ„λ‘œ 이루어지고 μžˆλŠ”λ° 이 λ•Œλ¬Έμ— λ‹¨μœ„ ν…ŒμŠ€νŠΈμ™€ TDDλŠ” λ°€μ ‘ν•œ 관계λ₯Ό λ§Ίκ³  μžˆμŠ΅λ‹ˆλ‹€. λ‹€λ§Œ 주객이 λ°”λ€Œλ©΄ μ•ˆ λ©λ‹ˆλ‹€. 이 점은 λ§Žμ€ κ°œλ°œμžκ°€ μ˜€ν•΄ν•˜λŠ” 뢀뢄인데 λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό ν•˜λŠ” μ΄μœ λŠ” TDDκ°€ 지ν–₯ν•˜λŠ” Clean code that works을 μ‹€ν˜„ν•˜κΈ° μœ„ν•œ μΌμ’…μ˜ 방법이지 λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό ν•˜κΈ° μœ„ν•΄ TDDλ₯Ό ν•œλ‹€λŠ” 건 말은 λͺ¨μˆœμ΄κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

  • TDD : 섀계 ν”„λ‘œμ„ΈμŠ€
  • λ‹¨μœ„ ν…ŒμŠ€νŠΈ : μ •λ°€ν•œ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€

일반적으둜 λ‹¨μœ„ ν…ŒμŠ€νŠΈλŠ” 객체 λ˜λŠ” λͺ¨λ“ˆμ˜ ν•¨μˆ˜(μžλ°”μ—μ„œλŠ” 클래슀)에 μ΄ˆμ μ„ 맞μΆ₯λ‹ˆλ‹€. ν…ŒμŠ€νŠΈκ°€ 단일 κΈ°λŠ₯에 ν•œμ •λ˜λ„λ‘ ν•¨μœΌλ‘œμ¨ ν…ŒμŠ€νŠΈλŠ” κ°„λ‹¨ν•˜κ³  μ‹ μ†ν•˜κ²Œ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€. 특히 λ‹¨μœ„ ν…ŒμŠ€νŠΈλŠ” μ½”λ“œλ₯Ό λ³€κ²½ν•΄μ•Ό ν•˜λŠ” 경우 μœ μš©ν•©λ‹ˆλ‹€. μ½”λ“œκ°€ μž‘λ™ν•˜λŠ”μ§€ ν™•μΈν•˜λŠ” λ‹¨μœ„ ν…ŒμŠ€νŠΈκ°€ 있으면 μ½”λ“œλ₯Ό μ•ˆμ „ν•˜κ²Œ λ³€κ²½ν•  수 있고 μ‹€ν–‰ μ‹œ λ‹€λ₯Έ λΆ€λΆ„μ—μ„œ ν”„λ‘œκ·Έλž¨μ΄ μ€‘λ‹¨λ˜μ§€ μ•ŠλŠ”λ‹€λŠ” 점을 ν™•μ‹ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


λ‹¨μœ„ ν…ŒμŠ€νŠΈμ˜ FIRST κ·œμΉ™

λ‹€μŒκ³Ό 같이 Robert C. Matin 은 λ‹¨μœ„ ν…ŒμŠ€νŠΈμ˜ κ·œμΉ™μ„ μ •μ˜ν–ˆμŠ΅λ‹ˆλ‹€.

  • Fast : λ‹¨μœ„ ν…ŒμŠ€νŠΈλŠ” 빨라야 ν•œλ‹€.
  • Independent : λ‹¨μœ„ ν…ŒμŠ€νŠΈλŠ” λ…λ¦½μ μœΌλ‘œ μž‘μ„±ν•œλ‹€.
  • Repeatable : λ‹¨μœ„ ν…ŒμŠ€νŠΈλŠ” μ–΄λŠ ν™˜κ²½μ—μ„œλ“  반볡 κ°€λŠ₯ν•΄μ•Ό ν•œλ‹€.
  • Selef-Validating : λ‹¨μœ„ ν…ŒμŠ€νŠΈλŠ” μžμ²΄κ²€μ¦μ΄ λ˜μ–΄μ•Ό ν•œλ‹€.
  • Timely : λ‹¨μœ„ ν…ŒμŠ€νŠΈλŠ” μ‹€μ œ μ½”λ“œλ₯Ό μž‘μ„± 전에 μž‘μ„±ν•΄μ•Ό ν•œλ‹€.

Fast

ν…ŒμŠ€νŠΈλŠ” 빨라야 ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œ λΉ λ¦„μ˜ 기쀀은 밀리 초(ms)μž…λ‹ˆλ‹€. λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό ν…ŒμŠ€νŠΈν•˜λŠ” 데 μžˆμ–΄ μ‹€ν–‰ μ‹œκ°„μ΄ 0.5 초 λ˜λŠ” 0.25 μ΄ˆκ°€ κ±Έλ¦¬λŠ” ν…ŒμŠ€νŠΈλŠ” λΉ λ₯Έ ν…ŒμŠ€νŠΈκ°€ μ•„λ‹™λ‹ˆλ‹€.

ν•˜λ‚˜μ˜ ν”„λ‘œμ νŠΈμ—μ„œ μ κ²ŒλŠ” λͺ‡λ°± κ°œμ—μ„œ λ§Žκ²ŒλŠ” 수천 개의 ν…ŒμŠ€νŠΈλ₯Ό ν•  수 μžˆμœΌλ―€λ‘œ ν…ŒμŠ€νŠΈμ˜ μ‹€ν–‰ μ‹œκ°„μ€ 빨라야 ν•©λ‹ˆλ‹€. λ§Œμ•½ ν…ŒμŠ€νŠΈκ°€ λŠλ¦¬λ‹€λ©΄ κ°œλ°œμžλŠ” ν…ŒμŠ€νŠΈλ₯Ό μ£Όμ €ν•˜κ²Œ 되고 자주 κ²€μ¦ν•˜μ§€ μ•Šμ€ μ†ŒμŠ€μ½”λ“œλŠ” 그만큼 버그가 λ°œμƒν•  ν™•λ₯ μ΄ λ†’μ•„μ§‘λ‹ˆλ‹€.

Independent

ν…ŒμŠ€νŠΈμ— μ‚¬μš©λœ 데이터듀은 μ„œλ‘œ μ˜μ‘΄ν•˜λ©΄ μ•ˆ λ©λ‹ˆλ‹€. ν…ŒμŠ€νŠΈμ— ν•„μš”ν•œ λ°μ΄ν„°λŠ” ν…ŒμŠ€νŠΈ λ‚΄λΆ€μ—μ„œ λ…λ¦½μ μœΌλ‘œ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. λ§Œμ•½ 데이터가 μ„œλ‘œμ—κ²Œ μ˜μ‘΄ν•˜λ©΄ ν…ŒμŠ€νŠΈ ν•˜λ‚˜κ°€ μ‹€νŒ¨ν•  λ•Œ λ‚˜λ¨Έμ§€λ„ μž‡λ‹¬μ•„ μ‹€νŒ¨ν•˜λ―€λ‘œ 원인을 μ§„λ‹¨ν•˜κΈ° μ–΄λ €μ›Œμ§€κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. λ•Œλ‘  λ°μ΄ν„°μ˜ 쑴재 μ—¬λΆ€λ₯Ό μ°ΎλŠ” ν…ŒμŠ€νŠΈκ°€ μžˆλŠ” κ²½μš°μ—” ν•΄λ‹Ή λ°μ΄ν„°λŠ” ν…ŒμŠ€νŠΈ λ‚΄λΆ€μ—μ„œ μƒμ„±λ˜μ–΄μ•Ό ν•˜λ©° λ‚˜μ€‘μ— ν…ŒμŠ€νŠΈμ— 영ν–₯을 λ―ΈμΉ˜μ§€ μ•Šλ„λ‘ μ œκ±°ν•΄μ•Ό ν•©λ‹ˆλ‹€.

Repeatable

ν…ŒμŠ€νŠΈλŠ” μ–΄λŠ ν™˜κ²½μ—μ„œλ“  반볡적으둜 ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œ ν™˜κ²½μ€ λ„€νŠΈμ›Œν¬ λ‚˜ λ°μ΄ν„°λ² μ΄μŠ€μ— μ˜μ‘΄ν•˜μ§€ μ•ŠλŠ” ν™˜κ²½μ„ λœ»ν•©λ‹ˆλ‹€. 결둠적으둜 인터넷이 λ˜λ“  μ•ˆ λ˜λ“  λ°μ΄ν„°λ² μ΄μŠ€μ— μ ‘μ†ν•˜λ“  μ•ˆ ν•˜λ“  μ–Έμ œ μ–΄λ””μ„œλ‚˜ ν…ŒμŠ€νŠΈλ₯Ό ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. ν™˜κ²½μ— μ˜μ‘΄ν•˜μ§€ μ•ŠλŠ” ν…ŒμŠ€νŠΈκ°€ μ‹€νŒ¨ν•  수 μžˆλŠ” μœ μΌν•œ μ΄μœ λŠ” μ˜€λ‘œμ§€ ν…ŒμŠ€νŠΈν•  클래슀 λ˜λŠ” λ©”μ†Œλ“œκ°€ μ œλŒ€λ‘œ μž‘λ™ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

Selef-Validating

ν…ŒμŠ€νŠΈλŠ” 자체 검증이 λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. ν…ŒμŠ€νŠΈμ˜ 검증은 μˆ˜μž‘μ—…μ΄ μ•„λ‹Œ μžλ™ν™”κ°€ λ˜μ–΄μ•Ό ν•˜λŠ”λ° ν…ŒμŠ€νŠΈκ°€ 싀행될 λ•Œλ§ˆλ‹€ λ©”μ„œλ“œ 좜λ ₯이 μ˜¬λ°”λ₯Έμ§€λ₯Ό ν™•μΈν•˜λŠ” 것은 κ°œλ°œμžκ°€ κ²°μ •ν•΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€. 이 λ•Œλ¬Έμ— μžλ°” ν™˜κ²½μ—μ„œλŠ” ν…ŒμŠ€νŠΈμ— λŒ€ν•œ 검증을 μ§€μ›ν•˜λŠ” JUnit 을 μ‚¬μš©ν•˜μ—¬ ν…ŒμŠ€νŠΈμ˜ 톡과 μ—¬λΆ€λ₯Ό κ²°μ •ν•©λ‹ˆλ‹€.

Timely

λ‹¨μœ„ ν…ŒμŠ€νŠΈλŠ” μ‹€μ œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κΈ° 전에 μž‘μ„±ν•΄μ•Όλ©λ‹ˆλ‹€. 이 κ·œμΉ™μ€ TDDλ₯Ό μˆ˜ν–‰ν•˜λŠ” 경우 λ°˜λ“œμ‹œ 따라야 ν•˜λŠ” κ·œμΉ™μž…λ‹ˆλ‹€.


TDD의 μž₯점과 ν•œκ³„

μž₯점

  • 개발의 λ°©ν–₯을 μžƒμ§€ μ•Šκ²Œ μœ μ§€ν•΄μ€€λ‹€.
  • μž‘μ—…κ³Ό λ™μ‹œμ— ν…ŒμŠ€νŠΈλ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ μ‹€μ‹œκ°„μœΌλ‘œ 였λ₯˜ νŒŒμ•…μ΄ κ°€λŠ₯ν•˜λ‹€.
  • μž¬μ„€κ³„ μ‹œκ°„μ„ λ‹¨μΆ•ν•˜μ—¬ 높은 ν’ˆμ§ˆμ˜ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό 보μž₯ν•œλ‹€.
  • 짧은 개발 μ£ΌκΈ°λ₯Ό 톡해 진행 상황 νŒŒμ•…κ³Ό 고객의 μΆ”κ°€ μš”κ΅¬μ‚¬ν•­ 반영이 비ꡐ적 쉽닀.
  • μžλ™ν™”λœ λ‹¨μœ„ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό κ°€μ§€κ²Œ λœλ‹€.

ν•œκ³„

  • λ™μ‹œμ„±μ΄ κ±Έλ €μžˆλŠ” μ½”λ“œμ— λŒ€ν•œ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ μž‘μ„±μ„ ν•  λ•Œ, ν…ŒμŠ€νŠΈ 자체λ₯Ό λ¬΄κ²°μ„±μžˆκ²Œ μœ μ§€ν•˜κΈ°κ°€ μ–΄λ ΅μŠ΅λ‹ˆλ‹€.
  • κΈ°μ‘΄ 개발 ν”„λ‘œμ„ΈμŠ€μ— ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€ 섀계가 μΆ”κ°€λ˜λ―€λ‘œ 생산 λΉ„μš© μ¦κ°€ν•œλ‹€.
  • ν…ŒμŠ€νŠΈμ˜ λ°©ν–₯μ„±, ν”„λ‘œμ νŠΈ 성격에 λ”°λ₯Έ ν…ŒμŠ€νŠΈ ν”„λ ˆμž„μ›Œν¬ 선택 λ“± μΆ”κ°€λ‘œ κ³ λ €ν•  λΆ€λΆ„μ˜ μ¦κ°€ν•œλ‹€.

Reference & Additional Resources