๐ 10๋ถ ํ
์ฝํก - ํผ์นด์ TDD์ ๋จ์ ํ
์คํธ๋ฅผ ๋ณด๊ณ ์ ๋ฆฌํ ๋ด์ฉ์ด๋ค.
TDD(Test Driven Development)๋?
ํ
์คํธ ์ฝ๋๋ฅผ ๋จผ์ ๋ง๋ค๊ณ , ์ค์ ํ๋ก๋์
์ฝ๋๋ฅผ ๋์ค์ ๋ง๋๋ ๊ฐ๋ฐ ๋ฐฉ๋ฒ์ ๋งํ๋ค.
- TDD์ ์ฐฝ์์์ธ ์ผํธ ๋ฐฑ -
"ํ๋ก๊ทธ๋จ์ ์์ฑํ๊ธฐ ์ ์ ํ
์คํธ๋ฅผ ๋จผ์ ํด๋ผ!
TDD ์ฌ์ดํด
TDD ๊ฐ๋ฐ ์ฌ์ดํด์ ๊ทธ๋ฆผ์ผ๋ก ๋ํ๋ธ ๊ฒ์ด๋ค.
- Red: ํ
์คํธ๋ฅผ ์คํจํ๋ค.
- Green: ํ
์คํธ๋ฅผ ์ฑ๊ณตํ ์ ์๊ฒ ํ๋ก๋์
์ฝ๋๋ฅผ ๊ตฌํํ๋ค.
- Refactor: ํ๋ก๋์
์ฝ๋์ ํ
์คํธ ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํ๋ค.
TDD๋ฅผ ์ฌ์ฉํ๋ ์ด์
- ํ
์คํธ ์ฝ๋์ ์ฅ์
- ๋ณํ์ ๋ํ ๋๋ ค์์ ์ค์ฌ์ค๋ค. (๋ฆฌํํ ๋ง์ด ํธํ๋ค)
- ๋๋ฒ๊น
์๊ฐ์ ์ค์ฌ์ค๋ค.
- ๋์ํ๋ ๋ฌธ์ ์ญํ ์ ํ๋ค.
- TDD์ ์ง์ ํ ์ฅ์ ๐
- TDD๋ฅผ ํ๋ฉด ์์ฐ์ค๋ ํ
์คํธ ์ปค๋ฒ๋ฆฌ์ง๊ฐ ๋์์ง๋ค.
TDD๋ฅผ ํ์ง ์์๋ ํ
์คํธ ์ปค๋ฒ๋ฆฌ์ง๊ฐ ๋์ ์ ์์ง๋ง TDD๋ฅผ ํ๋ฉด ๋ฌด์กฐ๊ฑด ํ
์คํธ ์ปค๋ฒ๋ฆฌ์ง๊ฐ ๋์์ง๋ค.
- ์ค๋ฒ ์์ง๋์ด๋ง(๋ฏธ๋์ ํ์ํ ๊ฒ ๊ฐ๋ค๋ ์ด์ ๋ก ๋ถํ์ํ ์ฝ๋๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํ๋ ๊ฒ)์ ๋ฐฉ์งํ๋ค.
- ์ค๊ณ์ ๋ํ ํผ๋๋ฐฑ์ด ๋น ๋ฅด๋ค.
TDD๋ ์ค๊ณ๋ฐฉ๋ฒ๋ก ์ด๋ค?
TDD๋ ์ค๊ณ๋ฐฉ๋ฒ๋ก ์ด ์๋๋ค.
- TDD๋ ๋์ ์์ง์ ์ ๋ํ์ง ์๋๋ค.
- TDD๋ ๋จ์ผ ์ฑ
์ ์์น๊ณผ ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น ์๋ฐฐ์ ์ด๋ค ์ ํธ๋ ์ฃผ์ง ์๋๋ค.
- TDD๋ ์ธํฐํ์ด์ค ์ผ๊ด์ฑ์ ๋์ถํ์ง ์๋๋ค.
- TDD์ ๋ฆฌํฉํ ๋ง ๋จ๊ณ๋ ์ข์ ๊ตฌ์กฐ๋ฅผ ์๋ดํ๊ฑฐ๋ ์ข์ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋๋ก ๊ฐ์ ํ์ง ์๋๋ค.
TDD๋ฅผ ์คํจํ๋ ์ด์ ?
TDD๋ฅผ ์คํจํ๋ ์ฌ๋์ด ํ๋ ํ
์คํธ๋...
- ์ฝ๋๊ฐ ์ด๋ฃจ๊ณ ์ ํ๋ ๊ฐ์น๋ ๊ธฐ๋ฅ์ ํ
์คํธํ๊ธฐ๋ณด๋ค ๊ทธ ๊ธฐ๋ฅ์ ์ด๋ป๊ฒ ๊ตฌํํ๊ณ ์๋์ง๋ฅผ ํ
์คํธํ๋ค.
- ๊ฒฐ๊ตญ ํ
์คํธ ์ผ์ด์ค๋ค์ด ๊ตฌํ์ฒด์ ๊ฒฐํฉ๋๊ฐ ๋์์ง๋ค.
- ๊ตฌํ์ฒด๋ค์ ๋ฆฌํํ ๋งํ๋ฉด ๊ฒฐํฉ๋์ด์๋ ํ
์คํธ ์ผ์ด์ค๋ค์ด ๋ชจ๋ ๊นจ์ ธ๋ฒ๋ฆฐ๋ค. ๊ฒฐ๊ตญ, ๊ตฌํ์ฒด๊ฐ ์๋ ์ธํฐํ์ด์ค๋ฅผ ํ
์คํธํด์ผ ๋๋ค.
ํ
์คํธ์ ๋ฒ์
- ์ธ์ ํ
์คํธ: ๊ณ ๊ฐ ๋๋ ๋๋ฆฌ์ธ์ด ์ ์๋์ด์ง ๋ชจ๋ ๋ชฉ์ ์ ๋ถํฉํ๋์ง ํ์ธํด๋ณด๊ณ ์ ํ๋ ๊ฒ์ฌ
- ๋ถํ ํ
์คํธ: ์ฃผ์ด์ง ๋จ์ ์๊ฐ ๋์ ์ดํ๋ฆฌ์ผ์ด์
์ด ์ผ๋ง๋ ๋ง์ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋์ง ๊ฒ์ฌ
- ๊ธฐ๋ฅ ํ
์คํธ: ๊ณต๊ฐ๋ API์ ๊ฐ์ฅ ๋ฐ๊นฅ์ชฝ์ ํด๋นํ๋ ์ฝ๋ ๊ฒ์ฌ (Controller, Security, http ๋ฑ)
- ํตํฉ ํ
์คํธ: ์ฌ๋ฌ ์์
๋จ์๊ฐ ์ฐ๊ณ๋ ์ํฌํ๋ก์ฐ๋ฅผ ํ
์คํธํ๊ธฐ ์ํ ์๋จ(๊ฐ์ฒด ๊ฐ, ์๋น์ค ๊ฐ, ์์คํ
๊ฐ)
- ๋จ์ ํ
์คํธ:
- ๊ฐ์ฅ ์์ ๋จ์์ ํ
์คํธ
- ์ผ๋ฐ์ ์ผ๋ก ๋ฉ์๋ ๋ ๋ฒจ
- ๊ฒ์ฆ์ด ํ์ํ ์ฝ๋์ ๋ํด ํ
์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ๋ ์ ์ฐจ ๋๋ ํ๋ก์ธ์ค
- Unit Testing์ ํ
์คํธ ์ฝ๋๊ฐ ๋ชฉ์ ์ฝ๋์ ์์ ์ฑ์ ์
์ฆ ํด์ฃผ๊ธฐ ๋๋ฌธ์, ํ
์คํธ ์ฝ๋ ๊ทธ ์์ฒด๋ง์ผ๋ก ์ฃผ์ํ ๊ฐ์น๊ฐ ์์
๋จ์ ํ
์คํธ ๋ชฉ์
- ๋ฌธ์ ์ ๋ฐ๊ฒฌ
๋จ์ ํ
์คํธ๋ ๊ฐ ๋จ์๊ฐ ์ ํํ๊ฒ ๋์ํ๋์ง ๊ฒ์ฌํ๊ณ ๋ฌธ์ ๊ฐ ๋ฐ์ ์ ์ด๋ ๋ถ๋ถ์ด ์๋ชป๋์๋์ง ์ฌ๋นจ๋ฆฌ ํ์ธํ ์ ์๊ฒ ํด์ค๋ค.
- ์ฌ์ด ๋ณ๊ฒฝ
์ด๋ป๊ฒ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๋๋ผ๋ ๋ฌธ์ ์ ์ ๊ธ๋ฐฉ ํ์
ํ ์ ์๋ค.
- ํ์ง ํฅ์
ํ๋์ ๋จ์ ํ
์คํธ๊ฐ ๋๋ฌด ๊ธธ์ด์ง๊ฑฐ๋ ๋ณต์กํด์ง๋ ๊ฒ์ ํ๋์ ํ
์คํธ ๋ฉ์๋์์ ๋๋ฌด ๋ง์ ๊ธฐ๋ฅ์ ์ํํ๊ธฐ ๋๋ฌธ์ ๋ฆฌํฉํ ๋ง์ด ํ์ํ๋ค๋ ๊ฒ์ ๋ฐ๋ก ์ ์ ์๋ค.
- ์ฝ๋์ ๋ฌธ์ํ
์์ธ ์ํฉ, ์ฉ๋, ์์กด ๊ด๊ณ๋ฅผ ํ๋์ ํ์
ํ ์ ์๋ค.
- ํญ์ ์ต์ ์ํ์ ๋จ์ ํ
์คํธ ์ฝ๋
๋จ์ ํ
์คํธ๋ ๋ฐฐํฌ๋๋ ์ฝ๋์ ์ผ์นํ๋ฏ๋ก ํญ์ ์ต์ ์ํ๋ก ์ ์ง๋๋ค.
์ข์ ๋จ์ ํ
์คํธ
F.I.R.S.T ๋ฒ์น
- F(Fast): ํ
์คํธ๋ฅผ ์์ฃผ ์ฌ์ฉํ๊ธฐ ์ํด์ ํ
์คํธ๋ ๋นจ๋ผ์ผ ํ๋ค.
- I(Independent): ํ
์คํธ๋ ์๋ก ์์กดํ๋ฉด ์๋๋ค. ํ๋์ ์คํจ๊ฐ ์ํฅ์ ์ฃผ๊ฒ ๋๊ณ ์คํจ์์ธ์ ํ์
ํ๊ธฐ ์ด๋ ค์์ง๋ค.
- R(Repeatable): ํ
์คํธ๋ฅผ ์ํํ์ง ๋ชปํ๋ ์ํฉ์ ์ง๋ฉดํ์ง ์๋๋ก, ํ
์คํธ์ ์คํจํ์ง ์๋๋ก ํ
์คํธ๋ ๋ฐ๋ณต ๊ฐ๋ฅํด์ผ ํ๋ค.
- S(Self-Validating): ํ
์คํธ๋ ์ฑ๊ณต ์๋๋ฉด ์คํจ๋ฅผ ๋ฌด์กฐ๊ฑด ๋ฐํํด์ผ ํ๋ค.
- T(Timely): ํ
์คํธ ์ฝ๋๋ฅผ ํ๋ก๋์
์ฝ๋๋ณด๋ค ๋จผ์ ์์ฑํด์ผ ํ๋ค.
BDD(Behavior Driven Development)๋?
BDD๋ ํ๋ ์ฃผ๋ ๊ฐ๋ฐ์ด๋ค.
BDD๋ TDD์์ ํ์๋ ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก ์ผ๋ก, ๊ฐ๋ฐ์์ ๋น๊ฐ๋ฐ์์ ํ์
๊ณผ์ ์ ๋
น์ฌ๋ธ ๋ฐฉ๋ฒ์ด๋ค.
BDD์ TDD๋ ์ํธ ๋ณด์์ ์ธ ๊ด๊ณ์ด๋ค.
BDD์ ํ
์คํธ์ผ์ด์ค๋ก ์๋๋ฆฌ์ค ๊ฒ์ฆ์ ํ๊ณ , ํด๋น ์๋๋ฆฌ์ค์์ ์ฌ์ฉํ๋ ๊ฐ ๋ชจ๋๋ค์ TDD์ ํ
์คํธ ์ผ์ด์ค๋ก ๊ฒ์ฆํ๋ ๋ฐฉ๋ฒ์ด ์ข๋ค.
์ฌ์ง ์ถ์ฒ: https://mingule.tistory.com/43
TDD์ BDD๋ฅผ ๋น๊ตํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
์ฌ์ง ์ถ์ฒ: https://mingule.tistory.com/43
๊ธฐ์
๋ค์ TDD์ BDD ์ด์ผ๊ธฐ
[์ฐธ๊ณ ์๋ฃ]
https://mingule.tistory.com/43
https://www.youtube.com/watch?v=3LMmPXoGI9Q&t=30s&ab_channel=%EC%9A%B0%EC%95%84%ED%95%9C%ED%85%8C%ED%81%AC