๐Ÿ“š Test-Driven Development:By Example ์ฑ… ๋ฆฌ๋ทฐ | 1๋ถ€. ํ™”ํ์˜ˆ์ œ

TDD๋Š” ์ด์ œ๊นŒ์ง€ ๋ฐฐ์› ๋˜ ๊ฐœ๋ฐœ ๊ฐœ๋…๋“ค ์ค‘ ์ด๋ก ์ ์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ ๊ฐ€์žฅ ์–ด๋ ค์šด ๊ฐœ๋…์ด์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ์ฑ…์˜ 1๋ถ€์— ๋‚˜์™€์žˆ๋Š” ํ™”ํ ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ๋”๋“ฌ๋”๋“ฌ ๋”ฐ๋ผ์น˜๋ฉฐ ์ €์ž์˜ ์˜์‹์˜ ํ๋ฆ„๋Œ€๋กœ ์ž‘์„ฑํ•œ ๊ฒƒ ๊ฐ™์€ ์„ค๋ช…๊ธ€์„ ๊ฐ™์ด ์ฝ๊ณ ๋‚˜๋‹ˆ ์กฐ๊ธˆ(์•„์ฃผ ์กฐ๊ธˆ) TDD๊ฐ€ ์–ด๋–ค ๊ฒƒ์ธ์ง€ ์•Œ ๊ฒƒ ๊ฐ™์•˜๋‹ค.

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Test-Driven Development:By Example ์ฑ…์˜ 1๋ถ€ ํ™”ํ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์‹ค์Šตํ•ด๋ณด๊ณ , ๊ทธ ๊ณผ์ •์—์„œ ๋ฐฐ์šด์ ์„ ๊ณต์œ ํ•ด๋ณด๋ คํ•œ๋‹ค.

์‹ค์Šต ๊ฒฐ๊ณผ๋ฌผ

https://github.com/eunbin20/tdd

๋ฐฐ์šด์ 

TDD์˜ ํ•ต์‹ฌ

  1. ํ™•์‹คํ•œ ์‹คํŒจ(๋นจ๊ฐ„๋ถˆ)
  2. ์–ด๋–ป๊ฒŒ๋“ , ์–ด๊ฑฐ์ง€๋กœ ์„ฑ๊ณต์‹œํ‚จ๋‹ค.(์ดˆ๋ก๋ถˆ)
  3. ์ค‘๋ณต์„ ์—†์• ๋ฉฐ ๋ฆฌํŒฉํ† ๋งํ•œ๋‹ค.(๋ฆฌํŒฉํ† ๋ง)

์œ„ ์ž‘์—…์˜ ์ฃผ๊ธฐ๋Š” ์งง์„ ์ˆ˜๋ก ์ข‹๋‹ค. ์œ„ ์ฃผ๊ธฐ๊ฐ€ ๊ธธ๋‹ค๋Š” ๊ฒƒ์€ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋ฅผ ํ•œ ๋ฒˆ์— ๋›ฐ์–ด๋„˜์œผ๋ คํ–ˆ๋‹ค๋Š” ๊ฒƒ. ์ฑ…์—๋Š” ์ด๋Ÿฐ ๋ง์ด ์žˆ์—ˆ๋‹ค.

์ด ๋‹จ๊ณ„๊ฐ€ ๋„ˆ๋ฌด ์ž‘๊ฒŒ ๋Š๊ปด์ง€๋Š”๊ฐ€? ํ•˜์ง€๋งŒ ๊ธฐ์–ตํ•˜๊ธฐ ๋ฐ”๋ž€๋‹ค. TDD์˜ ํ•ต์‹ฌ์€ ์ด๋Ÿฐ ์ž‘์€ ๋‹จ๊ณ„๋ฅผ ๋ฐŸ์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ด๋Ÿฐ ์ž‘์€ ๋‹จ๊ณ„๋ฅผ ๋ฐŸ์„ ๋Šฅ๋ ฅ์„ ๊ฐ–์ถ”์–ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ž‘์€ ๋‹จ๊ณ„๋กœ ์ž‘์—…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ๋ฉด, ์ €์ ˆ๋กœ ์ ์ ˆํ•œ ํฌ๊ธฐ์˜ ๋‹จ๊ณ„๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

TDD์— ์ต์ˆ™์น˜ ์•Š์œผ๋ฉด ์•Š์„์ˆ˜๋ก ์ตœ๋Œ€ํ•œ ์ž‘์€ ๋‹จ๊ณ„์˜ ๊ณผ์ •๋ถ€ํ„ฐ ๋ฐŸ์•„๋‚˜๊ฐ€์•ผ ํ•œ๋‹ค. ์ž‘์€ ๋‹จ๊ณ„๋ฅผ ์ถฉ๋ถ„ํžˆ ์—ฐ์Šตํ•œ ๋’ค์—” ์ ์ ˆํ•œ ํฌ๊ธฐ์˜ ๋‹จ๊ณ„๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

๋นจ -> ์ดˆ -> ๋ฆฌ ์‚ฌ์ดํด์„ ํ•œ ๋ฒˆ ๋Œ๊ณ  ๋‚˜๋ฉด ์ ์–ด๋„ ์ด ๊ธฐ๋Šฅ์€ ์•ž์œผ๋กœ๋„ ์˜์›ํžˆ ์ •์ƒ์ž‘๋™๋˜๋Š” ๊ฒƒ์ด ๋ณด์žฅ๋œ๋‹ค.

๋ณต๋ถ™์˜ ์ค‘์š”์„ฑ

TDD ๋ฐฉ์‹์œผ๋กœ ๊ฐœ๋ฐœํ•˜๋ ค๋ฉด ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ๊ฐ€ ์‰ฌ์›Œ์•ผ ํ•œ๋‹ค. ๊ธฐ์กด์— ์กฐ๊ธˆ์ด๋ผ๋„ ๋น„์Šทํ•˜๊ฒŒ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ณต๋ถ™๋ถ€ํ„ฐ ํ•˜๋Š” ๊ฒƒ์ด ๋งž๋Š” ์ˆœ์„œ์ด๋‹ค. ์กฐ๊ธˆ์ด๋ผ๋„ ๋” ๋น ๋ฅด๊ฒŒ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๋ฉด, ๊ทธ๋ฆฌ๊ณ  ๋” ๋น ๋ฅด๊ฒŒ ๋นจ๊ฐ„๋ถˆ์„ ์ดˆ๋ก๋ถˆ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์ž‘์—…์ด๋ผ๋ฉด, ์ฃ„์ง“๊ธฐ๋ฅผ ๋‘๋ ค์›Œํ•˜์ง€ ๋ง์ž.

ํ…Œ์ŠคํŠธ์ฝ”๋“œ์˜ ๊ฐ€์žฅ ํฐ ํ˜œํƒ์€ ๋ฆฌํŒฉํ† ๋ง์˜ ์•ˆ์ •์„ฑ

์ถฉ๋ถ„ํ•œ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ–์ถฐ์ง€์ง€ ๋ชปํ•œ ๊ณณ์—์„œ ๋ฆฌํŒฉํ† ๋ง์„ ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ, ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์€ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋ผ. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ฒฐ๊ตญ์—๋Š” ๋ฆฌํŒฉํ† ๋งํ•˜๋‹ค ๋ญ”๊ฐ€ ๊นจํŠธ๋ฆด ๊ฒƒ์ด๋‹ค.

์ด ์ฑ…์„ ์ฝ๊ณ ๋‚œ ์ด์ƒ,, ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์—†์ด ๋ฆฌํŒฉํ† ๋ง์„ ์ง„ํ–‰ํ•˜๋Š” ๊ฑด ์™ธ๋‚˜๋ฌด ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•˜๋‹ค๊ณ  ๋Š๊ปด์ง„๋‹ค. ์„ฑ๊ณตํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๊ธด ํ•˜์ง€๋งŒ, ์‹คํŒจํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋” ๋†’๊ณ , ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ถ€๋ถ„์—์„œ์˜ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๊ฐ€ ์šฐ๋ ค๋˜์–ด ์‹ฌ์ ์œผ๋กœ๋„ ๋ถˆ์•ˆํ•˜๋‹ค.

TDD ์ ‘๊ทผ ๋ฐฉ๋ฒ•

  • ๊ฐ€์งœ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ: ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๊ธฐ ์œ„ํ•ด ์ •๋‹ต์ด ์•„๋‹Œ ๊ฐ€์งœ ์ •๋‹ต์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ์‚ผ๊ฐ์ธก๋Ÿ‰๋ฒ•: ๊ฐ’์ด ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ์ด๋ฅผ ์ผ๋ฐ˜ํ™”ํ•˜์—ฌ ์ •๋‹ต์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ๋ช…๋ฐฑํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜๊ธฐ: ์ •๋‹ต์„ ๋ฐ”๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•

๋Š๋‚€์ 

ํ•ญ์ƒ ์—๋Ÿฌ์— ๋Œ๋ ค๋‹ค๋‹ˆ๊ธฐ ๋ฐ”๋นด๋˜ ๊ฒƒ ๊ฐ™์€๋ฐ, ์—๋Ÿฌ๊ฐ€ ๋‚  ์ƒํ™ฉ์„ ์˜๋„์ ์œผ๋กœ ๋งŒ๋“ค๊ณ , ์—๋Ÿฌ๋ฅผ ํŒŒ์•…ํ•˜๊ณ ,test๋ฅผ watch ํ•˜๋ฉด์„œ ํ•œ ๋‹จ๊ณ„ ํ•œ ๋‹จ๊ณ„ ํ•ด๊ฒฐํ•ด๋‚˜๊ฐ€๋Š” ๊ณผ์ •์—์„œ ์ฃผ๋„์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ณ ์žˆ๋‹ค๋Š” ๋Š๋‚Œ์„ ๋ฐ›์•˜๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ฑ…์ด ์ƒ๊ฐ๋ณด๋‹ค ์žฌ๋ฐŒ๋‹ค. ๋˜๊ฒŒ ์–ด๋ ค์šด ์ฑ…์ผ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ์กฐ๊ธˆ ์›ƒ๊ธด ์‹œ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž๋ถ„๊ณผ ํŽ˜์–ดํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋Š” ๊ธฐ๋ถ„์ด์—ˆ๋‹ค.