๐ก TDD๋?
TDD(Test-Driven Development)๋ ํ
์คํธ ์ฃผ๋ ๊ฐ๋ฐ์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ฉฐ,
“ํ
์คํธ ์ฝ๋๋ฅผ ๋จผ์ ์์ฑํ๊ณ , ๊ทธ ํ
์คํธ๋ฅผ ํต๊ณผํ๋ ์ค์ ์ฝ๋๋ฅผ ๋์ค์ ์์ฑํ๋ ๊ฐ๋ฐ ๋ฐฉ์”์ ๋งํฉ๋๋ค.
์ ํต์ ์ธ ๊ฐ๋ฐ์ ๊ธฐ๋ฅ์ ๋จผ์ ๋ง๋ค๊ณ ํ
์คํธ๋ ๋ง์ง๋ง์ ํ๊ฑฐ๋, ์์ ํ์ง ์๋ ๊ฒฝ์ฐ๋ ๋ง์ฃ .
ํ์ง๋ง TDD๋ ์์ ํ ๊ทธ ๋ฐ๋์
๋๋ค.
๐ TDD์ ๊ฐ๋ฐ ํ๋ฆ
TDD๋ ๋ณดํต ๋ค์์ 3๋จ๊ณ๋ฅผ ๋ฐ๋ณตํ๋ฉฐ ๊ฐ๋ฐํฉ๋๋ค:
- Red – ์คํจํ๋ ํ
์คํธ ์์ฑ
: ์์ง ๊ธฐ๋ฅ์ด ์์ผ๋ ํ ์คํธ๋ ๋น์ฐํ ์คํจํจ (์๋๋ ์คํจ) - Green – ํ
์คํธ๋ฅผ ํต๊ณผํ๋ ์ต์ํ์ ์ฝ๋ ์์ฑ
: ๊ธฐ๋ฅ์ ๋ง๋ค์ด ํ ์คํธ๊ฐ ํต๊ณผํ๊ฒ ํจ - Refactor – ์ฝ๋ ๋ฆฌํฉํ ๋ง
: ํ ์คํธ๊ฐ ๋ณด์ฅํด์ฃผ๋ ๋ง์ ๋๊ณ ๊ตฌ์กฐ ๊ฐ์ ๊ฐ๋ฅ
์ด ์ฌ์ดํด์ Red → Green → Refactor๋ผ๊ณ ๋ ๋ถ๋ฆ ๋๋ค.
๐ฆ ์๋ฅผ ๋ค์ด ๋ณผ๊น์?
์๊ตฌ์ฌํญ:
์ฌ์ฉ์์ ์ด๋ฆ์ ๋ฐ์ ์ธ์ฌ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋ ํจ์ ์์ฑ
TDD ๋ฐฉ์ ๊ฐ๋ฐ ํ๋ฆ:
# Step 1 - ์คํจํ๋ ํ
์คํธ ๋จผ์ ์์ฑ (Red)
def test_say_hello():
assert say_hello("Minjoo") == "Hello, Minjoo!"
NameError: name 'say_hello' is not defined
# Step 2 - ์ต์ํ์ ๊ธฐ๋ฅ ๊ตฌํ (Green)
def say_hello(name):
return f"Hello, {name}!"
โ ํ ์คํธ ํต๊ณผ!
# Step 3 - ๋ฆฌํฉํ ๋ง (Refactor)
# ์ง๊ธ์ ๋ฆฌํฉํ ๋งํ ๋ถ๋ถ์ด ์์ง๋ง, ์๋ฅผ ๋ค์ด ๋ก๊น
์ถ๊ฐ ๋ฑ์ ํ ์ ์์
์ด๋ ๊ฒ ์์ ๋จ์์ ํ ์คํธ์ ๊ตฌํ์ ๋ฐ๋ณตํ๋ฉฐ ์์ ์ ์ผ๋ก ๊ธฐ๋ฅ์ ์์ฑํด ๊ฐ๋๋ค.
โ TDD์ ์ฅ์
- ์ค์๋ฅผ ๋น ๋ฅด๊ฒ ๋ฐ๊ฒฌํ ์ ์๋ค
- ์ฝ๋ ๋ณ๊ฒฝ ์ ๋ฆฌํฉํ ๋ง์ด ์์ ํ๋ค (ํ ์คํธ๊ฐ ๋ณด์ฅํด์ฃผ๋ฏ๋ก)
- ๊ธฐ๋ฅ ์๊ตฌ์ฌํญ์ ๋ ๋ช ํํ๊ฒ ์ ๋ฆฌํ๊ฒ ๋๋ค
- ํ์ ์ ๋ค๋ฅธ ๊ฐ๋ฐ์์๊ฒ๋ ์ ๋ขฐ๋ฅผ ์ฃผ๋ ์ฝ๋๊ฐ ๋๋ค
โ ๏ธ TDD์ ๋จ์ ํน์ ์ฃผ์์
- ์ด๋ฐ์ ํ ์คํธ ์ฝ๋ ์์ฑ ์๊ฐ์ด ์ถ๊ฐ๋ก ์์๋จ
- ์ต์ํ์ง ์์ผ๋ฉด ์คํ๋ ค ์๋๊ฐ ๋๋ ค์ง ์ ์์
- ํ ์คํธ๊ฐ ์ง๋์น๊ฒ ๊ตฌ์ฒด์ ์ผ ๊ฒฝ์ฐ ๋ฆฌํฉํ ๋ง์ ์ด๋ ต๊ฒ ๋ง๋ค ์ ์์
โจ ๋ง๋ฌด๋ฆฌํ๋ฉฐ
์ฒ์์ ๋ฏ์ค๊ณ ๊ท์ฐฎ์ ์ ์์ง๋ง, TDD๋ ์ฅ๊ธฐ์ ์ผ๋ก ํจ์ฌ ์์ ์ ์ด๊ณ ์ ์ง๋ณด์์ ๊ฐํ ์ฝ๋๋ฅผ ๋ง๋ค์ด์ค๋๋ค.
ํนํ Django๋ ๋ฐฑ์๋ API ๊ฐ๋ฐ์์๋ TDD๋ฅผ ํ์ฉํ๋ฉด ๋ฒ๊ทธ๋ฅผ ๋ฏธ๋ฆฌ ์๋ฐฉํ๊ณ ,
ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ์ปค์ ธ๋ ๋๋ ค์ ์์ด ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํ ์ ์์ด ํฐ ๋์์ด ๋ฉ๋๋ค.
์ฒ์์๋ ๊ฐ๋จํ ํ
์คํธ ํ ์ค๋ถํฐ ์์ํด๋ณด์ธ์.
“ํ
์คํธ๊ฐ ๊นจ์ง์ง ์์ผ๋ฉด, ๋ด ์ฝ๋๋ ๋ฌด๋์ง์ง ์๋๋ค”๋ ํ์ ์ ์ค ์ ์์ ๊ฑฐ์์!