TDD

YeJi Kimยท2023๋…„ 4์›” 23์ผ
0

๐Ÿ“ 10๋ถ„ ํ…Œ์ฝ”ํ†ก - ํ”ผ์นด์˜ TDD์™€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ๋ณด๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ด๋‹ค.


TDD(Test Driven Development)๋ž€?

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ๋งŒ๋“ค๊ณ , ์‹ค์ œ ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ๋ฅผ ๋‚˜์ค‘์— ๋งŒ๋“œ๋Š” ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•์„ ๋งํ•œ๋‹ค.

- TDD์˜ ์ฐฝ์‹œ์ž์ธ ์ผ„ํŠธ ๋ฐฑ -
"ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๊ธฐ ์ „์— ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ํ•ด๋ผ!


TDD ์‚ฌ์ดํด

TDD ๊ฐœ๋ฐœ ์‚ฌ์ดํด์„ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ด๋‹ค.

  • Red: ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํŒจํ•œ๋‹ค.
  • Green: ํ…Œ์ŠคํŠธ๋ฅผ ์„ฑ๊ณตํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
  • Refactor: ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ์™€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•œ๋‹ค.

TDD๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

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

TDD๋Š” ์„ค๊ณ„๋ฐฉ๋ฒ•๋ก ์ด๋‹ค?

TDD๋Š” ์„ค๊ณ„๋ฐฉ๋ฒ•๋ก ์ด ์•„๋‹ˆ๋‹ค.

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

TDD๋ฅผ ์‹คํŒจํ•˜๋Š” ์ด์œ ?

TDD๋ฅผ ์‹คํŒจํ•˜๋Š” ์‚ฌ๋žŒ์ด ํ•˜๋Š” ํ…Œ์ŠคํŠธ๋Š”...

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

ํ…Œ์ŠคํŠธ์˜ ๋ฒ”์œ„

  • ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ: ๊ณ ๊ฐ ๋˜๋Š” ๋Œ€๋ฆฌ์ธ์ด ์ •์˜๋˜์–ด์ง„ ๋ชจ๋“  ๋ชฉ์ ์— ๋ถ€ํ•ฉํ•˜๋Š”์ง€ ํ™•์ธํ•ด๋ณด๊ณ ์ž ํ•˜๋Š” ๊ฒ€์‚ฌ
  • ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ: ์ฃผ์–ด์ง„ ๋‹จ์œ„ ์‹œ๊ฐ„ ๋™์•ˆ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌ
  • ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ: ๊ณต๊ฐœ๋œ API์˜ ๊ฐ€์žฅ ๋ฐ”๊นฅ์ชฝ์— ํ•ด๋‹นํ•˜๋Š” ์ฝ”๋“œ ๊ฒ€์‚ฌ (Controller, Security, http ๋“ฑ)
  • ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ: ์—ฌ๋Ÿฌ ์ž‘์—… ๋‹จ์œ„๊ฐ€ ์—ฐ๊ณ„๋œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•œ ์ˆ˜๋‹จ(๊ฐ์ฒด ๊ฐ„, ์„œ๋น„์Šค ๊ฐ„, ์‹œ์Šคํ…œ ๊ฐ„)
  • ๋‹จ์œ„ ํ…Œ์ŠคํŠธ:
    • ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„์˜ ํ…Œ์ŠคํŠธ
    • ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฉ”์„œ๋“œ ๋ ˆ๋ฒจ
    • ๊ฒ€์ฆ์ด ํ•„์š”ํ•œ ์ฝ”๋“œ์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์ ˆ์ฐจ ๋˜๋Š” ํ”„๋กœ์„ธ์Šค
    • Unit Testing์€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ๋ชฉ์  ์ฝ”๋“œ์˜ ์™„์ „์„ฑ์„ ์ž…์ฆ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์—, ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๊ทธ ์ž์ฒด๋งŒ์œผ๋กœ ์ฃผ์š”ํ•œ ๊ฐ€์น˜๊ฐ€ ์žˆ์Œ

๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ชฉ์ 

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

์ข‹์€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ

F.I.R.S.T ๋ฒ•์น™

  • F(Fast): ํ…Œ์ŠคํŠธ๋ฅผ ์ž์ฃผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ…Œ์ŠคํŠธ๋Š” ๋นจ๋ผ์•ผ ํ•œ๋‹ค.
  • I(Independent): ํ…Œ์ŠคํŠธ๋Š” ์„œ๋กœ ์˜์กดํ•˜๋ฉด ์•ˆ๋œ๋‹ค. ํ•˜๋‚˜์˜ ์‹คํŒจ๊ฐ€ ์˜ํ–ฅ์„ ์ฃผ๊ฒŒ ๋˜๊ณ  ์‹คํŒจ์›์ธ์„ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค.
  • R(Repeatable): ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ์— ์ง๋ฉดํ•˜์ง€ ์•Š๋„๋ก, ํ…Œ์ŠคํŠธ์— ์‹คํŒจํ•˜์ง€ ์•Š๋„๋ก ํ…Œ์ŠคํŠธ๋Š” ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค.
  • S(Self-Validating): ํ…Œ์ŠคํŠธ๋Š” ์„ฑ๊ณต ์•„๋‹ˆ๋ฉด ์‹คํŒจ๋ฅผ ๋ฌด์กฐ๊ฑด ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.
  • T(Timely): ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ๋ณด๋‹ค ๋จผ์ € ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.

BDD(Behavior Driven Development)๋ž€?

BDD๋Š” ํ–‰๋™ ์ฃผ๋„ ๊ฐœ๋ฐœ์ด๋‹ค.
BDD๋Š” TDD์—์„œ ํŒŒ์ƒ๋œ ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก ์œผ๋กœ, ๊ฐœ๋ฐœ์ž์™€ ๋น„๊ฐœ๋ฐœ์ž์˜ ํ˜‘์—… ๊ณผ์ •์„ ๋…น์—ฌ๋‚ธ ๋ฐฉ๋ฒ•์ด๋‹ค.
BDD์™€ TDD๋Š” ์ƒํ˜ธ ๋ณด์™„์ ์ธ ๊ด€๊ณ„์ด๋‹ค.
BDD์˜ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋กœ ์‹œ๋‚˜๋ฆฌ์˜ค ๊ฒ€์ฆ์„ ํ•˜๊ณ , ํ•ด๋‹น ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ ๋ชจ๋“ˆ๋“ค์€ TDD์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ๊ฒ€์ฆํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์ข‹๋‹ค.

์‚ฌ์ง„ ์ถœ์ฒ˜: https://mingule.tistory.com/43

TDD์™€ BDD๋ฅผ ๋น„๊ตํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์‚ฌ์ง„ ์ถœ์ฒ˜: https://mingule.tistory.com/43

๊ธฐ์—…๋“ค์˜ TDD์™€ BDD ์ด์•ผ๊ธฐ



[์ฐธ๊ณ ์ž๋ฃŒ]
https://mingule.tistory.com/43
https://www.youtube.com/watch?v=3LMmPXoGI9Q&t=30s&ab_channel=%EC%9A%B0%EC%95%84%ED%95%9C%ED%85%8C%ED%81%AC

profile
์ด์ „์˜ ๊ธฐ๋ก๋“ค ๐Ÿ‘‰ https://blog.naver.com/reviewerkyj

0๊ฐœ์˜ ๋Œ“๊ธ€