TDD (Test-Driven-Development)
TDD(ํ
์คํธ ์ฃผ๋ ๊ฐ๋ฐ)๋ ๋ฐ๋ณต ํ
์คํธ๋ฅผ ์ด์ฉํ ์ํํธ์จ์ด ๋ฐฉ๋ฒ๋ก ์ด๋ค.
[๊ธฐ์กด ํ๋ก์ธ์ค]
โ ๊ธฐ์กด์ ์ผ๋ฐ์ ์ธ ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ๋ค๋ฅด๊ฒ ํ
์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ ํ, ์ค์ ์ฝ๋๋ก ๊ฐ๋ฐํ๋ ์ ์ฐจ๋ฅผ ๋ฐ๋ฅธ๋ค.
TDD ๊ฐ๋ฐ ์ฃผ๊ธฐ
โข
Write a failing test[Red] ๋จ๊ณ - ์คํจํ๋ ํ
์คํธ ์ฝ๋๋ฅผ ๋จผ์ ์์ฑํ๋ค.
โข
Make the test pass[Green] ๋จ๊ณ - ํ
์คํธ ์ฝ๋๋ฅผ ์ฑ๊ณต์ํค๊ธฐ ์ํ ์ค์ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
โข
Refactor[Blue] ๋จ๊ณ - ์ค๋ณต ์ฝ๋ ์ ๊ฑฐ, ์ผ๋ฐํ ๋ฑ์ ๋ฆฌํฉํ ๋ง์ ์ํํ๋ค.
TDD์ ์ผ๋ฐ์ ์ธ ๊ฐ๋ฐ ๋ฐฉ์์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ํ
์คํธ ์ฝ๋๋ฅผ ์์ฑํ ๋ค์ ์ค์ ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ ๊ฒ์ด๋ค.
๋์์ธ(์ค๊ณ) ๋จ๊ณ์์ ํ๋ก๊ทธ๋๋ฐ ๋ชฉ์ ์ ๋ฏธ๋ฆฌ ์ ์ํ๊ณ , ํ
์คํธ ์ผ์ด์ค ์์ฑ์ ํด์ผํ๋ค.
ํ
์คํฌ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋์ค, ๋ฐ์ํ๋ ์์ธ ์ฌํญ(๋ฒ๊ทธ ๋ฐ ์์ ์ฌํญ)์ ํ
์คํธ ์ผ์ด์ค์ ์ถ๊ฐํ๊ณ ์ค๊ณ๋ฅผ ๊ฐ์ ํ๋ค.
์ดํ, ํ
์คํธ๊ฐ ํต๊ณผ๋ ์ฝ๋๋ง์ ์ฝ๋ ๊ฐ๋ฐ ๋จ๊ณ์์ ์ค์ ์ฝ๋๋ก ์์ฑํ๋ค.
TDD์ ๋ํ์ ์ธ ํด
JUnit
โข
JUnit์ ์ ์ธ๊ณ์ ์ผ๋ก ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ โJava ๋จ์ ํ
์คํธ ํ๋ ์์ํฌโ ์ด๋ค. (Spring Boot์์ ์ฃผ๋ก ์ฌ์ฉ)
xUnit
โข
JUnit ๋ง๊ณ , CUnit(C์ธ์ด), CPPUnit(C++), PyUnit(Python) ๋ฑ ๋ค๋ฅธ ์ธ์ด๋ก๋ ์ง์ํ๋ ํ๋ ์์ํฌ๋ฅผ xUnit์ด๋ผ๊ณ ์นญํ๋ค.
TDD ๋ฐฉ์์ ์ฅ์
1. ๋ณด๋ค ํผํผํ ๊ฐ์ฒด ์งํฅ์ ์ธ ์ฝ๋ ์์ฐ
โข
TDD๋ ์ฝ๋์ ์ฌ์ฌ์ฉ ๋ณด์ฅ์ ๋ช
์ํ๋ฏ๋ก, TDD๋ฅผ ํตํ ์ํํธ์จ์ด ๊ฐ๋ฐ ์, ๊ธฐ๋ฅ ๋ณ ์ฒ ์ ํ ๋ชจ๋ํ๊ฐ ์ด๋ค์ง๋ค.
โข
์ด๋ ์ข
์์ฑ๊ณผ ์์กด์ฑ์ด ๋ฎ์ ๋ชจ๋๋ก ์กฐํฉ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๊ฐ๋ฅํ๊ฒ ํ๋ฉฐ, ํ์์ ๋ฐ๋ผ ๋ชจ๋์ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํด๋ ์ํํธ์จ์ด ์ ์ฒด ๊ตฌ์กฐ์ ์ํฅใ
๋ฅด ๋ฏธ์น์ง ์๊ฒ ๋๋ค.
2. ์ฌ์ค๊ณ ์๊ฐ์ ๋จ์ถ
โข
ํ
์คํธ ์ฝ๋๋ฅผ ๋จผ์ ์์ฑํ๊ธฐ ๋๋ฌธ์, ๊ฐ๋ฐ์๊ฐ ์ง๊ธ ๋ฌด์์ ํด์ผํ๋์ง ๋ถ๋ช
ํ ์ ์ํ๊ณ ๊ฐ๋ฐ์ ์์ํ๊ฒ ๋๋ค.
โข
๋ํ ํ
์คํธ ์๋๋ฆฌ์ค๋ฅผ ์์ฑํ๋ฉด์, ๋ค์ํ ์์ธ์ฌํญ์ ๋ํด ์๊ฐํด ๋ณผ ์ ์๋ค.
โข
์ด๋ ๊ฐ๋ฐ ์งํ ์ค, ์ํํธ์จ์ด์ ์ ๋ฐ์ ์ธ ์ค๊ณ๊ฐ ๋ณ๊ฒฝ๋๋ ์ผ์ ๋ฐฉ์งํ ์ ์๋ค.
3. ๋๋ฒ๊น ์๊ฐ์ ๋จ์ถ
โข
์ฌ์ฉ์์ ๋ฐ์ดํฐ๊ฐ ์๋ชป ๋์จ๋ค๋ฉด DB์ ๋ฌธ์ ์ธ์ง, ๋น์ฆ๋์ค ๋ ์ด์ด์ ๋ฌธ์ ์ธ์ง, UI์ ๋ฌธ์ ์ธ์ง ์ค์ ๋ชจ๋ ๋ ์ด์ด๋ค์ ์ ๋ถ ๋๋ฒ๊น
ํด์ผํ์ง๋ง, TDD์ ๊ฒฝ์ฐ ์๋ํ๋ ์ ๋ ํ
์คํ
์ ์ ์ ํ๋ฏ๋ก ํน์ ๋ฒ๊ทธ๋ฅผ ์์ฝ๊ฒ ์ฐพ์๋ผ ์ ์๋ค.
4. ํ ์คํธ ๋ฌธ์์ ๋์ฒด ๊ฐ๋ฅ
โข
์ฃผ๋ก SI ํ๋ก์ ํธ ์งํ ๊ณผ์ ์์ ์ด๋ค ์์๋ค์ด ํ
์คํธ ๋์๋์ง ํ
์ค์ฆ ์ ์์๋ฅผ ๋ง๋ ๋ค.
โข
์ด๊ฒ์ ๋จ์ ํตํฉ ํ
์คํธ ๋ฌธ์์ ์ง๋์ง ์๋๋ค. ํ์ง๋ง TDD๋ฅผ ํ๊ฒ ๋ ๊ฒฝ์ฐ ํ
์คํ
์ ์๋ํ ์ํด๊ณผ ๋์์, ๋ณด๋ค ์ ํํ ํ
์คํธ ๊ทผ๊ฑฐ๋ฅผ ์ฐ์ถํ ์ ์๋ค.
5. ์ถ๊ฐ ๊ตฌํ์ ์ฉ์ดํจ
โข
๊ฐ๋ฐ์ด ์๋ฃ๋ ์ํํธ์จ์ด์ ์ด๋ค ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๋, ์ฐ๋ ค๋๋ ์ ์ ํด๋น ๊ธฐ๋ฅ์ด ๊ธฐ์กด ์ฝ๋์ ์ด๋ค ์ํฅ์ ๋ฏธ์น ์ง ์์ง ๋ชปํ๋ค๋ ๊ฒ์ด๋ค.
โข
ํ์ง๋ง TDD์ ๊ฒฝ์ฐ, ์๋ํ๋ ์ ๋ ํ
์คํ
์ ์ ์ ํ๋ฏ๋ก ํ
์คํธ ๊ธฐ๊ฐ์ ๋จ์ถ์ํฌ ์ ์๋ค.
TDD ๋ฐฉ์์ ๋จ์
์์ฐ์ฑ ์ ํ, ์์ฐ๋น์ฉ ์ฆ๊ฐ
โข
๊ธฐ์กด ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ํ
์คํธ ์ผ์ด์ค๊ฐ ์ถ๊ฐ๋์๊ธฐ ๋๋ฌธ์, ๊ฐ๋ฐ ์๋๊ฐ ๋ ๋๋ ค์ง๊ณ , ์์ฐ ๋น์ฉ๋ ์ฆ๊ฐํ๋ค.