๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
IT

TDD(Test-Driven Development) ์†Œ๊ฐœ์™€ ํ™œ์šฉ ๋ฐฉ๋ฒ•

by ๐Ÿ’ฒ๐ŸŽตโœ–๏ธโœ”๏ธโ˜ผ 2024. 2. 13.
728x90

TDD(Test-Driven Development) ์†Œ๊ฐœ์™€ ํ™œ์šฉ ๋ฐฉ๋ฒ•

1. TDD๋ž€?

1.1 TDD์˜ ๊ฐœ๋…

TDD๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก  ์ค‘ ํ•˜๋‚˜๋กœ, ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ํ•ด๋‹น ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผ๋˜๋„๋ก ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฐœ๋ฐœ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์†Œํ”„ํŠธ์›จ์–ด์˜ ํ’ˆ์งˆ ํ–ฅ์ƒ๊ณผ ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด์„ฑ์„ ๋„๋ชจํ•˜๋Š”๋ฐ ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค.

1.2 TDD์˜ ์›์น™

TDD๋Š” ํฌ๊ฒŒ ์„ธ ๊ฐ€์ง€ ๋‹จ๊ณ„๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

  1. Red (๋นจ๊ฐ•): ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. Green (์ดˆ๋ก): ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ๋„๋ก ์ตœ์†Œํ•œ์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  3. Refactor (๋ฆฌํŒฉํ„ฐ): ์ฝ”๋“œ๋ฅผ ์ตœ์ ํ™”ํ•˜๊ณ  ์ค‘๋ณต์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

2. TDD์˜ ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ

2.1 ํ’ˆ์งˆ ํ–ฅ์ƒ

TDD๋Š” ์ดˆ๊ธฐ์— ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ณ  ํ•ด๊ฒฐํ•จ์œผ๋กœ์จ ์†Œํ”„ํŠธ์›จ์–ด์˜ ํ’ˆ์งˆ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์ดˆ๊ธฐ์— ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ณ  ์ˆ˜์ •ํ•จ์œผ๋กœ์จ ๋‚˜์ค‘์— ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

2.2 ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด์„ฑ

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์ž‘์„ฑ๋˜์–ด ์žˆ์œผ๋ฉด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€๋‚˜ ๋ณ€๊ฒฝ์ด ์žˆ์„ ๋•Œ ๊ธฐ์กด ๊ธฐ๋Šฅ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์‰ฝ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. TDD์˜ ํ™œ์šฉ์„ฑ

3.1 ์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ์˜ ์ ์šฉ

์‹ค๋ฌด์—์„œ๋Š” TDD๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์œ ์ง€ํ•˜๊ณ  ํŒ€์› ๊ฐ„์˜ ํ˜‘์—…์„ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๊ธฐ๋Šฅ์˜ ์˜ˆ์ƒ ๋™์ž‘์„ ๋ช…ํ™•ํžˆ ์ •์˜ํ•˜๊ณ  ์ดํ•ด๊ด€๊ณ„์ž ๊ฐ„์˜ ์˜์‚ฌ์†Œํ†ต์„ ์›ํ™œํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

3.2 TDD์˜ ์žฅ์ 

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

4. TDD์˜ ์ ์šฉ๊ณผ ๋‹จ์ 

4.1 TDD์˜ ์ ์šฉ ๋ฐฉ๋ฒ•

  1. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ: ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์ด์ „์— ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. ์ฝ”๋“œ ์ž‘์„ฑ: ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ๋„๋ก ์ตœ์†Œํ•œ์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ฆฌํŒฉํ„ฐ๋ง: ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ณ  ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค.

4.2 TDD์˜ ๋‹จ์ 

  • ํ•™์Šต ๊ณก์„ : ์ดˆ๊ธฐ์—๋Š” ์ ์‘์ด ํ•„์š”ํ•˜๋ฉฐ, ์ „์ฒด ํŒ€์ด ์ต์ˆ™ํ•ด์ง€๊ธฐ๊นŒ์ง€์˜ ์‹œ๊ฐ„์ด ์†Œ์š”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5. ํŒ€ ํ”„๋กœ์ ํŠธ์— TDD ์ ์šฉํ•˜๊ธฐ

5.1 ์ค€๋น„ ์‚ฌํ•ญ

  1. ํ…Œ์ŠคํŠธ ๋„๊ตฌ ์„ ์ •: JUnit, pytest ๋“ฑ์˜ ํ…Œ์ŠคํŠธ ๋„๊ตฌ๋ฅผ ์„ ํƒํ•˜๊ณ  ํ”„๋กœ์ ํŠธ์— ํ†ตํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  2. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ปจ๋ฒค์…˜: ์ผ๊ด€๋œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์Šคํƒ€์ผ์„ ์ •์˜ํ•˜๊ณ  ํŒ€์›๋“ค๊ณผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

5.2 ์‹ค์ฒœ ๋ฐฉ๋ฒ•

  1. ์š”๊ตฌ ์‚ฌํ•ญ ๋ถ„์„: ๊ฐ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋ถ„์„ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. ์ฝ”๋“œ ์ž‘์„ฑ: ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  3. ํ…Œ์ŠคํŠธ ์‹คํ–‰: ์ž‘์„ฑํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๊ธฐ๋Šฅ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ฆฌํŒฉํ„ฐ๋ง: ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค.

6. ๋งˆ๋ฌด๋ฆฌ

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

๋Œ“๊ธ€