https://festa.io/events/3791
์ฃผ๋์ด ๊ฐ๋ฐ์๋ฅผ ์ํ TPO for TDD
"๊ฒฝํ์ ์์ถํ ์๊ณ ๋ฆฌ์ฆ ๋งํ ๊ฒ์ด ์๋ค." - ์ ๋ณด๋ ๊ฐ์ฌ๋
TDD ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก ์ ์งํ
- ๊ตฌ์กฐ์ ๊ธฐ๋ฒ (1970 ๋ณต์ก์ฑ ๊ทน๋ณต)
- monologic
- ์ ๋ณด๊ณตํ ๊ธฐ๋ฒ (1980 ์๋ํ)
- ๊ฐ์ฒด์งํฅ ๊ธฐ๋ฒ (1990 ๋ชจ๋ํ)
- ์ฌ์ฉ์ ๊ด์ ์ ์๋น์ค ์ค๊ณ
- CBD ๊ธฐ๋ฒ (2000 ์ฌ์ฌ์ฉ)
- component ๊ฐ๋ฐ, ์ฌ์ฌ์ฑ ์ฆ๊ฐ
- Agile ๊ธฐ๋ฒ (2010 ์ ์์ฑ)
- TDD ๋ฐฉ๋ฒ๋ก **
- MSA (micro service architecture)
์ผ๋ฐ์ ์ธ ๊ฐ๋ฐ ๋ฐฉ์
- ๊ณํ - ๊ณํ์
- ์๊ตฌ๋ถ์ - ์๊ตฌ ๋ถ์
- (TDD) ์ค๊ณ - ์ค๊ณ์
- (TDD) ๊ตฌํ - ์์์ฝ๋
- (TDD) ํ ์คํธ - ์คํ ํ ์คํธ ๋ณด๊ณ ์
- ์ด์ ์ ์ง๋ณด์
TDD (Test Driven Development)
- ๊ตฌํ ์ค๊ณ - > ๊ฐ์ ์คํจํ๋ ํ
์คํธ ์ถ๊ฐ -> ํ
์คํธ ํต๊ณผ -> ๊ตฌํ ์ค๊ณ ...
RED : ํด๋น ๊ธฐ๋ฅ์ด ์ ์์ ์ผ๋ก ๋์ํ๋ ์ง ๊ฒ์ฆ
GREEN : ํ ์คํธ๋ฅผ ํต๊ณผํ๋ ๋ฐ ์ฑ๊ณตํ๋ ๋จ๊ณ
REFACTOR : ๊ฐ๋ฐ์๋ ๋ณ์ ์ด๋ฆ์ ๋ณ๊ฒฝํ๊ณ ๊ตฌํ์ ์์ฝํ๊ณ ์๊ณ ๋ฆฌ์ฆ์ ๋ณ๊ฒฝ
Example (๋น ๋ฅธ ์ฝ๋ ์์ฑ์ ๋ชฉํ๋ก ์์ฑ)
- ๋ณผ๋ง ๊ฒ์ ์์
- ๋ณผ๋ง ๊ฒ์์ด ์๋ค๋ ํ ์์ฑ (์ต์ํ์ class ๋ง ๋ช ์) - ๊ฒ์ ์์ "๋ณผ๋ง"์ด๋ผ๋ ๊ตฌํ์ฒด ์์ฑ - ํ ์คํธ ํต๊ณผ!
- "๋ณผ๋ง" ์์ ๊ณต์ ๊ตด๋ฆฌ๋ ํจ์ ๊ตฌํ - ํ ์คํธ ํต๊ณผ!
- ๋ฆฌํฉ ํ ๋ง ๋จ๊ณ ๊ณต์ ๊ตด๋ฆฌ๋ ์์ ๊ณผ game ์ ์ธ ๊ธฐ๋ฅ์ด ์ค๋ณต์ผ๋ก ์๋ํ ๊ฒฝ์ฐ game = Game ์ ๊ฑฐ ์์ setUp()
- ์คํจํ๋ ํ
์คํธ ์ถ๊ณผ ํ
์คํธ ํต๊ณผ ์ฌ๋ถ / 0 ์ ์ด๋๋ "gutter game" ํ
์คํธ ์ถ๊ฐ
- return ๊ฐ์ด 0์ด๋๋ ๊ฒ์ ์์ฑ - ํ ์คํธ ํต๊ณผ!
- ๋ค์ refactoring ์ํ
- gutter_game refactoring ~
- Extract Method
TDD์ ํน์ง
TDD์ ์ฅ์
- ์ฝ๋ ํ์ง ํฅ์
- ๋ฐ๋ณต์ ์ธ ํ ์คํธ๊ฐ ์ฌ์์ง๋ฏ๋ก ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅํ ์ฝ๋ ์์ฑ
- ํ์ฅ ์ฉ์ด, ๊ณ ํ์ง์ ์ฝ๋ ์์ฐ
- ๋น ๋ฅธ ๊ฐ๋ฐ
- ์ฅ๊ธฐ์ ์ผ๋ก ์ฝ๋๊ฐ ๋ณต์กํด ์ง์๋ก ์ข์
- ๊ณ ๋ํ์ ๋์์ ํ ์คํธ๊ฐ ์ด๋ฃจ์ด์ ธ์ ์ด๊ธฐ์ ์์ ์์ ์ด ๊ฐ๋ฅ
- ํ์
์ ์ฉ์ด
- ๊ฐ๋ฐ ๋จ๊ณ์์๋ ์๊ตฌ ์ฌํญ์ ๋ํ ํ ์คํธ ์ฝ๋๊ฐ ์กด์ฌ
- Stub
- ํ ์คํธ ์ค์ธ ํด๋์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณต ์ํ ํ์ธ์ ์ฌ์ฉ
- ํ ์คํธ์ ์คํจํ ์ ์์
- Mock
- ํ ์คํธ ์ค์ธ ํด๋์ค์ ์ํด ํธ์ถ ๋์ ํ์ธ์ ์ฌ์ฉ
- ํ ์คํธ์ ์คํจํ ์ ์์
- ๋ฐ์ดํฐ + ๊ตฌํ์ ์ ๊ณต
-
- atomic stomic Fack
TDD์ ๋จ์
- ์ด๊ธฐ ํฌ์์๊ฐ
- ํ ์คํธ๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ด๊ธฐ ํฌ์์๊ฐ์ด ํ์ํจ
- **ํ
์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ด๋ ค์
- ํน์ ์๊ตฌ ์ฌํญ์ ๊ฒฝ์ฐ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ด๋ ค์ ( ์ธ๋ถ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์, ์์ข ์ฑ์ด ๋ง์ ๊ฒฝ์ฐ)
- ๋๋ฆฐ ๊ฐ๋ฐ
- 1๋ฒ ์์ฑํ ์ฝ๋๋ฅผ ์ฌ๋ฌ๋ฒ์ ๋๋ ์ฌ์ฉ
TDD๋ ํญ์ ์ณ์ง ์๋ค
TDD์ ๊ดํ ํธ๊ฒฌ ๋ฐ๋ก ์ก๊ธฐ
- TDD ๋ฌด์กฐ์ ํด์ผ ํ๋์?
- ์์ ์ผ์ ๊ณผ ์์์ ๊ณ ๋ คํด์ ๊ฒฐ์ ํ์
- ์ด๊ธฐ ๋น์ฉ์ ๋ค ๋ง์ด ๋ค ์ ์์ผ๋ ์ ์ฒด์ ์ผ๋ก ๋น์ฉ์ด ์ ์ง์ ์ผ๋ก ๋์ด๋์ง ์๋ค.
- TDD๋ ๋ฒ๊ทธ๋ฅผ ๋ฐ๋ฉธํด์ฃผ๋์?
- ๋ฒ๊ทธ๋ ๋น ๋ฅด๊ณ ํจ๊ณผ์ ์ผ๋ก ๊ฐ์ ํ ์ ์๋๋ก ํ๋ก๊ทธ๋๋จธ๋ฅผ ๋์์ค ์ ์์ผ๋, ํ๊ณ ์กด์ฌ
- TDD ๋์
์ ์
๋ฌด ์๋๊ฐ ๋๋ ค์ง๋์?
- TDD๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ํ์ํ ์ด๊ธฐ ์์์ด ๋ฏธ์งํด์ ์๋๊ฐ ๋์ง ์๋๋ค๊ณ ๋๊ปด์ง๋ ๊ฑฐ๋ค.
- TDD์์ฒด๊ฐ ๋ชฉ์ ์ด ๋์ด์๋ ์ ๋ ์๋จ, ๊ณต๋ ๋ชฉํ๋ฅผ ํจ์จ์ ์ผ๋ก ๋ฌ์ฑํ๊ธฐ ์ํ ๋๊ตฌ ์ค์ ํ๋์ด๋ค.
BDD, DDD ๋ง๋ณด๊ธฐ
- BDD (Behavior Driven Development)
- TDD๋ฅผ ๊ทผ๊ฐ์ผ๋ก ํ์๋ ๊ฐ๋ฐ
- TDD๊ฐ ํ ์คํธ ์์ฒด์ ์ง์คํ๋ ๋ฐ๋ฉด, ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ์ ์ง์คํ์ฌ ํ ์คํธ ์ผ์ด์ค ๊ฐ๋ฐ
- TDD์ ๊ฒฐํฉํด ์๋๋ฆฌ์ค ๊ตฌ์ฑ
- ํ ์คํธ ์ผ์ด์ค ์์ฒด๊ฐ ์๊ตฌ์ฌํญ์ด ๋๋๋ก ๊ฐ๋ฐํ๋ ๋ฐฉ์
- DDD (Domain Driven Development)
- ๋๋ฉ์ธ ์ฃผ๋ ๊ฐ๋ฐ
- ์์ํ ๋๋ฉ์ธ์ ๋ชจ๋ธ๊ณผ ๋ก์ง์ ์ง์ค
- ๋ถ์ ์์ ๊ณผ ์ค๊ณ, ๊ตฌํ๊น์ง ํต์ผ๋ ๋ฐฉ์
- ๋๋ฉ์ธ ๋ชจ๋ธ๋ถํฐ ์ฝ๋๊น์ง ํฅ์
- ํจ๊ป ์์ง์ด๋ ๊ตฌ์กฐ์ ๋ชจ๋ธ์ ์งํฅ
์ ์คํจ ํ๋๊ฐ?
์ฌ์ฅ๋ : "์ฐ๋ฆฌ๋ ์ ์์ผ ๊ทธ๊ฑฐ ํด์ผ๋์ง ์์๊น?"
- ์ ์์ผ์ ์ ์ฉํ ๋ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ์งํ๋ ํ๋ก์ ํธ์ ๊ฐ๋ฐ ๊ตฌ์ฑ์ ๋น์ฆ๋์ค ์ดํด ๊ด๊ณ์์ ๋ฐ๋ผ์
- ์ ์์ผ์ ์ ์ฐํ๊ฒ ์ ์ฉํ๋ ๊ฒ์ด๋ค.
- ์ ์์ผ์ด ์ ๋ต์ด ์๋๊ธฐ ๋๋ฌธ์ ์กฐ์ง๊ณผ ์ด์ธ๋ฆฌ๋ ํ๋ก์ธ์ค๋ฅผ ๊ฐ๋ฐ
์ฑ๊ณต ์ฌ๋ก - ๋ ๊ฑฐ์ ํ๋ก์ ํธ
์์ 1
- ๋จ์ ํ ์คํธ ์์ด ๋ช๋ ์ ์ ์์ฑ๋ ํจ์๋ฅผ ์ฌ์ฉํ๋ ์ ๊ธฐ๋ฅ์ ๊ฐ๋ฐ
- ์ด์ ์ฝ๋์ ๋ํ ๋จ์ ํ ์คํธ ์์ฑ ์ ๊น์ง ๋ฐฐํฌ ํ ์ ์์
Solution )
- ๋ ๊ฑฐ์ ์ฝ๋๋ฅผ ๋ธ๋ ๋ฐ์ค๋ก ์ทจ๊ธ
- ๊ธฐ์กด ์ฝ๋์ ๋ํ ์ ๋ ํ ์คํธ๋ฅผ ์์ฑ
- ๊ธฐ์กด ์ฝ๋์ ๋ํ ๊ทธ๋ฆฐ ์ํ๋ฅผ ์ ์งํ๋ฉด์ ๋ฆฌํฉํ ๋ง
- ์ด ํ ์ ๊ธฐ๋ฅ์ TDD ๊ธฐ๋ฐ์ผ๋ก ์์ ์ฌ๋ฆผ
์์ 2
- ์น ๋๋ผ์ด๋ธ์ ํ์ผ์ ์ฌ๋ฆฌ๋ ๊ธฐ๋ฅ์ ๊ฐ๋ฐ
- ์ ๋ก๋ ๋๋ ํ์ผ์ ํฌ๋งท์ด ๋ค์ํจ์ผ๋ก์จ ๋ค์ํ ์ ๋ก๋ ๋ฐฉ๋ฒ์ด ํ์
Solution )
- ๋ชจ๋ ์ฝ๋๋ ์ปดํฌ์ง์ ์ด๋ค!
- ๊ฐ ํ์ผ ํ์ ์กด์ฌ
์์ 3
- ์ฌ์ฉ์๊ฐ ๊ธ์ฆํ๋ฉฐ ๋ฒ๊ทธ ๋ฐ๊ฒฌ - ํซํฝ์ค๋ฅผ ์ ๊ณต
Solution )
- ๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ฉ๋๊ณ ๊ณ ๊ฐ ์ง์ ํตํ๋์ด ๋๋ฐฐ๊ฐ ๋จ
- ํซ ํฝ์ค๊ฐ ๊ธฐ์กด์ ์ฝ๋๋ฅผ ๊นจ๋จ๋ฆผ
- ๋จธํผ์ ๋๋ฒ๊น ๋ฒ์น
- ๋จ์ ํ ์คํธ ์ด์ค์ ์ ์ฌ๊ฒํฌ - assert ๊ฒํ
- ์ฝ๋๊ฐ ๋ฌธ์ํ๋ ๋๋ก ์๋ํ๋ค๋ ์ฆ๊ฑฐ == ํ ์คํธ์ฝ๋
๊ฒฐ๋ก
- ์ฒ์ ํด๋ณด๋ ํ๋ก๊ทธ๋จ ์ฃผ์
- ๊ณ ๊ฐ์ด ์๊ตฌ ์ฌํญ์ด ๋ฐ๋ ์ ์๋ ํ๋ก์ ํธ
- ๊ฐ๋ฐํ๋ ์ค์ ์ฝ๋๋ฅผ ๋ง์ด ๋ฐ๊ฟ์ผ ๋๋ค๊ณ ์๊ฐํ๋ ๊ฒฝ์ฐ
- ๋ด๊ฐ ๊ฐ๋ฐํ๊ณ ์ด ์ฝ๋๋ฅผ ๋๊ฐ ์ ์ง ๋ณด์ ํ ์ง ๋ชจ๋ฅด๋ ๊ฒฝ์ฐ
ํ ์คํธ๋ ํ์ ์ปค๋ฒ๋ฆฌ์ง๋ ๋น์ฆ๋์ค ์ค์๋์ ์ํฉ์ ๋ฐ๋ผ์!
QnA
๋ฐ์ดํฐ ๋ถ์ ์ ํจํค์ง ์์กด์ฑ์ด ๋์๋ฐ TDD ์ ํจ ํ์ง?
- ์ ๊ธฐ์ ์ํฉ์ ๋ง์ถฐ ์ฌ์ฉ
- ์ค์ํ ๊ฒ์ ํ ์คํธ! ํ ์คํธ๋ ํ์์ด๋ฉฐ ๋ฐฉ๋ฒ๋ก ์ ์ํฉ์ ๋ง์ถฐ ์ ์ฉํ๋ผ
๋์ ๊ฒฝ์ฐ ๋ฐ๋ณต๋๋ EDA ๊ณผ์ ์ TDD๋ฅผ ๋์ ํ๋ฉด ์ฒ์ ๋์ ํ๊ธฐ ์ํด ํ ์คํธ ํ๊ฒฝ์ ์๊ฐ์ ๋ง์ด ์ก์๋จน์ด ๋ค๋ฅธ ๋ฐ์ดํฐ์์๋ ์ ํจํ ๊ฒ์ฆ์ ๋ฐ๋ณตํด์ผํ๋ค. ํ์ง๋ง ์ฒ์ ๊ตฌ์ถํด๋์ ํ ์คํธ ๊ณผ์ ์ ๋ค๋ฅธ ๋ฐ์ดํฐ์์๋ ์ ํจํ ๊ฒ์ ์ผ๋ก mockup์ ๋ง๋ ๋ค๋ฉด ์๊ฐ๋ ์ ์ฝํ๊ณ ๋ ๊ฑฐ์๋ฅผ ๋จ๊ฒจ ๊ณต์ ๊ฐ ๊ฐ๋ฅํ ์ฝ๋๋ก ํ์ฅํ ์ ์์ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
TDD๋ฅผ ์ฒ์ ์ ํ์ ๋ ์ค๋ฅ ์๋ ๊ฐ๋ฐ ๋จ๊ณ ๊ณผ์ ์ผ๋ก ์๊ฐํด ๋ณธ ๊ฐ์ ์ ์๋๊ณผ ๊ฐ์ด ์ด๊ฑฐ ๋ง๋ฅ์ด๊ตฌ๋ ์ถ์ด ๊ธฐ์ด์ ์ธ ๊ธฐ๋ฅ๋ง ์ฌ์ฉํ๊ณ ์๋๋ฐ ๊ฐ๋ฐ ์ง๊ตฐ์์๋ ์ ํ ์ฌ์ฉํ์ง ์๋ ๋ฐฉ๋ฒ๋ก ์ด๋ผ ํด์ ์ฐ๋ฌผ์์ ๊ฐ๊ตฌ๋ฆฌ๊ฐ ์ด๋ ๊ฒ ๋ฌด์งํ๊ตฌ ๋๊ผ๋ค.
'๐ Routine' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Running] Cadence ์ผ์ด๋์ค ๊ณต์ (0) | 2023.11.15 |
---|---|
[Google Search Console] ๋ฌธ์์ด์ ์ด์ค์ผ์ดํ ์ํ์ค๊ฐ ์๋ชป๋จ + Latex (0) | 2023.08.19 |
Pioneer : ํด ์ค๋(Paul H. O'Neill) (0) | 2023.08.03 |
Browser templates for Browser In The Browser (BITB) attack (0) | 2023.07.08 |
[OWASP-LLM] Top 10 List for Large Language Models version 0.1 - (10) Training Data Poisoning (0) | 2023.07.05 |