Search
πŸ› οΈ

TDD & BDD

ν…ŒμŠ€νŠΈλ₯Ό μ•Œμ•„μ•Ό ν•˜λŠ” 이유

TDDλΌλŠ” 말을 λ“€μ–΄λ΄μ„œ μ μš©ν•΄λ³΄κ³  μ‹Άλ‹€λ©΄? ν΄λ¦°μ½”λ“œκ°€ 무엇인지 기쀀을 μž‘μ•„λ³΄κ³  μ‹Άλ‹€λ©΄? λ¦¬νŒ©ν„°λ§μ€ μ–Έμ œ, μ–΄λ–»κ²Œ ν•˜λ©΄ 쒋을지 μ•Œκ³  μ‹Άλ‹€λ©΄?

이 λ¬Έμ„œλ₯Ό 보고 λ‚˜λ©΄

TDD둜 κ°„λ‹¨ν•œ counter κΈ°λŠ₯을 κ΅¬ν˜„ν•  수 μžˆλ‹€.
ν΄λ¦°μ½”λ“œλ‘œ λ‚˜μ•„κ°€κΈ° μœ„ν•œ λ¦¬νŒ©ν„°λ§ 기쀀점을 슀슀둜 λ§Œλ“€μ–΄ λ‚˜κ°ˆ 수 μžˆλ‹€.

1. TDD(Test Driven Development)

TDDλŠ” ν…ŒμŠ€νŠΈλ₯Ό λ¨Όμ € μž‘μ„±ν•˜κ³  κ·Έ ν›„ μ‹€μ œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€. TDDλŠ” μΌ„νŠΈ λ°±(Kent Beck) 이 개발 ν˜Ήμ€ 널리 μ•Œλ¦° κ°œλ…μž…λ‹ˆλ‹€. ν”νžˆλ“€ κ°œλ°œμ „μ— ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μ§œλŠ”κ²Œ TDD라고만 생각할 수 μžˆλŠ”λ°, 그보닀 본질적인 μ˜λ―ΈλŠ” 문제λ₯Ό μ •μ˜ν•˜κ³ , κ·Έ 해닡을 μ°Ύμ•„κ°€λŠ” κ³Όμ •μ΄λΌλŠ”κ²Œ TDD의 κΈ°λ³Έ μ·¨μ§€μž…λ‹ˆλ‹€. 그리고 ν…ŒμŠ€νŠΈλ„κ΅¬λŠ” κ·Έ 철학을 μ΄ν–‰ν•˜λŠ” λ„κ΅¬μž…λ‹ˆλ‹€. TDDλŠ” 주둜 개발 μ½”λ“œλ₯Ό μœ λ‹›μœΌλ‘œ κ΅¬ν˜„ν•©λ‹ˆλ‹€. μ½”λ“œμ˜ κΈ°λŠ₯을 κ²€μ¦ν•˜λŠ”κ²Œ μ€‘μš”ν•œ λͺ©ν‘œ

μž₯점

1.
ν…ŒμŠ€νŠΈλ₯Ό λ¨Όμ € μž‘μ„±ν•˜κΈ° λ•Œλ¬Έμ— 전체 μ½”λ“œμ—μ„œ μ–Όλ§ˆλ‚˜ λ§Žμ€ μ½”λ“œκ°€ ν…ŒμŠ€νŠΈλ˜λŠ”κ°€λ₯Ό μΈ‘μ •ν•˜λŠ” ν…ŒμŠ€νŠΈ 컀버리지 λΉ„μœ¨μ΄ μžμ—°μŠ€λŸ½κ²Œ 높아진닀.
2.
ν…ŒμŠ€νŠΈ λ˜λŠ” κ²ƒλ§Œ μ½”λ“œλ‘œ μž‘μ„±ν•˜λ―€λ‘œ μ½”λ“œκ°€ λ°©λŒ€ν•΄μ§€μ§€ μ•ŠλŠ”λ‹€.
3.
λ²„κ·Έλ•Œλ¬Έμ— λ°œμƒν•˜λŠ” μ‹œκ°„ λ‚­λΉ„ 쀄여주고, μ½”λ“œκ°€ μ›ν•˜λŠ” λ°”λ₯Ό λͺ…ν™•νžˆ λ‹¬μ„±ν•˜λŠ”μ§€ μ‰½κ²Œ 확인

방법

1.
ν…ŒμŠ€νŠΈλ₯Ό λ¨Όμ € μž‘μ„±ν•œλ‹€. λ§Œμ‘±ν•˜λŠ” μ½”λ“œκ°€ μ—†λŠ” μƒνƒœμ΄λ―€λ‘œ ν…ŒμŠ€νŠΈλŠ” μ‹€νŒ¨ν•¨
2.
ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όν•˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•œλ‹€.
3.
λ¦¬νŒ©ν„°λ§: 쀑볡이 λ³΄μ΄κ±°λ‚˜ 더 κ°œμ„ ν•  방법이 μžˆλ‹€λ©΄ μ½”λ“œλ₯Ό κ°œμ„ ν•œλ‹€.

3λŒ€ 원칙 - λ‘œλ²„νŠΈ C. λ§ˆν‹΄ (λ°₯ 아저씨, 클린 코더)

1.
μ‹€νŒ¨ν•  ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜κΈ° μ „μ—λŠ” μ•„λ¬΄λŸ° ν”„λ‘œλ•μ…˜ μ½”λ“œλ„ μž‘μ„±ν•˜μ§€ μ•ŠλŠ”λ‹€.
2.
μ‹€νŒ¨ν•  ν…ŒμŠ€νŠΈ λ§κ³ λŠ” μž‘μ„±ν•˜μ§€ μ•ŠλŠ”λ‹€.
3.
ν˜„μž¬ μ‹€νŒ¨ν•œ ν…ŒμŠ€νŠΈλ₯Ό λ§Œμ‘±μ‹œν‚€λŠ” μ½”λ“œ μ™Έμ—λŠ” μž‘μ„±ν•˜μ§€ μ•ŠλŠ”λ‹€.

쒋은 ν…ŒμŠ€νŠΈμ˜ 쑰건

β€’
μ‹€ν–‰ 속도가 빨라야 함.
β€’
λ‚΄λΆ€ κ΅¬ν˜„(ν…ŒμŠ€νŠΈν•˜μ§€ μ•ŠλŠ” λΆ€λΆ„)을 λ³€κ²½ν–ˆλ‹€κ³  ν•΄μ„œ ν…ŒμŠ€νŠΈκ°€ μ‹€νŒ¨ν•˜λ©΄ μ•ˆλœλ‹€. μΈν„°νŽ˜μ΄μŠ€(μž…μΆœλ ₯ μœ„μ£Ό)λ₯Ό μ€‘μ‹¬μœΌλ‘œ μž‘μ„±.
β€’
버그λ₯Ό 찾을 수 μžˆμ–΄μ•Ό ν•œλ‹€. λ§Œλ“€μ—ˆλ‹€κ³  끝이 μ•„λ‹˜ ν…ŒμŠ€νŠΈ μ‹œλ‚˜λ¦¬μ˜€λ₯Ό 잘 μ„€μ •ν•΄μ•Ό 함.
β€’
ν…ŒμŠ€νŠΈ 결과에 일관성이 μžˆμ–΄μ•Ό ν•œλ‹€. μ½”λ“œκ°€ λ³€ν•˜μ§€ μ•Šμ•˜λ‹€λ©΄ ν…ŒμŠ€νŠΈ κ²°κ³ΌλŠ” 항상 동일 ν•΄μ•Ό ν•œλ‹€.
β€’
μ˜λ„κ°€ λͺ…ν™•νžˆ λ“œλŸ¬λ‚˜μ•Ό ν•œλ‹€.

2. BDD(Behaviour Driven Development)

BDDμ—μ„œλŠ” ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ μžμ²΄κ°€ μš”κ΅¬μ‚¬μ–‘μ΄ λ˜λ„λ‘ κ°œλ°œν•©λ‹ˆλ‹€. κ·Έλž˜μ„œ μœ μ € μŠ€ν† λ¦¬λ₯Ό λ¨Όμ € μž‘μ„±ν•΄μ•Ό ν•˜λŠ”λ°μš”. TDD에 λŒ€ν•œ 코칭을 ν•˜λ˜ BDD의 아버지 λŒ„ λ…ΈμŠ€(Dan north)λŠ” TDDμ—μ„œ λ‹€μŒκ³Ό 같은 벽에 λ§ˆμ£Όμ³€μ—ˆμŠ΅λ‹ˆλ‹€.
1.
ν”„λ‘œμ„ΈμŠ€μ˜ μ–΄λ””μ„œλΆ€ν„° μ‹œμž‘ν•΄μ•Ό ν•˜λŠ”κ°€(Where to start in the process).
2.
무엇을 ν…ŒμŠ€νŠΈν•˜κ³  또 무엇을 ν•˜μ§€ 말아야 ν•˜λŠ”κ°€(What to test and what not to test).
3.
ν•œ λ²ˆμ— μ–Όλ§ˆλ§ŒνΌ ν…ŒμŠ€νŠΈν•΄μ•Ό ν•˜λŠ”κ°€(How much to test in on go).
4.
ν…ŒμŠ€νŠΈλ₯Ό μ–΄λ–»κ²Œ λͺ…λͺ…ν•΄μ•Ό ν•˜λŠ”κ°€(What to call the tests).
5.
ν…ŒμŠ€νŠΈκ°€ μ‹€νŒ¨ν•˜λŠ” μ΄μœ μ— λŒ€ν•΄ μ–΄λ–»κ²Œ 이해해야 ν•˜λŠ”κ°€(How to understand why a test fails).
이에 λŒ„ λ…ΈμŠ€μ™€ 그의 λ™λ£Œλ“€μ€ ν•˜λ‚˜μ˜ ν…œν”Œλ¦Ώμ„ λ§Œλ“€μ–΄ μ±„νƒν–ˆλŠ”λ° μ•„λž˜μ™€ κ°™μ•˜μŠ΅λ‹ˆλ‹€.
1.
νŠΉμ • 값이 주어지고(Given)
2.
μ–΄λ–€ μ΄λ²€νŠΈκ°€ λ°œμƒν–ˆμ„ λ•Œ(When)
3.
그에 λŒ€ν•œ κ²°κ³Όλ₯Ό 보μž₯ν•΄μ•Ό ν•œλ‹€(Then).
λŒ„ λ…ΈμŠ€λŠ” TDD 코칭을 ν•˜λ˜ μ‹œμ ˆ β€˜Testβ€™λΌλŠ” 단어λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 편이 μ‚¬λžŒλ“€μ΄ 쒀더 TDD의 원리λ₯Ό μ΄ν•΄ν•˜λŠ” 데 도움될 것이라 μƒκ°ν–ˆκ³ , TestλΌλŠ” κ°œλ…λ³΄λ‹€λŠ” β€˜Behaviourβ€™λΌλŠ” κ°œλ…μ„ 썼을 λ•Œ ν…ŒμŠ€νŠΈ μœ λ‹›μ˜ μ˜λ„κ°€ 쒀더 λͺ…ν™•ν•΄μ§„λ‹€λŠ” 것을 κΉ¨λ‹¬μ•˜λ‹€κ³  ν•©λ‹ˆλ‹€. κ·Έλ¦¬κ³ λŠ” λͺ¨λ“  ν…ŒμŠ€νŠΈ λ©”μ†Œλ“œλͺ…에 β€˜should’λ₯Ό λ„£κΈ° μ‹œμž‘ν–ˆμŠ΅λ‹ˆλ‹€.
shouldλŠ” μ˜λ¬Έλ²•μ—μ„œ μ–΄λ–€ ν–‰μœ„λ₯Ό κΈ°λŒ€ν•œλ‹€λŠ” μ‘°λ™μ‚¬μž…λ‹ˆλ‹€. 이λ₯Ό μ‚¬μš©ν•¨μœΌλ‘œμ¨ κ°œλ°œμžλŠ” 더 이상 ν…ŒμŠ€νŠΈ λ©”μ†Œλ“œλ₯Ό μž‘μ„±ν•  λ•Œ μ–΄λ–»κ²Œ λͺ…λͺ…ν•΄μ•Ό ν•˜λŠ”μ§€ ν˜Όλž€μ„ λŠλΌμ§€ μ•Šμ•„λ„ 되고, 이둜써 ν…ŒμŠ€νŠΈ μœ λ‹›μ— κΈ°λŒ€λ˜λŠ” ν–‰μœ„λ“€μ΄ λͺ…ν™•ν•΄μ‘ŒμŠ΅λ‹ˆλ‹€. λ˜ν•œ μž‘μ„±ν•˜λŠ” μ½”λ“œκ°€ κΈ°λŒ€ν•˜λŠ” ν–‰μœ„μ— λ§žμ§€ μ•ŠλŠ”λ‹€λ©΄ μ΄λŠ” λ¦¬νŒ©ν† λ§μ˜ 징쑰가 되기 λ•Œλ¬Έμ— λ¦¬νŒ©ν† λ§μ„ 톡해 λͺ¨λ“  κ΅¬ν˜„ μ½”λ“œμ˜ μ˜λ„ λ˜ν•œ λͺ…ν™•ν•΄μ§‘λ‹ˆλ‹€.
μ•žμ„œ μ§„ν–‰ν•œ 계산기 λ―Έμ…˜μ„ 예둜 λ“€μ–΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

μŠ€ν† λ¦¬

Given (주어진 ν™˜κ²½)

β€’
μœ μ €μ—κ²Œ 계산기 화면이 λ Œλ”λ§ 된 ν›„

When (ν–‰μœ„)

β€’
μœ μ €κ°€ 숫자 4을 ν΄λ¦­ν•œλ‹€.
β€’
μœ μ €κ°€ + λ²„νŠΌμ„ ν΄λ¦­ν•œλ‹€
β€’
μœ μ €κ°€ 2λ₯Ό ν΄λ¦­ν•œλ‹€.
β€’
μœ μ €κ°€ = 을 ν΄λ¦­ν•œλ‹€.

Then (κΈ°λŒ€κ²°κ³Ό)

β€’
계산기 ν™”λ©΄μ—λŠ” 6μ΄λΌλŠ” μˆ«μžκ°€ 보여진닀.
이런 μœ μ €μ˜ ν–‰μœ„λ₯Ό κ·ΈλŒ€λ‘œ ν…ŒμŠ€νŠΈμ½”λ“œλ₯Ό μ΄μš©ν•˜μ—¬ μž¬ν˜„ν•©λ‹ˆλ‹€. 이처럼 BDDλŠ” ν–‰μœ„λ₯Ό μ€‘μ μœΌλ‘œ κΈ°μˆ ν•˜λ©΄μ„œ ν…ŒμŠ€νŠΈλ₯Ό ν•˜λŠ”κ±΄λ°, 사싀상 TDD와 사이클은 λΉ„μŠ·ν•©λ‹ˆλ‹€. κ·Έλž˜μ„œ ν˜ΉμžλŠ” BDDλ₯Ό 잘된 TDD라고 ν‘œν˜„ν•˜λŠ”λ°μš”. κ²°κ΅­ μ€‘μš”ν•œκ±΄ 문제λ₯Ό μ •μ˜ν•˜κ³ , κ·Έ 해닡을 μ°Ύμ•„κ°€λŠ” κ³Όμ • μ΄λΌλŠ”κ²λ‹ˆλ‹€.