[CS] TDD :: ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ

๐Ÿ“Œ TDD (Test Driven Development) :: ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ
→ ๋ฐ˜๋ณต ํ…Œ์ŠคํŠธ๋ฅผ ์ด์šฉํ•œ ์†Œํ”„ํŠธ์›จ์–ด ๋ฐฉ๋ฒ•๋ก 
- ์ž‘์€ ๋‹จ์œ„์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์ด๋ฅผ ํ†ต๊ณผํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณตํ•˜์—ฌ ๊ตฌํ˜„
- ์งง์€ ๊ฐœ๋ฐœ ์ฃผ๊ธฐ์˜ ๋ฐ˜๋ณต์— ์˜์กดํ•˜๋Š” ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์ด๋ฉฐ, ์• ์ž์ผ ๋ฐฉ๋ฒ•๋ก  ์ค‘ ํ•˜๋‚˜์ธ eXtream Programming(XP)์˜ ‘Test-First’ ๊ฐœ๋…์— ๊ธฐ๋ฐ˜์„ ๋‘” ๋‹จ์ˆœํ•œ ์„ค๊ณ„๋ฅผ ์ค‘์š”์‹œํ•จ.
๐Ÿ’ก eXtream Programming(XP)๋ž€?
: ๋ฏธ๋ž˜์— ๋Œ€ํ•œ ์˜ˆ์ธก์„ ์ตœ๋Œ€ํ•œ ํ•˜์ง€ ์•Š๊ณ , ์ง€์†์ ์œผ๋กœ ํ”„๋กœํ† ํƒ€์ž…์„ ์™„์„ฑํ•˜๋Š” ์• ์ž์ผ ๊ธฐ๋ฐฉ๋ฒ•๋ก  ์ค‘ ํ•˜๋‚˜ : ์ถ”๊ฐ€ ์š”๊ตฌ์‚ฌํ•ญ์ด ์ƒ๊ธฐ๋”๋ผ๋„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์Œ
๐Ÿ’ก ๋‹จ์œ„ ํ…Œ์ŠคํŠธ(unit Test)๋ž€?
: ๋ง ๊ทธ๋Œ€๋กœ ํ•œ ๋‹จ์œ„(์ผ๋ฐ˜์ ์œผ๋กœ class)๋งŒ์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ

 

๐Ÿ’ฟ TDD์˜ ๊ฐœ๋ฐœ์ฃผ๊ธฐ

  • RED ๋‹จ๊ณ„ : ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์ž‘์„ฑ
  • GREEN ๋‹จ๊ณ„ : ์„ฑ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •
  • BLUE ๋‹จ๊ณ„ : ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋“ฑ์˜ ๋ฆฌํŒฉํ† ๋ง์„ ์ˆ˜ํ–‰

 

๐Ÿ’ฟ ์ผ๋ฐ˜ ๊ฐœ๋ฐœ ๋ฐฉ์‹๊ณผ TDD ๊ฐœ๋ฐœ ๋ฐฉ์‹์˜ ๋น„๊ต

โœ… ์ผ๋ฐ˜ ๊ฐœ๋ฐœ ๋ฐฉ์‹

: ์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„ → ์„ค๊ณ„ → ๊ฐœ๋ฐœ → ํ…Œ์ŠคํŠธ → ๋ฐฐํฌ ์˜ ๊ฐœ๋ฐœ ์ฃผ๊ธฐ

⇒ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์„ ๋Š๋ฆฌ๊ฒŒ ํ•˜๋Š” ์ž ์žฌ์  ์œ„ํ—˜์ด ์กด์žฌ

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

โœ… TDD ๋ฐฉ์‹

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

→ ์ด๋Ÿฌํ•œ ๋‹จ๊ณ„๊ฐ€ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ง„ํ–‰๋˜๋ฉด์„œ ์ฝ”๋“œ์˜ ๋ฒ„๊ทธ๋Š” ์ค„์–ด๋“ค๊ณ , ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•ด์ง

→ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ์œผ๋กœ ์ธํ•ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์„ค๊ณ„๊ฐ€ ๊ฐœ์„ ๋จ์œผ๋กœ ์žฌ์„ค๊ณ„ ์‹œ๊ฐ„์ด ์ ˆ๊ฐ๋  ์ˆ˜ ์žˆ์Œ

 

๐Ÿ’ฟ TDD์˜ ์žฅ๋‹จ์ 

โœ… ์žฅ์ 

  1. ๋†’์€ ์ฝ”๋“œ ์•ˆ์ •์„ฑ
    : ์งง์€ ์ฃผ๊ธฐ์˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๊ฐœ๋ฐœ - ๋ฆฌํŒฉํ† ๋ง ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜๋ฉฐ ๋Š์ž„ ์—†์ด ๋ณด์™„ํ•˜๊ณ  ์ฒ ์ €ํ•œ ๋ชจ๋“ˆํ™”๋ฅผ ํ†ตํ•ด ์ข…์†์„ฑ๊ณผ ์˜์กด์„ฑ์ด ๋‚ฎ์€ ๋ชจ๋“ˆ๋กœ ์กฐํ•ฉ๋œ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์—ฌ ์ฝ”๋“œ์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Œ
  2. ์žฌ์„ค๊ณ„ ์‹œ๊ฐ„์˜ ๋‹จ์ถ•
    : ์„ค๊ณ„ ๋‹จ๊ณ„์—์„œ ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด์—‡์„ ํ•ด์•ผํ•˜๋Š”์ง€ ์ •์˜ํ•˜๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์–ด ์™„์„ฑ๋„ ๋†’์€ ์„ค๊ณ„๋กœ ์ด์–ด์ง
    → ์ถ”ํ›„ ์„ค๊ณ„๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ์ผ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Œ
  3. ๋””๋ฒ„๊น… ์‹œ๊ฐ„์˜ ๋‹จ์ถ•
    : ๋ชจ๋“ˆ๋ณ„๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ž๋™ํ™”๋ฅผ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์—๋Ÿฌ๊ฐ€ ์ƒ๊ฒผ์„ ๊ฒฝ์šฐ ๋ชจ๋“  ๋ ˆ๋ฒจ์˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ด์•ผํ•จ.
    but, TDD์˜ ๊ฒฝ์šฐ ์ž๋™ํ™”๋œ ๋‹จ์œ„ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ํŠน์ • ๋ฒ„๊ทธ๋ฅผ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Œ
  4. ํ…Œ์ŠคํŠธ ๋ฌธ์„œ์˜ ๋Œ€์ฒด ๊ฐ€๋Šฅ
    : ์ฃผ๋กœ SI ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ๊ณผ์ •์—์„œ ์–ด๋–ค ์š”์†Œ๋“ค์ด ํ…Œ์ŠคํŠธ ๋˜์—ˆ๋Š”์ง€ ํ…Œ์ŠคํŠธ ์ •์˜์„œ๋ฅผ ๋งŒ๋“ฆ. ์ด๊ฒƒ์€ ๋‹จ์ˆœ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฌธ์„œ์— ์ง€๋‚˜์ง€ ์•Š์œผ๋‚˜ TDD๋ฅผ ํ•˜๊ฒŒ๋  ๊ฒฝ์šฐ ํ…Œ์ŠคํŒ…์„ ์ž๋™ํ™” ์‹œํ‚ด๊ณผ ๋™์‹œ์— ๋ณด๋‹ค ์ •ํ™•ํ•œ ํ…Œ์ŠคํŠธ ๊ทผ๊ฑฐ๋ฅผ ์‚ฐ์ถœํ•  ์ˆ˜ ์žˆ์Œ
  5. ์ถ”๊ฐ€ ๊ตฌํ˜„์ด ์šฉ์ดํ•จ
    : ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋œ ์†Œํ”„ํŠธ์›จ์–ด์— ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ ๊ฐ€์žฅ ์šฐ๋ ค๋˜๋Š” ์ ์€ ํ•ด๋‹น ๊ธฐ๋Šฅ์ด ๊ธฐ์กด ์ฝ”๋“œ์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น ์ง€ ์•Œ์ง€ ๋ชปํ•œ๋‹ค๋Š” ๊ฒƒ.
    but, TDD์˜ ๊ฒฝ์šฐ ์ž๋™ํ™”๋œ ์œ ๋‹› ํ…Œ์ŠคํŒ…์„ ์ „์ œํ•˜๋ฏ€๋กœ ํ…Œ์ŠคํŠธ ๊ธฐ๊ฐ„์„ ํš๊ธฐ์ ์œผ๋กœ ๋‹จ์ถ•์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ

โœ… ๋‹จ์  : ์ƒ์‚ฐ์„ฑ ์ €ํ•˜

  • ์ฒ˜์Œ๋ถ€ํ„ฐ 2๊ฐœ์˜ ์ฝ”๋“œ๋ฅผ ์งœ์•ผํ•˜๊ณ , ์ค‘๊ฐ„์ค‘๊ฐ„ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋ฉด์„œ ๊ณ ์ณ๋‚˜๊ฐ€์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ
  • TDD ๋ฐฉ์‹์˜ ๊ฐœ๋ฐœ์‹œ๊ฐ„์€ ์ผ๋ฐ˜์ ์ธ ๊ฐœ๋ฐœ ๋ฐฉ์‹์— ๋น„ํ•ด ๋Œ€๋žต 10~30% ์ •๋„๋กœ ๋Š˜์–ด๋‚จ
  • SI ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์†Œํ”„ํŠธ์›จ์–ด์˜ ํ’ˆ์งˆ๋ณด๋‹ค๋Š” ๋‚ฉ๊ธฐ์ผ ์ค€์ˆ˜๊ฐ€ ํ›จ์”ฌ ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— TDD ๋ฐฉ์‹์„ ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ