โฝTDD ๋ ๋ฌด์์ธ๊ฐ?
-TDD๋ Test Driven Development ์ ์ฝ์๋ก 'ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ' ์ด๋ผ๊ณ ํฉ๋๋ค.
๋ฐ๋ณตํ ์คํธ๋ฅผ ์ด์ฉํ ์ํํธ์จ์ด ๋ฐฉ๋ฒ๋ก ์ผ๋ก,
์์ ๋จ์์ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ๊ณ ์ด๋ฅผ ํต๊ณผํ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ ๋จ๊ณ๋ฅผ ๋ฐ๋ณตํ์ฌ ๊ตฌํํฉ๋๋ค.
์งง์ ๊ฐ๋ฐ ์ฃผ๊ธฐ์ ๋ฐ๋ณต์ ์์กดํ๋ ๊ฐ๋ฐ ํ๋ก์ธ์ค์ด๋ฉฐ
์ ์์ผ(Agile software development) ๋ฐฉ๋ฒ๋ก ์ค ํ๋์ธ
eXtream Programming(XP)์ 'Test-First' ๊ฐ๋ ์ ๊ธฐ๋ฐ์ ๋ ๋จ์ํ ์ค๊ณ๋ฅผ ์ค์์ํ๋ค.
์ด ๊ธฐ๋ฒ์ ๊ฐ๋ฐํ๊ฑฐ๋ '์ฌ๋ฐ๊ฒฌ' ํ ๊ฒ์ผ๋ก ์ธ์ ๋๋ Kent Beck์ 2003๋ ์ TDD๊ฐ ๋จ์ํ ์ค๊ณ๋ฅผ ์ฅ๋ คํ๊ณ ์์ ๊ฐ์ ๋ถ์ด๋ฃ์ด ์ค๋ค๊ณ ๋งํ์๋ค.
โฝTDD ๊ฐ๋ฐ์ฃผ๊ธฐ
<Red> ๋จ๊ณ์์๋ ์คํจํ๋ ํ ์คํธ ์ฝ๋๋ฅผ ๋จผ์ ์์ํฉ๋๋ค.
<Green> ๋จ๊ณ์์๋ ํ ์คํธ ์ฝ๋๋ฅผ ์ฑ๊ณต์ํค๊ธฐ ์ํ ์ค์ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
<Yellow> ๋จ๊ณ์์๋ ์ค๋ณต ์ฝ๋๋ฅผ ์ ๊ฑฐ, ์ผ๋ฐํ ๋ฑ์ ๋ฆฌํฉํ ๋ง์ ์ํํฉ๋๋ค.
์ค์ํ ๊ฒ์ ์คํจํ๋ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ๋๊น์ง ์ค์ ์ฝ๋๋ฅผ ์์ฑํ์ง ์๋ ๊ฒ๊ณผ,
์คํจํ๋ ํ ์คํธ๋ฅผ ํต๊ณผํ ์ ๋์ ์ต์ ์ค์ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ ๊ฒ์ ๋๋ค.
์ด๋ฅผ ํตํด, ์ค์ ์ฝ๋์ ๋ํด ๊ธฐ๋๋๋ ๋ฐ๋ฅผ ๋ณด๋ค ๋ช ํํ๊ฒ ์ ์ํจ์ผ๋ก์จ ๋ถํ์ํ ์ค๊ณ๋ฅผ ํผํ ์ ์๊ณ , ์ ํํ ์๊ตฌ ์ฌํญ์ ์ง์คํ ์ ์๋ค.
โฝ์ผ๋ฐ ๊ฐ๋ฐ ๋ฐฉ์
- ๋ณดํต์ ๊ฐ๋ฐ ๋ฐฉ์์ '์๊ตฌ์ฌํญ ๋ถ์ -> ์ค๊ณ -> ๊ฐ๋ฐ -> ํ ์คํธ -> ๋ฐฐํฌ' ์ ํํ์ ๊ฐ๋ฐ ์ฃผ๊ธฐ๋ฅผ ๊ฐ๋๋ฐ ์ด๋ฌํ ๋ฐฉ์์ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋๋ฆฌ๊ฒ ํ๋ ์ ์ฌ์ ์ํ์ด ์กด์ฌํฉ๋๋ค.
1. ์๋น์์ ์๊ตฌ์ฌํญ์ด ์ฒ์๋ถํฐ ๋ช ํํ์ง ์์ ์ ์๋ค.
2. ๋ฐ๋ผ์ ์ฒ์๋ถํฐ ์๋ฒฝํ ์ค๊ณ๋ ์ด๋ ต๋ค.
3. ์์ฒด ๋ฒ๊ทธ ๊ฒ์ถ ๋ฅ๋ ฅ ์ ํ ๋๋ ์์ค์ฝ๋์ ํ์ง์ด ์ ํ๋ ์ ์๋ค.
4. ์์ฒด ํ ์คํธ ๋น์ฉ์ด ์ฆ๊ฐํ ์ ์๋ค.
์ด๋ฌํ ๋ฌธ์ ์ ๋ค์ด ๋ฐ์๋๋ ์ด์ ๋ ๊ฐ๋จํ๊ฒ ๋งํด์, ์ด๋ ํ๋ก์ ํธ๋ ์ด๊ธฐ ์ค๊ณ๊ฐ ์๋ฒฝํ๋ค๊ณ ๋งํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ณ ๊ฐ์ ์๊ตฌ์ฌํญ ๋๋ ๋์์ธ์ ์ค๋ฅ ๋ฑ ๋ง์ ์ธ๋ถ ๋๋ ๋ด๋ถ ์กฐ๊ฑด์ ์ํด ์ฌ์ค๊ณํ์ฌ ์ ์ง์ ์ผ๋ก ์๋ฒฝํ ์ค๊ณ๋ก ๋์๊ฐ๋ค.
์ฌ์ค๊ณ๋ก ์ธํด ๊ฐ๋ฐ์๋ ์ฝ๋๋ฅผ ์ฝ์ , ์์ , ์ญ์ ํ๋ ๊ณผ์ ์์ ๋ถํ์ํ ์ฝ๋๊ฐ ๋จ๊ฑฐ๋ ์ค๋ณต์ฒ๋ฆฌ ๋ ๊ฐ๋ฅ์ฑ์ด ํฌ๋ค.
โ๊ฒฐ๋ก ์ ์ผ๋ก ์ด๋ฌํ ์ฝ๋๋ค์ ์ฌ์ฌ์ฉ์ด ์ด๋ ต๊ณ ์ ์ง๋ณด์๋ฅผ ์ด๋ ต๊ฒ ๋ง๋ ๋ค.
์์ ๋ถ๋ถ์ ๊ธฐ๋ฅ ์์ ์๋ ๋ชจ๋ ๋ถ๋ถ์ ํ ์คํธํด์ผ ํ๋ฏ๋ก ์ ์ฒด์ ์ธ ๋ฒ๊ทธ๋ฅผ ๊ฒ์ถํ๊ธฐ ์ด๋ ค์์ง๋ค.
๋ฐ๋ผ์ ์์ฒด ๋ฒ๊ทธ ๊ฒ์ถ ๋ฅ๋ ฅ์ด ์ ํ๋๋ค.
๊ทธ ๊ฒฐ๊ณผ ์ด๋์ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ ์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ์๋ชป๋ ์ฝ๋๋ ๊ณ ์น์ง ์์ผ๋ ค ํ๋ ํ์์ด ๋ํ๋๊ณ ์ด ํ์์ ์์ค์ฝ๋์ ํ์ง ์ ํ์ ์ง๊ฒฐ๋๋ค.
์ด๋ ๊ฒ ์์ ์์ ์๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ค์ ํ ์คํธํด์ผ ํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ฌ ์์ฒด ํ ์คํธ ๋น์ฉ์ด ์ฆ๊ฐ๋ฉ๋๋ค.
โฝTDD ๊ฐ๋ฐ ๋ฐฉ์
- TDD์ ์ผ๋ฐ์ ์ธ ๊ฐ๋ฐ ๋ฐฉ์์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ๋ค์ ์ค์ ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ ์ ์ด๋ค.
๋์์ธ(์ค๊ณ) ๋จ๊ณ์์ ํ๋ก๊ทธ๋๋ฐ ๋ชฉ์ ์ ๋ฐ๋์ ๋ฏธ๋ฆฌ ์ ์ํด์ผ๋ง ํ๊ณ , ๋ ๋ฌด์์ ํ ์คํธํด์ผ ํ ์ง ๋ฏธ๋ฆฌ ์ ์(ํ ์คํธ์ผ์ด์ค ์์ฑ) ํด์ผ๋ง ํ๋ค.
ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋์ค์ ๋ฐ์ํ๋ ์์ธ ์ฌํญ(๋ฒ๊ทธ,์์ ์ฌํญ)๋ค์ ํ ์คํธ ์ผ์ด์ค์ ์ถ๊ฐํ๊ณ ์ค๊ณ๋ฅผ ๊ฐ์ ํ๋ค.
์ดํ ํ ์คํธ๊ฐ ํต๊ณผ๋ ์ฝ๋๋ง์ ์ฝ๋ ๊ฐ๋ฐ ๋จ๊ณ์์ ์ค์ ์ฝ๋๋ก ์์ฑํ๋ค.
๐์ด๋ฌํ ๋ฐ๋ณต์ ์ธ ๋จ๊ณ๊ฐ ์งํ๋๋ฉด์ ์์ฐ์ค๋ฝ๊ฒ ์ฝ๋์ ๋ฒ๊ทธ๊ฐ ์ค์ด๋ค๊ณ , ์์ค์ฝ๋๋ ๊ฐ๊ฒฐํด์ง๋ค.
๋ํ, ํ ์คํธ ์ผ์ด์ค ์์ฑ์ผ๋ก ์ธํด ์์ฐ์ค๋ฝ๊ฒ ์ค๊ณ๊ฐ ๊ฐ์ ๋จ์ผ๋ก ์ฌ์ค๊ณ ์๊ฐ์ด ์ ๊ฐ๋๋ค.
โฝTDD์ ๋ํ์ ์ธ Tool 'JUnit'
JUnit ์ด๋?
- JUnit์ ํ์ฌ ์ ์ธ๊ณ์ ์ผ๋ก ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ 'Java ๋จ์ ํ ์คํธ ํ๋ ์์ํฌ' ์ด๋ค.
์๋ฆญ ๊ฐ๋ง์ ์ผํธ ๋ฒก์ด ํ์์์ผฐ๋ค.
JUnit์ ์์์ผ๋ก CUnit(C์ธ์ด), CppUnit(C++), PyUnit(Python) ๋ฑ xUnit ํ๋ ์์ํฌ๊ฐ ํ์ํ๊ฒ ๋์๋ค.
xUnit ์ด๋ฆ
|
ํด๋น ์ธ์ด
|
๊ด๋ จ ์ฌ์ดํธ
|
CUnit
|
C
|
|
CppUnit
|
C++
|
|
PHPUnit
|
PHP
|
|
PyUnit
|
Python
|
|
JUnit
|
Java
|
โฝTDD ๊ฐ๋ฐ ๋ฐฉ์์ ์ฅ์
1. ๊ฐ์ฒด์งํฅ์ ์ธ ์ฝ๋ ์์ฐ
2. ์ฌ์ค๊ณ ์๊ฐ์ ๋จ์ถ
3. ๋๋ฒ๊น ์๊ฐ์ ๋จ์ถ
4. ํ ์คํธ ๋ฌธ์์ ๋์ฒด ๊ฐ๋ฅ
5. ์ถ๊ฐ ๊ตฌํ์ ์ฉ์ดํจ
โฝTDD ๊ฐ๋ฐ ๋ฐฉ์์ ๋จ์
1. ๊ฐ์ฅ ํฐ ๋จ์ ์ ๋ฐ๋ก ์์ฐ์ฑ์ ์ ํ์ด๋ค.
- ๊ฐ๋ฐ ์๋๊ฐ ๋๋ ค์ง๋ค๊ณ ์๊ฐํ๋ ์ฌ๋์ด ๋ง๊ธฐ ๋๋ฌธ์ TDD์ ๋ํด ๋ฐ์ ๋ฐ์ ํ๋ค.
์๋ํ๋ฉด ์ฒ์๋ถํฐ 2๊ฐ์ ์ฝ๋๋ฅผ ์ง์ผํ๊ณ , ์ค๊ฐ์ค๊ฐ ํ ์คํธ๋ฅผ ํ๋ฉด์ ๊ณ ์ณ๋๊ฐ์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
TDD๋ฐฉ์์ ๊ฐ๋ฐ ์๊ฐ์ ์ผ๋ฐ์ ์ธ ๊ฐ๋ฐ ๋ฐฉ์์ ๋นํด ๋๋ต 10~30% ์ ๋๋ก ๋์ด๋๋ค.
- SI ํ๋ก์ ํธ์์๋ ์ํธ์ผ์จ์ด์ ํ์ง๋ณด๋ค ๋ฉ๊ธฐ์ผ ์ค์๊ฐ ํจ์ฌ ์ค์ํ๊ธฐ ๋๋ฌธ์ TDD ๋ฐฉ์์ ์ ์ฌ์ฉํ์ง ์๋๋ค.
โฝTDD ๋ฅผ ํ๊ธฐ ์ด๋ ค์ด ์ด์ ๋?
1. ์์ ์ ๊ฐ๋ฐํ๋ ๋ฐฉ์์ ๋ง์ด ๋ฐ๊ฟ์ผ ํ๋ค.
- ๋ชธ์ ์ฒด๋ํ ๊ฒ์ด ๋ง์ ์๋ก ๋ฐ๊พธ๊ธฐ๊ฐ ์ด๋ ต๋ค.
- ์คํ๋ ค ๊ฐ๋ฐ์ ๋ณ๋ก ํด๋ณด์ง ์์ ์ฌ๋๋ค์๊ฒ ์ ์ฉํ๊ธฐ๊ฐ ์ฝ๋ค.
2. TDD๋ ์ด๋ ๊ฒ ํด์ผ๋๋ค๋ ์ด๋ฏธ์ง/ํ์ด ์๋ค.
- ๋ฐ๋์ ํด(๋จ์ ํ ์คํธ ํ๋ ์์ํฌ)๋ฅผ ์จ์ ๊ฐ๋ฐํด์ผ ๋๋ค. ๋ผ๊ณ ์๊ฐํ๋ค.
- ์ด๋ฌํ ๊ท์น์ ์ฝ๋งค์ด๋ ๊ฒ์ ์ ์์ผ ๋ฐฉ์์ด ์๋๋ค.
- ๊ฒฐ๊ตญ์ ๊ท์น์ ์ฝ๋งค์ฌ ๋๊ฐ์ ํ ์คํธ๋ฅผ copy&paste ํ๋ค.
- ๋๊ตฌ/๊ท์น์ ์ง์ฐฉํ๋ค ๋ณด๋, ์ด๋ ค์์ง๋ค.
โฝTDD ๋ฅผ ์ํ๋ ๋ฐฉ๋ฒ
1. ์ค์ค๋ก '์ด๋ป๊ฒ ํด์ผ ๋ด๊ฐ ํ๋ ์์ ์ ๋ํด ํ๋ ฅ์ด ์ ์ผ์ด๋๊ฒ ํ ๊น' ๋ฅผ ๊ณ ๋ฏผํ๋ฉด์ ๊ณ์ํด์ ๋ณธ์ธ์ด ์ผํ๋ ๋ฐฉ์์ ์ ๊ทธ๋ ์ด๋ ํด์ผ ํ๋ค.
2. ์ค๋ณต์ ์ผ๋ก ํ๋ ๋ ธ๋ ฅ๋ค์ ์กฐ๊ธ ๋ ์๋ํํ๋๋ก ์ ๊ทธ๋ ์ด๋ํ๋ฉด ๋ฐ์ ํ ์ ์๋ค.
์ถ์ฒ:https://gmlwjd9405.github.io/2018/06/03/agile-tdd.html
'IT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
SSL ์ธ์ฆ์๋ ๋ฌด์์ธ๊ฐ์? (0) | 2022.03.19 |
---|---|
arm ์ด๋ ๋ฌด์์ธ๊ฐ? - M1 ์ ํ์๋ฐฐ๊ฒฝ (0) | 2022.03.17 |
์ ์์ผ(Agile) ๋ฐฉ๋ฒ๋ก ์ด๋ ๋ฌด์์ธ๊ฐ? (0) | 2022.03.07 |
error: rpc failed; curl 92 http/2 stream 0 was not closed cleanly: cancel (err 8) (0) | 2022.02.21 |
ora-01861: literal does not match format string (0) | 2022.02.15 |