๐ Test-Driven Development:By Example ์ฑ ๋ฆฌ๋ทฐ | 1๋ถ. ํํ์์
TDD๋ ์ด์ ๊น์ง ๋ฐฐ์ ๋ ๊ฐ๋ฐ ๊ฐ๋ ๋ค ์ค ์ด๋ก ์ ์ผ๋ก ์ดํดํ๊ธฐ ๊ฐ์ฅ ์ด๋ ค์ด ๊ฐ๋ ์ด์๋ค. ๊ทธ๋ฌ๋ ์ด ์ฑ ์ 1๋ถ์ ๋์์๋ ํํ ์์ ์ฝ๋๋ฅผ ๋๋ฌ๋๋ฌ ๋ฐ๋ผ์น๋ฉฐ ์ ์์ ์์์ ํ๋ฆ๋๋ก ์์ฑํ ๊ฒ ๊ฐ์ ์ค๋ช ๊ธ์ ๊ฐ์ด ์ฝ๊ณ ๋๋ ์กฐ๊ธ(์์ฃผ ์กฐ๊ธ) TDD๊ฐ ์ด๋ค ๊ฒ์ธ์ง ์ ๊ฒ ๊ฐ์๋ค.
์ด๋ฒ ํฌ์คํ ์์๋ Test-Driven Development:By Example ์ฑ ์ 1๋ถ ํํ์์ ์ฝ๋๋ฅผ ์ง์ ์ค์ตํด๋ณด๊ณ , ๊ทธ ๊ณผ์ ์์ ๋ฐฐ์ด์ ์ ๊ณต์ ํด๋ณด๋ คํ๋ค.
์ค์ต ๊ฒฐ๊ณผ๋ฌผ
https://github.com/eunbin20/tdd
๋ฐฐ์ด์
TDD์ ํต์ฌ
- ํ์คํ ์คํจ(๋นจ๊ฐ๋ถ)
- ์ด๋ป๊ฒ๋ , ์ด๊ฑฐ์ง๋ก ์ฑ๊ณต์ํจ๋ค.(์ด๋ก๋ถ)
- ์ค๋ณต์ ์์ ๋ฉฐ ๋ฆฌํฉํ ๋งํ๋ค.(๋ฆฌํฉํ ๋ง)
์ ์์ ์ ์ฃผ๊ธฐ๋ ์งง์ ์๋ก ์ข๋ค. ์ ์ฃผ๊ธฐ๊ฐ ๊ธธ๋ค๋ ๊ฒ์ ์ฌ๋ฌ ๋จ๊ณ๋ฅผ ํ ๋ฒ์ ๋ฐ์ด๋์ผ๋ คํ๋ค๋ ๊ฒ. ์ฑ ์๋ ์ด๋ฐ ๋ง์ด ์์๋ค.
์ด ๋จ๊ณ๊ฐ ๋๋ฌด ์๊ฒ ๋๊ปด์ง๋๊ฐ? ํ์ง๋ง ๊ธฐ์ตํ๊ธฐ ๋ฐ๋๋ค. TDD์ ํต์ฌ์ ์ด๋ฐ ์์ ๋จ๊ณ๋ฅผ ๋ฐ์์ผ ํ๋ค๋ ๊ฒ์ด ์๋๋ผ, ์ด๋ฐ ์์ ๋จ๊ณ๋ฅผ ๋ฐ์ ๋ฅ๋ ฅ์ ๊ฐ์ถ์ด์ผํ๋ค๋ ๊ฒ์ด๋ค.
์์ ๋จ๊ณ๋ก ์์ ํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ๋ฉด, ์ ์ ๋ก ์ ์ ํ ํฌ๊ธฐ์ ๋จ๊ณ๋ก ์์ ํ ์ ์๊ฒ ๋ ๊ฒ์ด๋ค.
TDD์ ์ต์์น ์์ผ๋ฉด ์์์๋ก ์ต๋ํ ์์ ๋จ๊ณ์ ๊ณผ์ ๋ถํฐ ๋ฐ์๋๊ฐ์ผ ํ๋ค. ์์ ๋จ๊ณ๋ฅผ ์ถฉ๋ถํ ์ฐ์ตํ ๋ค์ ์ ์ ํ ํฌ๊ธฐ์ ๋จ๊ณ๋ก ์์ ํ ์ ์๊ฒ ๋ ๊ฒ์ด๋ค.
๋นจ -> ์ด -> ๋ฆฌ ์ฌ์ดํด์ ํ ๋ฒ ๋๊ณ ๋๋ฉด ์ ์ด๋ ์ด ๊ธฐ๋ฅ์ ์์ผ๋ก๋ ์์ํ ์ ์์๋๋๋ ๊ฒ์ด ๋ณด์ฅ๋๋ค.
๋ณต๋ถ์ ์ค์์ฑ
TDD ๋ฐฉ์์ผ๋ก ๊ฐ๋ฐํ๋ ค๋ฉด ํ ์คํธ๋ฅผ ์์ฑํ๊ธฐ๊ฐ ์ฌ์์ผ ํ๋ค. ๊ธฐ์กด์ ์กฐ๊ธ์ด๋ผ๋ ๋น์ทํ๊ฒ ์์ฑ๋ ์ฝ๋๊ฐ ์๋ค๋ฉด ๋ณต๋ถ๋ถํฐ ํ๋ ๊ฒ์ด ๋ง๋ ์์์ด๋ค. ์กฐ๊ธ์ด๋ผ๋ ๋ ๋น ๋ฅด๊ฒ ํ ์คํธ๋ฅผ ์์ฑํ ์ ์๋ ๋ฐฉ๋ฒ์ด๋ผ๋ฉด, ๊ทธ๋ฆฌ๊ณ ๋ ๋น ๋ฅด๊ฒ ๋นจ๊ฐ๋ถ์ ์ด๋ก๋ถ๋ก ๋ง๋ค์ด์ฃผ๋ ์์ ์ด๋ผ๋ฉด, ์ฃ์ง๊ธฐ๋ฅผ ๋๋ ค์ํ์ง ๋ง์.
ํ ์คํธ์ฝ๋์ ๊ฐ์ฅ ํฐ ํํ์ ๋ฆฌํฉํ ๋ง์ ์์ ์ฑ
์ถฉ๋ถํ ํ ์คํธ๊ฐ ๊ฐ์ถฐ์ง์ง ๋ชปํ ๊ณณ์์ ๋ฆฌํฉํ ๋ง์ ํ๊ฒ ๋๋ ๊ฒฝ์ฐ, ์์ผ๋ฉด ์ข์ ๊ฒ ๊ฐ์ ํ ์คํธ๋ฅผ ์์ฑํ๋ผ. ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ฒฐ๊ตญ์๋ ๋ฆฌํฉํ ๋งํ๋ค ๋ญ๊ฐ ๊นจํธ๋ฆด ๊ฒ์ด๋ค.
์ด ์ฑ ์ ์ฝ๊ณ ๋ ์ด์,, ํ ์คํธ ์ฝ๋ ์์ด ๋ฆฌํฉํ ๋ง์ ์งํํ๋ ๊ฑด ์ธ๋๋ฌด ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋ ๊ฒ๊ณผ ๋น์ทํ๋ค๊ณ ๋๊ปด์ง๋ค. ์ฑ๊ณตํ ๊ฐ๋ฅ์ฑ์ด ์๊ธด ํ์ง๋ง, ์คํจํ ๊ฐ๋ฅ์ฑ์ด ๋ ๋๊ณ , ์์์น ๋ชปํ ๋ถ๋ถ์์์ ์ฌ์ด๋ ์ดํํธ๊ฐ ์ฐ๋ ค๋์ด ์ฌ์ ์ผ๋ก๋ ๋ถ์ํ๋ค.
TDD ์ ๊ทผ ๋ฐฉ๋ฒ
- ๊ฐ์ง๋ก ๊ตฌํํ๊ธฐ: ์ต๋ํ ๋นจ๋ฆฌ ํ ์คํธ๋ฅผ ํต๊ณผํ๊ธฐ ์ํด ์ ๋ต์ด ์๋ ๊ฐ์ง ์ ๋ต์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ
- ์ผ๊ฐ์ธก๋๋ฒ: ๊ฐ์ด ๋ค๋ฅธ ์ฌ๋ฌ ํ ์คํธ๋ฅผ ์์ฑํ๊ณ , ์ด๋ฅผ ์ผ๋ฐํํ์ฌ ์ ๋ต์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ
- ๋ช ๋ฐฑํ๊ฒ ๊ตฌํํ๊ธฐ: ์ ๋ต์ ๋ฐ๋ก ๊ตฌํํ๋ ๋ฐฉ๋ฒ
๋๋์
ํญ์ ์๋ฌ์ ๋๋ ค๋ค๋๊ธฐ ๋ฐ๋นด๋ ๊ฒ ๊ฐ์๋ฐ, ์๋ฌ๊ฐ ๋ ์ํฉ์ ์๋์ ์ผ๋ก ๋ง๋ค๊ณ , ์๋ฌ๋ฅผ ํ์ ํ๊ณ ,test๋ฅผ watch ํ๋ฉด์ ํ ๋จ๊ณ ํ ๋จ๊ณ ํด๊ฒฐํด๋๊ฐ๋ ๊ณผ์ ์์ ์ฃผ๋์ ์ผ๋ก ๊ฐ๋ฐํ๊ณ ์๋ค๋ ๋๋์ ๋ฐ์๋ค.
๊ทธ๋ฆฌ๊ณ ์ฑ ์ด ์๊ฐ๋ณด๋ค ์ฌ๋ฐ๋ค. ๋๊ฒ ์ด๋ ค์ด ์ฑ ์ผ๊ฑฐ๋ผ๊ณ ์๊ฐํ๋๋ฐ, ์กฐ๊ธ ์๊ธด ์๋์ด ๊ฐ๋ฐ์๋ถ๊ณผ ํ์ดํ๋ก๊ทธ๋๋ฐํ๋ ๊ธฐ๋ถ์ด์๋ค.