9์ฅ ๋จ์ ํ ์คํธ
์ง๋ 1997๋ ๋ง ํด๋ TDD๋ผ๋ ๊ฐ๋ ์ ์๋ฌด๋ ๋ชฐ๋๊ณ ๋จ์ ํ ์คํธ๋ ์๊ธฐ ํ๋ก๊ทธ๋จ์ด ๋์๊ฐ๋ค๋ ์ฌ์ค๋ง ํ์ธํ๋ ์ผํ์ฑ ์ฝ๋์ ๋ถ๊ณผํ๋ค.
ํด๋์ค์ ๋ฉ์๋๋ฅผ ๊ณต๋ค์ฌ ๊ตฌํํ ํ ์์ ์ฝ๋๋ฅผ ๊ธ์กฐํด ํ ์คํธ๋ฅผ ์ํํ๋๋ฐ ๋๊ฐ๋ ๊ฐ๋จํ ๋๋ผ์ด๋ฒ ํ๋ก๊ทธ๋จ์ ๊ตฌํํด ์์ ์ด ์ง ํ๋ก๊ทธ๋จ์ ์๋์ผ๋ก ์คํํ๋ค.
ํ์ง๋ง ์ง๊ธ์ ๋๋ถ์ ์ฑ์ฅ์ ์ด๋ค๋ค.
๊ผฌ์น๊ผฌ์น ๋ฐ์ง๋ฉฐ ์ฝ๋๊ฐ ์ ๋๋ก ๋๋์ง ํ์ธํ๋ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ณ
ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋ชจ๋ ๊ตฌํํ๊ณ
ํต๊ณผํ ํ์๋ ๋ด ์ฝ๋๋ฅผ ์ฌ์ฉํ ์ฌ๋๋ค์๊ฒ๋ ๊ณต๊ฐํ๊ณ
ํ ์คํธ ์ฝ๋์ ๋ด ์ฝ๋๋ฅผ ๊ฐ์ ์์ค ํจํค์ง๋ก ๋ฌถ์ด ์ฒดํฌ์ธํ๋ค.
์ ์์ผ๊ณผ TDD ๋ํ์ ๋จ์ ํ ์คํธ๋ฅผ ์๋ํํ๋ ํ๋ก๊ทธ๋๋จธ๋ค์ด ์ด๋ฏธ ๋ง์์ก์ผ๋ฉฐ ์ ์ ๋ ๋์ด๋๋ ์ถ์ธ์ด๋ค.
ํ์ง๋ง ์ฐ๋ฆฌ ๋ถ์ผ์ ํ ์คํธ๋ฅผ ์ถ๊ฐํ๋ ค๊ณ ๊ธํ๊ฒ ์๋๋ฅด๋ ์์ค์ ๋ง์ ํ๋ก๊ทธ๋๋จธ๋ค์ด ์ ๋๋ก ๋ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํด์ผ ํ๋ค๋ ์ข ๋ ๋ฏธ๋ฌํ ์ฌ์ค์ ๋์น๊ณ ์๋ค.
1. TDD ๋ฒ์น ์ธ ๊ฐ์ง
TDD๋ ์ค์ ์ฝ๋๋ฅด ์ง๊ธฐ ์ ์ ๋จ์ ํ ์คํธ๋ถํฐ ์ง๋ผ๊ณ ์๊ตฌํ๋ค.
- ์ฒซ์งธ ๋ฒ์น: ์คํจํ๋ ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ ๋๊น์ง ์ค์ ์ฝ๋๋ฅผ ์์ฑํ์ง ์๋๋ค.
- ๋์งธ ๋ฒ์น: ์ปดํ์ผ์ ์คํจํ์ง ์์ผ๋ฉด์ ์คํ์ด ์คํจํ๋ ์ ๋๋ก๋ง ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ๋ค.
- ์ ์งธ ๋ฒ์น: ํ์ฌ ์คํจํ๋ ํ ์คํธ๋ฅผ ํต๊ณผํ ์ ๋๋ก๋ง ์ค์ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
์ ์ธ ๊ฐ์ง ๊ท์น์ ๋ฐ๋ฅด๋ฉด ํ ์คํธ ์ฝ๋๊ฐ ์ค์ ์ฝ๋๋ณด๋ค ๋ถ๊ณผ ๋ช ์ด ์ ์ ๊ฑฐ์ ํจ๊ป ๋์จ๋ค.
์ด๋ ๊ฒ ์ผํ๋ฉด ์ค์ ์ฝ๋๋ฅผ ์ฌ์ค์ ์ ๋ถ ํ ์คํธํ๋ ํ ์คํธ ์ผ์ด์ค๊ฐ ๋์ค์ง๋ง
์ค์ ์ฝ๋์ ๋ง๋จน์ ์ ๋๋ก ๋ฐฉ๋ํ ํ ์คํธ ์ฝ๋๋ ์ฌ๊ฐํ ๊ด๋ฆฌ ๋ฌธ์ ๋ฅผ ์ ๋ฐํ๊ธฐ๋ ํ๋ค.
2. ๊นจ๋ํ ํ ์คํธ ์ฝ๋ ์ ์งํ๊ธฐ
๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๊ฐ๋ ์ฑ์ด๋ค.
๊ฐ๋ ์ฑ์ ์ค์ ์ฝ๋๋ณด๋ค ํ ์คํธ ์ฝ๋์ ๋๋์ฑ ์ค์ํ๋ค.
๊ฐ๋ ์ฑ์ ๋์ด๋ ค๋ฉด? ๋ช ๋ฃ์ฑ, ๋จ์์ฑ, ํ๋ถํ ํํ๋ ฅ์ด ํ์ํ๋ค.
- ํ ์คํธ ์ฝ๋๋ ์ต์์ ํํ์ผ๋ก ๋ง์ ๊ฒ์ ๋ํ๋ด์ผ ํ๋ค.
- ํ ์คํธ ์ฝ๋๋ ๋ณธ๋ก ์ ๋์ ํด ์ง์ง ํ์ํ ์๋ฃ ์ ํ๊ณผ ํจ์๋ง ์ฌ์ฉํ๋ค.
- ์ก๋คํ๊ณ ์ธ์ธํ ์ฝ๋๋ ๊ฑฐ์ ๋ค ์์ค๋ค.
3. ํ ์คํธ ๋น assert ํ๋
assert ๋ฌธ์ด ๋จ ํ๋์ธ ํจ์๋ ๊ฒฐ๋ก ์ด ํ๋๋ผ์ ์ฝ๋๋ฅผ ์ดํดํ๊ธฐ ์ฝ๊ณ ๋น ๋ฅด๋ค.
4. ํ ์คํธ ๋น ๊ฐ๋ ํ๋
์ด๊ฒ์ ๊ฒ ์ก๋คํ ๊ฐ๋ ์ ์ฐ์์ผ๋ก ํ ์คํธํ๋ ๊ธด ํจ์๋ ํผํ๋ค.
ํ ํจ์๋ก ๋ชฐ์๋ฃ์ผ๋ฉด ๋ ์๊ฐ ๊ฐ ์ ์ด ๊ฑฐ๊ธฐ์ ์กด์ฌํ๋ ์ด์ ์ ๊ฐ ์ ์ด ํ ์คํธํ๋ ๊ฐ๋ ์ ๋ชจ๋ ์ดํดํด์ผ ํ๋ค.
5. F.I.R.S.T
- Fast(๋น ๋ฅด๊ฒ): ํ
์คํธ๋ ๋นจ๋ฆฌ ๋์์ผ ํ๋ค๋ ๋ง์ด๋ค.
- ํ ์คํธ๊ฐ ๋๋ฆฌ๋ฉด ์์ฃผ ๋๋ฆด ์๋๋ฅผ ๋ชป ๋ธ๋ค.
- ์์ฃผ ๋๋ฆฌ์ง ์์ผ๋ฉด ์ด๋ฐ์ ๋ฌธ์ ๋ฅผ ์ฐพ์๋ด๊ธฐ ์ด๋ ต๋ค.
- ๊ฒฐ๊ตญ ์ฝ๋ ์ ๋ฆฌ๋ฅผ ๋ง์๊ป ํ์ง ๋ชปํด ์ฝ๋ ํ์ง์ด ๋ง๊ฐ์ง๋ค.
- Independent(๋
๋ฆฝ์ ์ผ๋ก): ํ ํ
์คํธ๊ฐ ๋ค์ ํ
์คํธ๊ฐ ์คํ๋ ํ๊ฒฝ์ ์ค๋นํด์๋ ์๋๋ค.
- ๊ฐ ํ ์คํธ๋ ๋ ๋ฆฝ์ ์ผ๋ก ๊ทธ๋ฆฌ๊ณ ์ด๋ค ์์๋ก ์คํํด๋ ๊ด์ฐฎ์์ผ ํ๋ค.
- ๋ ๋ฆฝ์ ์ด์ง ์์ผ๋ฉด ์คํจ์ ์์ธ์ ์ฐพ๊ธฐ ์ด๋ ค์์ง๋ฉฐ ํ๋ฐ ํ ์คํธ๊ฐ ์ฐพ์๋ด์ผ ํ ๊ฒฐํจ์ด ์จ๊ฒจ์ง๋ค.
- Repeatable(๋ฐ๋ณต ๊ฐ๋ฅํ๊ฒ): ํ
์คํธ๋ ์ด๋ค ํ๊ฒฝ์์๋ ๋ฐ๋ณต ๊ฐ๋ฅํด์ผ ํ๋ค.
- ์ค์ ํ๊ฒฝ, QA ํ๊ฒฝ, ๋คํธ์ํฌ๊ฐ ์ฐ๊ฒฐ๋์ง ์๋ ํ๊ฒฝ ๋ฑ
- Self-Validating(์๊ฐ ๊ฒ์ฆํ๋): ํ
์คํธ๋ Bool ๊ฐ์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ด์ผ ํ๋ค.
- ์ฑ๊ณต ์๋๋ฉด ์คํจ์ด๋ค. ์ด ๋ ๊ฐ๋ก ๊ฐ๋ ๋์ง ์์ผ๋ฉด ํ๋จ์ ์ฃผ๊ด์ ์ด ๋๋ฉฐ ์ง๋ฃจํ ์์์ ํ๊ฐ๊ฐ ๋๋ค.
- ํต๊ณผ ์ฌ๋ถ๋ฅผ ์๋ ค๊ณ ๋ก๊ทธ ํ์ผ์ ์ฝ๊ฒ ๋ง๋ค์ด์๋ ์ ๋๋ค.
- ํต๊ณผ ์ฌ๋ถ๋ฅผ ๋ณด๋ ค๊ณ ํ ์คํธ ํ์ผ ๋ ๊ฐ๋ฅผ ์์์ ์ผ๋ก ๋น๊ตํ๊ฒ ๋ง๋ค์ด์๋ ์ ๋๋ค.
- Timely(์ ์์): ๋จ์ ํ ์คํธ๋ ํ ์คํธํ๋ ค๋ ์ค์ ์ฝ๋๋ฅผ ๊ตฌํํ๊ธฐ ์ง์ ์ ๊ตฌํํ๋ค.