๐ ๋ชฉ์ฐจ.
9. ๋จ์ ํ ์คํธ
.TDD ๋ฒ์น ์ธ ๊ฐ์ง
.๊นจ๋ํ ํ ์คํธ ์ฝ๋ ์ ์งํ๊ธฐ
.ํ ์คํธ๋ ์ ์ฐ์ฑ, ์ ์ง๋ณด์์ฑ, ์ฌ์ฌ์ฉ์ฑ์ ์ ๊ณตํ๋ค.
.๊นจ๋ํ ํ ์คํธ ์ฝ๋
.ํ ์คํธ ๋น assert ํ๋
.ํ ์คํธ ๋น ๊ฐ๋ ํ๋
.F.I.R.S.T
.๊ฒฐ๋ก
โ๏ธ ๋ด์ฉ.
9. ๋จ์ ํ ์คํธ
์ ๋๋ก ๋ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ
.TDD ๋ฒ์น ์ธ ๊ฐ์ง
TDD๋ ์ค์ ์ฝ๋๋ฅผ ์ง๊ธฐ ์ ์ ๋จ์ ํ ์คํธ๋ถํฐ ์ง๋ผ๊ณ ์๊ตฌํ๋ค. ๋จ์ ํ ์คํธ๋ฅผ ์ง๋๋ฐ ์ค์ํ ์ธ ๊ฐ์ง ๋ฒ์น์ด ์๋ค.
1. ์คํจํ๋ ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ ๋๊น์ง ์ค์ ์ฝ๋๋ฅผ ์์ฑํ์ง ์๋๋ค.
2. ์ปดํ์ผ์ ์คํจํ์ง ์์ผ๋ฉด์ ์คํ์ด ์คํจํ๋ ์ ๋๋ก๋ง ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ๋ค.
3. ํ์ฌ ์คํจํ๋ ํ ์คํธ๋ฅผ ํต๊ณผํ ์ ๋๋ก๋ง ์ค์ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
์ ์ธ ๊ฐ์ง ๊ท์น์ ๋ฐ๋ฅด๋ฉด ๊ฐ๋ฐ๊ณผ ํ ์คํธ๊ฐ ๋๋ต 30์ด ์ฃผ๊ธฐ๋ก ๋ฌถ์ธ๋ค.
ํ ์คํธ ์ฝ๋์ ์ค์ ์ฝ๋๊ฐ ํจ๊ป ๋์ฌ๋ฟ๋๋ฌ ํ ์คํธ ์ฝ๋๊ฐ ์ค์ ์ฝ๋๋ณด๋ค ๋ถ๊ณผ ๋ช ์ด ์ ์ ๋์จ๋ค.
.๊นจ๋ํ ํ ์คํธ ์ฝ๋ ์ ์งํ๊ธฐ
์ผํ์ฉ ํ ์คํธ ์ฝ๋๋ฅผ ์ง๋ค ์๋ํ๋ ๋จ์ ํ ์คํธ ์ํธ๋ฅผ ์ง๊ธฐ๋ ์ฝ์ง ์๋ค. ์ง์ ๋ถํ ํ ์คํธ ์ฝ๋๋ผ๋ ์๋ ํธ์ด ์ข๋ค๊ณ ํ๋จํ์ฌ ์ผํ์ฉ ํ ์คํธ ์ฝ๋๋ฅผ ์งฐ์ ๊ฒ์ด๋ค.
์ฌ์ค ์ง์ ๋ถํ ํ ์คํธ ์ฝ๋๋ฅผ ์ง๋ ๊ฑด ์ง์ง ์๋ ๊ฒ๋ณด๋ค ๋ ๋ชปํ๋ค. ์ค์ ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋๋ฉด ๊ธฐ์กด ํ ์คํธ ์ผ์ด์ค๊ฐ ๊นจ์ง๋ฉด์ ์ง์ ๋ถํ ํ ์คํธ ์ฝ๋๊ฐ ํต๊ณผํ๊ธฐ๊ฐ ๋ ์ด๋ ค์์ง๊ฒ ๋๋ค. ๊ฒฐ๊ตญ ์ ์ง ๋ณด์ ๋น์ฉ์ด ๋น์ธ๊ฒ ๋์ด๋๋ฉด์ ํ ์คํธ ์ฝ๋์ ๋ํ ํ์์ฑ์ด ์ฌ๋ผ์ง๊ฒ ๋๋ค.
ํ์ง๋ง ํ ์คํธ ์ํธ๊ฐ ์์ผ๋ฉด ๊ฐ๋ฐ์๋ ๋ณธ์ธ์ด ์์ ํ ์ฝ๋๊ฐ ์ ๋๋ก ๋๋์ง ํ์ธํ ๋ฐฉ๋ฒ์ด ์๋ค.
๋ฐ๋ผ์ ๊ฒฐํจ๋ฅ ์ด ๋์์ง๊ณ . ๊ฐ๋ฐ์๋ ๋ณ๊ฒฝ์ ์ฃผ์ ํ๊ฒ ๋๋ค. ๊ทธ๋ฌ๋ฉด์ ์ฝ๋๊ฐ ๋ง๊ฐ์ง๊ธฐ ์์ํ๋ค. ๊ฒฐ๊ตญ ํ ์คํธ ์ํธ๋ ์๊ณ , ๋ค์์ธ ์ฝ๋์ ํ์ง์ด ๋จ์ด์ง๋ฉฐ ์ข์ง ์์ ์ฐ์์์ฉ๋ง ๋ฐ์ํ๊ฒ ๋๋ค.
๊ฒฐ๋ก ์. ํ ์คํธ ์ฝ๋๋ ์ค์ ์ฝ๋ ๋ชป์ง์๊ฒ ์ค์ํ๋ค. ์ง์ ๋ถํ๊ฒ ์ง๋ ๊ฒ ์๋๋ผ ์ค์ ์ฝ๋ ๋ชป์ง์๊ฒ ์ง์ผํ๋ค.
.ํ ์คํธ๋ ์ ์ฐ์ฑ, ์ ์ง๋ณด์์ฑ, ์ฌ์ฌ์ฉ์ฑ์ ์ ๊ณตํ๋ค.
ํ ์คํธ ์ฝ๋๋ฅผ ๊นจ๋ํ๊ฒ ์ ์งํ์ง ์์ผ๋ฉด ๊ฒฐ๊ตญ์ ์์ด๋ฒ๋ฆฐ๋ค.
๊ทธ๋ฆฌ๊ณ ํ ์คํธ ์ผ์ด์ค๊ฐ ์์ผ๋ฉด ์ค์ ์ฝ๋๋ฅผ ์ ์ฐํ๊ฒ ๋ง๋๋ ๋ฒํ๋ชฉ๋ ์ฌ๋ผ์ง๋ค. ์ฝ๋์ ์ ์ฐ์ฑ, ์ ์ง ๋ณด์์ฑ, ์ฌ์ฌ์ฉ์ฑ์ ์ ๊ณตํ๋ ๋ฒํ๋ชฉ์ด ๋ฐ๋ก ๋จ์ ํ ์คํธ๋ค. ์ด์ ๋ ๋จ์ํ๋ค. ํ ์คํธ ์ผ์ด์ค๊ฐ ์์ผ๋ฉด ๋ณ๊ฒฝ์ด ๋๋ ต์ง ์์ผ๋๊น!.
ํ ์คํธ ์ผ์ด์ค๊ฐ ์๋ค๋ฉด ๋ชจ๋ ๋ณ๊ฒฝ์ด ์ ์ ์ ๋ฒ๊ทธ์ด๋ค. ์ํคํ ์ฒ๊ฐ ์๋ฌด๋ฆฌ ์ ์ฐํด๋ ์ค๊ณ๋ฅผ ์ ๋๋ด๋๋ผ๋ ๋ฒ๊ทธ๊ฐ ์จ์ด์์ง ์์๊น ํ๋ฉฐ ๋ณ๊ฒฝ์ ์ฃผ์ ํ๋ค.
๋ฐ๋๋ก ํ ์คํธ ์ผ์ด์ค๊ฐ ์๋ค๋ฉด? ๊ณตํฌ๋ ์ฌ๋ผ์ง๋ค. ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง๊ฐ ๋์์๋ก ๊ณตํฌ๋ ์ค์ด๋ ๋ค.
์ํคํ ์ฒ๊ฐ ๋ถ์คํ๊ฑฐ๋ ์ค๊ณ๊ฐ ๋ชจํธํ๊ณ ์๋ง์ด๋๋ผ๋ ํฐ ์ฐ๋ ค ์์ด ๋ณ๊ฒฝํ ์ ์๋ค. ์๋ ์คํ๋ ค ์์ฌํ๊ณ ์ํคํ ์ฒ์ ์ค๊ณ๋ฅผ ๊ฐ์ ํ ์ ์๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ค์ ์ฝ๋๋ฅผ ์ ๊ฒํ๋ ์๋ํ๋ ๋จ์ ํ ์คํธ ์ํธ๋ ์ค๊ณ์ ์ํคํ ์ฒ๋ฅผ ์ต๋ํ ๊นจ๋ํ๊ฒ ๋ณด์กดํ๋ ์ด์ ๋ค.
.๊นจ๋ํ ํ ์คํธ ์ฝ๋
๊นจ๋ํ ํ ์คํธ ์ฝ๋๋ฅผ ๋ง๋ค๋ ค๋ฉด ๊ฐ๋ ์ฑ์ด ํ์ํ๋ค
BUILD-OPERATE-CHECK ํจํด์ ๊ฐ๋ ์ฑ์ ์ข๋ค.
- BUILD : ํ ์คํธ ์๋ฃ๋ฅผ ๋ง๋ ๋ค.
- OPERATE : ํ ์คํธ ์๋ฃ๋ฅผ ์กฐ์ํ๋ค.
- CHECK : ์กฐ์๋ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๋ค.
(์์ฃผ ์ฌ์ฉํ๋ given - when - then ๊ฐ์ ๋๋?)
.ํ ์คํธ ๋น assert ํ๋
Junit์ผ๋ก ํ ์คํธ ์ฝ๋๋ฅผ ์งค ๋๋ง๋ค ํจ์๋ง๋ค assert ๋ฌธ์ ๋จ ํ๋๋ง ์ฌ์ฉํด์ผ ํ๋ค๊ณ ์ฃผ์ฅํ๊ธฐ๋ ํ๋ค.
ํ์คํ ์ฅ์ ์ผ๋ก ํจ์์ ๊ฒฐ๋ก ์ด ํ๋์ฌ์ ์ฝ๋๋ฅผ ์ดํดํ๊ธฐ ์ฝ๊ณ ๋น ๋ฅด๋ค.
๋จ์ผ assert ๋ฌธ ๊ท์น์ด ํ๋ฅญํ์ง๋ง. ๋๋ก๋ ํ์ํ ๊ฒฝ์ฐ ์ฌ๋ฌ assert ๋ฌธ์ ๋ฃ๊ธฐ๋ ํ๋ค. ๋จ์ง assert๋ฌธ์ ๊ฐ์๋ฅผ ์ต๋ํ ์ค์ด๋ ๊ฒ์ ์ข๋ค๋ ์๊ฐ์ด๋ค.
.ํ ์คํธ ๋น ๊ฐ๋ ํ๋
ํ ์คํธ ํจ์๋ง๋ค ํ ๊ฐ๋ ๋ง ํ ์คํธํ๋ผ. ์ด๊ฒ์ ๊ฒ ์ก๋คํ ๊ฐ๋ ์ ์ฐ์์ผ๋ก ํ ์คํธํ๋ ๊ธด ํจ์๋ ํผํ๋ค.
.F.I.R.S.T
๊นจ๋ํ ํ ์คํธ๋ ๋ค์ ๋ค์ฏ ๊ฐ์ง ๊ท์น์ ๋ฐ๋ฅธ๋ค.
- ๋น ๋ฅด๊ฒ (Fast)
ํ ์คํธ๋ ๋นจ๋ผ์ผ ํ๋ค. ํ ์คํธ๊ฐ ๋๋ฆฌ๋ฉด ์์ฃผ ๋๋ฆด ์๋๋ฅผ ๋ชป ๋ธ๋ค.
์์ฃผ ๋๋ฆฌ์ง ์์ผ๋ฉด ์ด๋ฐ์ ๋ฌธ์ ๋ฅผ ์ฐพ์๋ด ๊ณ ์น์ง ๋ชปํ๋ค. ์ฝ๋๋ฅผ ๋ง์๊ป ์ ๋ฆฌํ์ง๋ ๋ชปํ๋ค. ๊ฒฐ๊ตญ ์ฝ๋ ํ์ง์ด ๋จ์ด์ง๊ธฐ ์์ํ๋ค.
- ๋ ๋ฆฝ์ ์ผ๋ก(Independent)
๊ฐ ํ ์คํธ๋ ์๋ก ์์กดํ๋ฉด ์ ๋๋ค. ํ ํ ์คํธ๊ฐ ๋ค์ ํ ์คํธ๊ฐ ์คํ๋ ํ๊ฒฝ์ ์ค๋นํด์๋ ์ ๋๋ค.
๊ฐ ํ ์คํธ๋ ๋ ๋ฆฝ์ ์ผ๋ก ๊ทธ๋ฆฌ๊ณ ์ด๋ค ์์๋ก ์คํํด๋ ๊ด์ฐฎ์์ผ ํ๋ค. ํ ์คํธ๊ฐ ์๋ก ์์กดํ๋ฉด ํ๋๊ฐ ์คํจํ ๋ ๋๋จธ์ง๋ ์คํจํ๋ฏ๋ก ์์ธ์ ์ง๋จํ๊ธฐ ์ด๋ ค์์ง๋ค.
- ๋ฐ๋ณต ๊ฐ๋ฅํ๊ฒ(Repeatable)
ํ ์คํธ๋ ์ด๋ค ํ๊ฒฝ์์๋ ๋ฐ๋ณต ๊ฐ๋ฅํด์ผ ํ๋ค.
Prod/Qa/Dev ๋ฑ๋ฑ ๋ชจ๋ ํ๊ฒฝ์์ ์คํํ ์ ์์ด์ผ ํ๋ค. ํ ์คํธ๊ฐ ๋์๊ฐ์ง ์๋ ํ๊ฒฝ์ด ํ๋๋ผ๋ ์๋ค๋ฉด ํ ์คํธ๊ฐ ์คํจํ ์ด์ ๋ฅผ ๋๋ฌ๋ ๋ณ๋ช ์ด ์๊ธด๋ค. ๊ฒ๋ค๊ฐ ํ๊ฒฝ์ด ์ง์๋์ง ์๊ธฐ์ ํ ์คํธ๋ฅผ ์ํํ์ง ๋ชปํ๋ ์ํฉ์ ์ง๋ฉดํ๋ค.
- ์๊ฐ ๊ฒ์ฆํ๋(Self-Validating)
ํ ์คํธ๋ ๋ถ์ธ(Bool) ๊ฐ์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ด์ผ ํ๋ค. ์ฑ๊ณต ์๋๋ฉด ์คํจ๋ค.
ํต๊ณผ ์ฌ๋ถ๋ฅผ ์๋ ค๊ณ ๋ก๊ทธ ํ์ผ์ ์ฝ๊ฒ ๋ง๋ค๋ฉด ์ ๋๋ค. ํ ์คํธ๊ฐ ์ค์ค๋ก ์ฑ๊ณต๊ณผ ์คํจ๋ฅผ ๊ฐ๋ ํ์ง ์๋๋ค๋ฉด ํ๋จ์ ์ฃผ๊ด์ ์ด ๋๋ฉฐ ์ง๋ฃจํ ์์์ ํ๊ฐ๊ฐ ํ์ํ๊ฒ ๋๋ค.
- ์ ์์(Timely)
ํ ์คํธ๋ ์ ์์ ์์ฑํด์ผ ํ๋ค. ๋จ์ ํ ์คํธ๋ ํ ์คํธํ๋ ค๋ ์ค์ ์ฝ๋๋ฅผ ๊ตฌํํ๊ธฐ ์ง์ ์ ๊ตฌํํ๋ค.
์ค์ ์ฝ๋๋ฅผ ๊ตฌํํ ๋ค์์ ํ ์คํธ ์ฝ๋๋ฅผ ๋ง๋ค๋ฉด ์ค์ ์ฝ๋๊ฐ ํ ์คํธํ๊ธฐ ์ด๋ ต๋ค๋ ์ฌ์ค์ ๋ฐ๊ฒฌํ ์ง๋ ๋ชจ๋ฅธ๋ค. ์ด๋ค ์ค์ ์ฝ๋๋ ํ ์คํธํ๊ธฐ ๋๋ฌด ์ด๋ ต๋ค๊ณ ํ๋ช ๋ ์ง ๋ชจ๋ฅธ๋ค. ํ ์คํธ๊ฐ ๋ถ๊ฐ๋ฅํ๋๋ก ์ค์ ์ฝ๋๋ฅผ ์ค๊ณํ ์ง๋ ๋ชจ๋ฅธ๋ค.
.๊ฒฐ๋ก
ํ ์คํธ ์ฝ๋๋ ์ค์ ์ฝ๋๋งํผ์ด๋ ํ๋ก์ ํธ ๊ฑด๊ฐ์ ์ค์ํ๋ค. ์ด์ฉ๋ฉด ์ค์ ์ฝ๋๋ณด๋ค ๋ ์ค์ํ ์ง๋ ๋ชจ๋ฅธ๋ค.
ํ ์คํธ ์ฝ๋๋ ์ค์ ์ฝ๋์ ์ ์ฐ์ฑ, ์ ์ง๋ณด์์ฑ, ์ฌ์ฌ์ฉ์ฑ์ ๋ณด์กดํ๊ณ ๊ฐํํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฌ๋ฏ๋ก ํ ์คํธ ์ฝ๋๋ ์ง์์ ์ผ๋ก ๊นจ๋ํ๊ฒ ๊ด๋ฆฌํ์. ํํ๋ ฅ์ ๋์ด๊ณ ๊ฐ๊ฒฐํ๊ฒ ์ ๋ฆฌ๊ณ ํ ์คํธ API๋ฅผ ๊ตฌํํด ๋๋ฉ์ธ ํนํ ์ธ์ด(DSL)๋ฅผ ๋ง๋ค์, ๊ทธ๋ฌ๋ฉด ๊ทธ๋งํผ ํ ์คํธ ์ฝ๋๋ฅผ ์ง๊ธฐ ์ฌ์์ง๋ค.
ํ ์คํธ ์ฝ๋๊ฐ ๋ฐฉ์น๋์ด ๋ง๊ฐ์ง๋ฉด ์ค์ ์ฝ๋๋ ๋ง๊ฐ์ง๋ค. ํ ์คํธ ์ฝ๋๋ฅผ ๊นจ๋์ด ์ ์งํ์.
๐ ๋๋์ .
- TDD๋ฅผ ์๋ ํ์ง ๋ชปํ์ฌ์ ์๊ธด ํ ์คํธ ์ฝ๋์ ๋ํด ๋ฏธํกํ ๋ถ๋ถ์ ์ฑ์ธ ์ ์์๋ค.
- ์ง์ ๋ถํ ํ ์คํธ ์ฝ๋๋ฅผ ์ง ์๋ ๊ฑฐ์ ๋ํด ๋ฐ์ฑํ๋ค.
- FIRST ๊ท์น์์๋ ๋๋ถ๋ถ์ ๊ท์น์ ์งํค์ง ๋ชปํ๋ ๊ฑฐ์ ๋ํด ๋ฐ์ฑํ๋ค..
- ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑ ํ ์๋ ๊นจ๋์ด ์ ์งํ์ง ๋ชปํ ๊ฑฐ์ ๋ฐ์ฑํ๋ค...
- TDD๋ฅผ ์ฝ์ด์ผ๊ฒ ๋ค!
'Study > CleanCode' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Study][CleanCode - 3] 11. ์์คํ (0) | 2022.08.04 |
---|---|
[Study][CleanCode - 3] 10. ํด๋์ค (0) | 2022.08.01 |
[Study][CleanCode - 2] 8. ๊ฒฝ๊ณ (0) | 2022.07.16 |
[Study][CleanCode - 2] 7. ์ค๋ฅ ์ฒ๋ฆฌ (0) | 2022.07.16 |
[Study][CleanCode - 2] 6. ๊ฐ์ฒด์ ์๋ฃ๊ตฌ์กฐ (0) | 2022.07.14 |