πŸ“ TDD κ°•μ˜ 정리


이번 둜또 λ―Έμ…˜μ„ κ΅¬ν˜„ν•˜λ©΄μ„œ νŽ˜μ–΄μ™€ TDDλ₯Ό μ—°μŠ΅ν•˜λ©΄μ„œ κ°•μ˜μ—μ„œ λ“€μ—ˆλ˜ λͺ¨λ“  이점듀을 λŠλ‚„ 수 μžˆμ—ˆλ‹€.

사싀 μ™„λ²½ν•˜κ²Œ TDDλ₯Ό μ§„ν–‰ν–ˆλ‹€κ³  μžμ‹ ν•  수 μ—†μœΌλ‚˜,
κ°•μ˜ λ‚΄μš©μ—μ„œ λ“€μ—ˆλ˜ 이점듀을 νŽ˜μ–΄μ™€ ν•¨κ»˜ TDDλ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ κ²½ν—˜ν•  수 μžˆμ—ˆλ‹€.

μ—¬κΈ°μ„œλŠ” TDD κ°•μ˜ λ‚΄μš©μ„ λ“€μœΌλ©΄μ„œ μ •λ¦¬ν•œ 것을 쑰금 κ°€κ³΅ν•΄μ„œ 정말 κ°„λ‹¨νžˆ κΈ°λ‘ν•œλ‹€ ✍️

TDD, λ¦¬νŒ©ν† λ§μ΄λž€?

TDD(Test Driven Development) - ν…ŒμŠ€νŠΈ 주도 개발

ν”„λ‘œλ•μ…˜ μ½”λ“œ

ν”„λ‘œκ·Έλž¨ κ΅¬ν˜„μ„ λ‹΄λ‹Ήν•˜λŠ” μ½”λ“œ

ν…ŒμŠ€νŠΈ μ½”λ“œ

ν”„λ‘œλ•μ…˜ μ½”λ“œκ°€ μ •μƒμ μœΌλ‘œ λ™μž‘ν•˜λŠ”μ§€ ν™•μΈν•˜λŠ” μ½”λ“œ

TDDλž€?

μΌλ°˜μ μœΌλ‘œλŠ” ν”„λ‘œλ•μ…˜ λ¨Όμ € κ΅¬ν˜„ ν›„ ν…ŒμŠ€νŠΈ μ˜€λŠ”λ° 이건 ν…ŒμŠ€νŠΈλ₯Ό λ¨Όμ € ν•œ ν›„ ν”„λ‘œλ•μ…˜μ„ κ°œλ°œν•œλ‹€.

TestFirstDevelopment + λ¦¬νŒ©ν† λ§

ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό λ§Œλ“€κ³  ν”„λ‘œλ•μ…˜ ν›„ λ¦¬νŒ©ν† λ§
λ¦¬νŒ©ν† λ§μ€ κΈ°λŠ₯은 μΆ”κ°€ν•˜μ§€ μ•Šμ§€λ§Œ 섀계λ₯Ό λ³€κ²½ν•˜λ©΄μ„œ μœ μ§€λ³΄μˆ˜ 용이, 가독성을 μ±™κΈ΄λ‹€.

섀계λ₯Ό ν•œλ²ˆμ— λͺ°μ•„μ„œ ν•˜λŠ”κ²Œ μ•„λ‹ˆλΌ μž‘μ€ λ‹¨μœ„λ‘œ μžμ£Όν•˜μž.
λ¦¬νŒ©ν† λ§μ€ 섀계일 μˆ˜λ„ 있고 λ‹€μ–‘ν•œλ° κ·Έ 과정을 μžμ£Όν•˜μžλŠ” 것.

TDDλŠ” 뢄석 기술이며, 섀계 κΈ°μˆ μ΄κΈ°λ„ ν•˜λ‹€. - μΌ„νŠΈλ²‘, Test Driven Development by Example 쀑

todo-listλ₯Ό 잘 μž‘μ„±ν•˜λŠ”κ²Œ μš”κ΅¬μ‚¬ν•­ 뢄석이닀.
디버깅 μ‹œκ°„μ΄ 쀄어든닀.

TDD 사이클

  • μ‹€νŒ¨ ν…ŒμŠ€νŠΈ κ΅¬ν˜„
  • ν…ŒμŠ€νŠΈ μ„±κ³΅ν•˜λ„λ‘ ν”„λ‘œλ•μ…˜ κ΅¬ν˜„
  • ν”„λ‘œλ•μ…˜ μ½”λ“œμ™€ ν…ŒμŠ€νŠΈ μ½”λ“œ λ¦¬νŒ©ν† λ§

TDD 원칙

  • 원칙 1 - μ‹€νŒ¨ν•˜λŠ” λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•  λ•ŒκΉŒμ§€ ν”„λ‘œλ•μ…˜ μ½”λ“œλ₯Ό μž‘μ„±ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • 원칙 2 - μ»΄νŒŒμΌμ€ μ‹€νŒ¨ν•˜μ§€ μ•ŠμœΌλ©΄μ„œ 싀행이 μ‹€νŒ¨ν•˜λŠ” μ •λ„λ‘œλ§Œ λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•œλ‹€.
  • 원칙 3 - ν˜„μž¬ μ‹€νŒ¨ν•˜λŠ” ν…ŒμŠ€νŠΈλ₯Ό 톡과할 μ •λ„λ‘œλ§Œ μ‹€μ œ μ½”λ“œλ₯Ό μž‘μ„±ν•œλ‹€.

무쑰건 μ‹€νŒ¨ ν…ŒμŠ€νŠΈλ₯Ό λ³Έ ν›„ ν”„λ‘œμ μ…˜ μ½”λ“œλ₯Ό μž‘μ„±ν•œλ‹€.

TDD 이점

마음의 νŽΈμ•ˆ

μš”κ΅¬μ‚¬ν•­ μˆ˜μ •μ— μ†ŒμŠ€ μ½”λ“œλ₯Ό μˆ˜μ •ν•˜κ³ , λΆˆμ•ˆν•΄ν•˜μ§€ μ•ŠλŠ”λ‹€.

ν•œλ²ˆμ— ν•œκ°€μ§€μ— 집쀑

TDD 없이 κ°œλ°œν•˜λ‹€ 보면 μƒλ‹Ήνžˆ 머리둜 μƒλ‹Ήνžˆ λ§Žμ€ λ‘œμ§μ„ μ§œμ•Όν•˜λŠ”λ° μ²œμž¬κ°œλ°œμžκ°€ μ•„λ‹Œ 이상 μ–΄λ ΅λ‹€.
ν•œλ²ˆμ— ν•œκ°€μ§€λ§Œ 집쀑할 수 μžˆλ‹€.

μ‹€νŒ¨ ν…ŒμŠ€νŠΈ λ§Œλ“€κ³  패슀λ₯Ό ν•˜λ©΄ κ·Έ λ‹€μŒ μž…λ ₯κ³Ό 좜λ ₯에 집쀑, 둜직 κ΅¬ν˜„ 집쀑, ν…ŒμŠ€νŠΈ 톡과 μœ„ν•œ μ–΄λ– ν•œ ν–‰μœ„ ν—ˆμš©.

λŒ€λΆ€λΆ„μ˜ κ°œλ°œμžλ“€μ€ λ™μ‹œμ— 같이 ν•˜λ €κ³  ν•œλ‹€.
λ³΅μž‘ν•œ μš”κ΅¬μ‚¬ν•­μ—μ„œ 섀계λ₯Ό κ³ λ―Όν•˜λ©΄ ꡉμž₯히 μ–΄λ ΅λ‹€.
μ²˜μŒλΆ€ν„° μ™„λ²½ν•œ 섀계λ₯Ό ν•˜λŠ” 것이 μ•„λ‹ˆλΌ, μ μ§„μ μœΌλ‘œ 섀계λ₯Ό κ°œμ„ ν•  수 μžˆλ‹€.

λΉ λ₯Έ ν”Όλ“œλ°±

μ΄ˆλ°˜μ—λŠ” ν”Όλ“œλ°±μ— μ‹œκ°„μ΄ μ’€ κ±Έλ¦¬μ§€λ§Œ 점차 버그λ₯Ό μ°ΎλŠ” μ‹œμ μ΄ 빨라진닀.

μ„œλΉ„μŠ€ μ•ˆμ •μ„±μ΄ 높아짐

버그 λ°œμƒ κ°€λŠ₯성이 쀄고, μ½”λ“œ ν’ˆμ§ˆ ν–₯상

개발자 μ—­λŸ‰ κ°•ν™”

ν•™μŠ΅ 효율 높아짐, 핡심 λΉ„μ§€λ‹ˆμŠ€ 둜직 κ΅¬ν˜„μ— 집쀑

κ΅¬ν˜„μ΄ μ™„μ„±λ˜λ©΄ 심리적 μ•ˆμ •κ°μ΄ 생겨 창의λ ₯이 생김
κ΅¬ν˜„λΆ€ν„°!!!!!
섀계뢀터 ν•˜λ©΄ 압박감 λ•Œλ¬Έμ— 잘 λͺ»ν•¨ 섀계λ₯Ό κ³ λ―Όν•˜μ§€ μ•Šμ•„λ„ λœλ‹€.

μ™„λ²½ν•œ 섀계에 λ§Žμ€ μ‹œκ°„μ„ νˆ¬μžν•˜λ©΄ λ‚˜μ€‘μ— 변경될 λ•Œ μ•„κΉŒμ›Œμ„œ μ§‘μ°©ν•œλ‹€.
μ†Œν”„νŠΈμ›¨μ–΄λŠ” λ§λž‘λ§λž‘~

βž• κΈ°λŠ₯ μΆ”κ°€ μ‚­μ œ λ³€κ²½ λΉΌκ³ λŠ” λ¦¬νŒ©ν† λ§μ΄λ‹€
λ¦¬νŒ©ν† λ§μ€ μƒˆλ‘œμš΄ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€κ°€ μΆ”κ°€λ˜μ§€ μ•Šμ•„μ•Ό ν•œλ‹€.

λ‚΄κ°€ ν•  수 μžˆλŠ” λΆ€λΆ„κΉŒμ§€λ§Œ 섀계 (초반 섀계 쑰금)ν•˜κ³  TDDλ₯Ό ν•΄μ•Όν•œλ‹€.

❓ κΈ°λŠ₯ λ‹¨μœ„ ν•˜λ‚˜ -> test -> κ΅¬ν˜„ / 전체 test -> κ΅¬ν˜„ ?
μ„ ν˜Έν•˜λŠ” 방식을 찾아라 ~

❓ μ„€κ³„λŠ” μ‹€μ œ 클래슀 κ΅¬ν˜„μœΌλ‘œ λ³Ό 수 μžˆλŠ”μ§€? μ•„λ‹ˆλ©΄ λ”°λ‘œ λ¬Έμ„œλ‘œ μ •λ¦¬ν•œ 것을 μ„€κ³„λ‘œ λ³Ό 수 μžˆλŠ”μ§€?
UMLμ΄λΌλŠ” 클래슀 섀계가 μžˆλ‹€.
μ—¬λŸ¬κ°€μ§€ λ‹€μ΄μ–΄κ·Έλž¨μ΄ μžˆλŠ”λ° μš”κ΅¬μ‚¬ν•­ λ³΅μž‘λ„μ— 따라 λ‹€μ΄μ–΄κ·Έλž¨ μžˆλŠ”κ²Œ μ’‹λ‹€.
λ³„λ„μ˜ λ¬Έμ„œ (λ‹€μ΄μ–΄κ·Έλž¨)이 μžˆλŠ”κ²Œ μ’‹λ‹€.

TDD 이게 λ§žλ‚˜? κΈ΄κ°€λ―Όκ°€ν•˜κ² μ§€λ§Œ β€œμ›λž˜ μ²˜μŒμ— κ²½ν—˜ν•˜λŠ” κ±°λ‹€ 이런거~ λ‹Ήμ—°ν•œ κ±°μž„β€

β€œκ³„μ† 도전할 것이 μžˆμ–΄μ•Ό 즐거운 것”

μ–΄λ””μ„œ μ–΄λ–»κ²Œ μ‹œμž‘ν•΄μ•Όν• μ§€ λͺ¨λ₯΄κ² λ‹€

μ΄λ•Œ μš”κ΅¬μ‚¬ν•­ 뢄석 및 섀계λ₯Ό ν•˜λΌ

  • 객체 μΆ”μΆœ
  • 핡심 도메인 μ˜μ—­ 집쀑 섀계

Controller와 ViewλŠ” 아직, 도메인 섀계에 집쀑해라.
도메인에 λŒ€ν•œ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό λ¨Όμ € λ§Œλ“€μ–΄λΌ

μžλ™μ°¨ TDD

ν…ŒμŠ€νŠΈ κ°€λŠ₯ν•œ λΆ€λΆ„ μ°Ύμ•„ λ‹¨μœ„ ν…ŒμŠ€νŠΈ

ν…ŒμŠ€νŠΈν•˜κΈ° μ–΄λ €μš΄ λΆ€λΆ„ μ°Ύμ•„ κ°€λŠ₯ν•œ ꡬ쑰둜 κ°œμ„ 

  • 랜덀 값에 따라 전진

이럴 λ•ŒλŠ” 였브젝트 κ·Έλž˜ν”„μ—μ„œ 의쑴 관계λ₯Ό 가지지 μ•ŠλŠ” λ§ˆμ§€λ§‰ λ…Έλ“œλ₯Ό λ¨Όμ € μ°ΎλŠ”λ‹€.
이게 μ•„λ¬΄λŸ° 의쑴 관계가 μ—†λŠ”β€¦
그럼 이게 ν…ŒμŠ€νŠΈ ν•˜κΈ° 쉽닀면 전체가 ν…ŒμŠ€νŠΈ 쉽닀.
ν…ŒμŠ€νŠΈ μ˜μ—­μ΄ λ§Žμ•„μ§„λ‹€.

λ§ˆμ§€λ§‰ λ…Έλ“œκ°€ ν…ŒμŠ€νŠΈν•˜κΈ° μ‰¬μ›Œμ•Ό ν•œλ‹€.
μ–΄λ €μš°λ©΄ μ „μ²΄μ—μ„œλ„ ν…ŒμŠ€νŠΈ μ˜μ—­μ΄ 쀄어든닀.
ν…ŒμŠ€νŠΈν•˜κΈ° μ–΄λ €μš΄ 의쑴 관계λ₯Ό μƒμœ„λ‘œ λŒμ–΄ 올리자.
κ·Έλ ‡μ§€λ§Œ μ–Έμ  κ°€λŠ” ν…ŒμŠ€νŠΈν•˜κΈ° μ–΄λ €μš΄ μ½”λ“œλŠ” λ‚˜μ˜¬ 수 μžˆλ‹€.

❓ ν…ŒμŠ€νŠΈ μ–΄λ €μš΄ λ…Έλ“œ μ΅œλŒ€ν•œ μƒμœ„λ‘œ? μ•„λ‹ˆλ©΄ 적절 λ‹¨κ³„μ—μ„œ 멈좀?
무쑰건 μ΅œμƒμœ„κ°€ μ•„λ‹Œ μ μ •ν•œ 단계 κΉŒμ§€λ§Œμ΄ μ’‹λ‹€.

TDD κ³Όμ •

TDDλŠ” μž‘μ€ λ‹¨μœ„λ‘œ μ‹œμž‘ν•΄μ•Όμ§€ νŽΈν•˜λ‹€.

컴파일 μ—λŸ¬λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 클래슀, λ©”μ†Œλ“œ λ§Œλ“ λ‹€ .
(λ§₯ κΈ°μ€€ μ˜΅μ…˜ + μ—”ν„°)

ν¬λΉ„λŠ” ν•œ λ©”μ†Œλ“œλ₯Ό μ™„λ²½νžˆ κ΅¬ν˜„ ν–ˆμ„ λ•Œ μ»€λ°‹ν•œλ‹€.
컴파일 μ•ˆλ˜λŠ” 건 μ»€λ°‹ν•˜μ§€ 말자.
μ»€λ°‹ν•˜κ³  λ¦¬νŒ©ν† λ§ μ—°μŠ΅ 해도 됨.
ν…ŒμŠ€νŠΈ μ½”λ“œμ— λŒ€ν•œ λ¦¬νŒ©ν† λ§λ„ν•„μš”ν•˜λ‹€.

μ΄λ•Œ 섀계λ₯Ό 고민해라.
μ—¬κΈ°μ„œ moveκ°€ 랜덀 값에 μ˜μ‘΄ν•˜μ§€ μ•Šλ„λ‘ 랜덀 값을 λ°›λŠ” λ°©μ‹μœΌλ‘œ λ°”κΎΈμž!
사싀 μ΄λ ‡κ²Œ μƒκ°ν•˜λŠ”κ²Œ μ‰½μ§€λŠ” μ•ŠμŒ 그러면 λ¦¬νŒ©ν† λ§ν• κ²Œ μƒκ°λ‚˜κ³  이럼 γ…‹

λ¦¬νŒ©ν† λ§μ€ ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€ 변경이 μ—†λ‹€!

ν•„λ“œλ‘œ μ€‘λ³΅λ˜λŠ”κ±°λŠ” μ΄λ ‡κ²Œ 빼자

❓ ν”„λ‘œλ•μ…˜ μž‘μ„±ν•˜λ©΄μ„œ λ¦¬νŒ©ν† λ§ 보이면 일단 μ°Έκ³  ν…ŒμŠ€νŠΈν•˜κ³  λ¦¬νŒ©ν† λ§?
TDDλŠ” ν•œλ²ˆμ— ν•œκ°€μ§€λ§Œ μ§‘μ€‘μ΄λ‹ˆκΉŒ 보인닀면 λ¬Έμ„œμ— 일단 μ μ–΄λ‘μž!
TDDλŠ” todoλ₯Ό λ§Œλ“€μ–΄λΌ

  • todo
  • done

TDDλ₯Ό ν•˜λ‹€λ³΄λ©΄ 섀계가 μ™„μ „νžˆ λ‹¬λΌμ§ˆ 수 μžˆλ‹€.

(λ©”μ„œλ“œ μΆ”μΆœ 단좕킀 : μ˜΅μ…˜ + μ»€λ§¨λ“œ + m)

μ–΄λ–»κ²Œ ν…ŒμŠ€νŠΈ κ°€λŠ₯ν•˜κ²Œ λ§Œλ“œλ‚˜?
κ³ λ―Όν•˜λ‹€ 보면 κΈ°μ‘΄ μ„€κ³„μ™€λŠ” μ™„μ „νžˆ λ‹€λ₯Έκ²Œ λ‚˜μ˜¬ 수 μžˆλ‹€.
랜덀 배열을 μ „λ‹¬ν• μˆ˜λ„ 있고. . .
μ—¬λŸ¬ 섀계λ₯Ό κ³ λ―Όν•  수 μžˆλ‹€.