ํ ์คํธ๋ฅผ ์์์ผ ํ๋ ์ด์
TDD๋ผ๋ ๋ง์ ๋ค์ด๋ด์ ์ ์ฉํด๋ณด๊ณ ์ถ๋ค๋ฉด?
ํด๋ฆฐ์ฝ๋๊ฐ ๋ฌด์์ธ์ง ๊ธฐ์ค์ ์ก์๋ณด๊ณ ์ถ๋ค๋ฉด?
๋ฆฌํฉํฐ๋ง์ ์ธ์ , ์ด๋ป๊ฒ ํ๋ฉด ์ข์์ง ์๊ณ ์ถ๋ค๋ฉด?
์ด ๋ฌธ์๋ฅผ ๋ณด๊ณ ๋๋ฉด
TDD๋ก ๊ฐ๋จํ counter ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๋ค.
ํด๋ฆฐ์ฝ๋๋ก ๋์๊ฐ๊ธฐ ์ํ ๋ฆฌํฉํฐ๋ง ๊ธฐ์ค์ ์ ์ค์ค๋ก ๋ง๋ค์ด ๋๊ฐ ์ ์๋ค.
1. TDD(Test Driven Development)
TDD๋ ํ
์คํธ๋ฅผ ๋จผ์ ์์ฑํ๊ณ ๊ทธ ํ ์ค์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์
๋๋ค. TDD๋ ์ผํธ ๋ฐฑ(Kent Beck) ์ด ๊ฐ๋ฐ ํน์ ๋๋ฆฌ ์๋ฆฐ ๊ฐ๋
์
๋๋ค. ํํ๋ค ๊ฐ๋ฐ์ ์ ํ
์คํธ ์ฝ๋๋ฅผ ์ง๋๊ฒ TDD๋ผ๊ณ ๋ง ์๊ฐํ ์ ์๋๋ฐ, ๊ทธ๋ณด๋ค ๋ณธ์ง์ ์ธ ์๋ฏธ๋ ๋ฌธ์ ๋ฅผ ์ ์ํ๊ณ , ๊ทธ ํด๋ต์ ์ฐพ์๊ฐ๋ ๊ณผ์ ์ด๋ผ๋๊ฒ TDD์ ๊ธฐ๋ณธ ์ทจ์ง์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ
์คํธ๋๊ตฌ๋ ๊ทธ ์ฒ ํ์ ์ดํํ๋ ๋๊ตฌ์
๋๋ค. TDD๋ ์ฃผ๋ก ๊ฐ๋ฐ ์ฝ๋๋ฅผ ์ ๋์ผ๋ก ๊ตฌํํฉ๋๋ค. ์ฝ๋์ ๊ธฐ๋ฅ์ ๊ฒ์ฆํ๋๊ฒ ์ค์ํ ๋ชฉํ
์ฅ์
1.
ํ
์คํธ๋ฅผ ๋จผ์ ์์ฑํ๊ธฐ ๋๋ฌธ์ ์ ์ฒด ์ฝ๋์์ ์ผ๋ง๋ ๋ง์ ์ฝ๋๊ฐ ํ
์คํธ๋๋๊ฐ๋ฅผ ์ธก์ ํ๋ ํ
์คํธ ์ปค๋ฒ๋ฆฌ์ง ๋น์จ์ด ์์ฐ์ค๋ฝ๊ฒ ๋์์ง๋ค.
2.
ํ
์คํธ ๋๋ ๊ฒ๋ง ์ฝ๋๋ก ์์ฑํ๋ฏ๋ก ์ฝ๋๊ฐ ๋ฐฉ๋ํด์ง์ง ์๋๋ค.
3.
๋ฒ๊ทธ๋๋ฌธ์ ๋ฐ์ํ๋ ์๊ฐ ๋ญ๋น ์ค์ฌ์ฃผ๊ณ , ์ฝ๋๊ฐ ์ํ๋ ๋ฐ๋ฅผ ๋ช
ํํ ๋ฌ์ฑํ๋์ง ์ฝ๊ฒ ํ์ธ
๋ฐฉ๋ฒ
1.
ํ
์คํธ๋ฅผ ๋จผ์ ์์ฑํ๋ค. ๋ง์กฑํ๋ ์ฝ๋๊ฐ ์๋ ์ํ์ด๋ฏ๋ก ํ
์คํธ๋ ์คํจํจ
2.
ํ
์คํธ๋ฅผ ํต๊ณผํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
3.
๋ฆฌํฉํฐ๋ง: ์ค๋ณต์ด ๋ณด์ด๊ฑฐ๋ ๋ ๊ฐ์ ํ ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด ์ฝ๋๋ฅผ ๊ฐ์ ํ๋ค.
3๋ ์์น - ๋ก๋ฒํธ C. ๋งํด (๋ฐฅ ์์ ์จ, ํด๋ฆฐ ์ฝ๋)
1.
์คํจํ ํ
์คํธ๋ฅผ ์์ฑํ๊ธฐ ์ ์๋ ์๋ฌด๋ฐ ํ๋ก๋์
์ฝ๋๋ ์์ฑํ์ง ์๋๋ค.
2.
์คํจํ ํ
์คํธ ๋ง๊ณ ๋ ์์ฑํ์ง ์๋๋ค.
3.
ํ์ฌ ์คํจํ ํ
์คํธ๋ฅผ ๋ง์กฑ์ํค๋ ์ฝ๋ ์ธ์๋ ์์ฑํ์ง ์๋๋ค.
์ข์ ํ ์คํธ์ ์กฐ๊ฑด
โข
์คํ ์๋๊ฐ ๋นจ๋ผ์ผ ํจ.
โข
๋ด๋ถ ๊ตฌํ(ํ
์คํธํ์ง ์๋ ๋ถ๋ถ)์ ๋ณ๊ฒฝํ๋ค๊ณ ํด์ ํ
์คํธ๊ฐ ์คํจํ๋ฉด ์๋๋ค. ์ธํฐํ์ด์ค(์
์ถ๋ ฅ ์์ฃผ)๋ฅผ ์ค์ฌ์ผ๋ก ์์ฑ.
โข
๋ฒ๊ทธ๋ฅผ ์ฐพ์ ์ ์์ด์ผ ํ๋ค. ๋ง๋ค์๋ค๊ณ ๋์ด ์๋ ํ
์คํธ ์๋๋ฆฌ์ค๋ฅผ ์ ์ค์ ํด์ผ ํจ.
โข
ํ
์คํธ ๊ฒฐ๊ณผ์ ์ผ๊ด์ฑ์ด ์์ด์ผ ํ๋ค. ์ฝ๋๊ฐ ๋ณํ์ง ์์๋ค๋ฉด ํ
์คํธ ๊ฒฐ๊ณผ๋ ํญ์ ๋์ผ ํด์ผ ํ๋ค.
โข
์๋๊ฐ ๋ช
ํํ ๋๋ฌ๋์ผ ํ๋ค.
2. BDD(Behaviour Driven Development)
BDD์์๋ ํ
์คํธ ์ผ์ด์ค ์์ฒด๊ฐ ์๊ตฌ์ฌ์์ด ๋๋๋ก ๊ฐ๋ฐํฉ๋๋ค. ๊ทธ๋์ ์ ์ ์คํ ๋ฆฌ๋ฅผ ๋จผ์ ์์ฑํด์ผ ํ๋๋ฐ์.
TDD์ ๋ํ ์ฝ์นญ์ ํ๋ BDD์ ์๋ฒ์ง ๋ ๋
ธ์ค(Dan north)๋ TDD์์ ๋ค์๊ณผ ๊ฐ์ ๋ฒฝ์ ๋ง์ฃผ์ณค์์ต๋๋ค.
1.
ํ๋ก์ธ์ค์ ์ด๋์๋ถํฐ ์์ํด์ผ ํ๋๊ฐ(Where to start in the process).
2.
๋ฌด์์ ํ
์คํธํ๊ณ ๋ ๋ฌด์์ ํ์ง ๋ง์์ผ ํ๋๊ฐ(What to test and what not to test).
3.
ํ ๋ฒ์ ์ผ๋ง๋งํผ ํ
์คํธํด์ผ ํ๋๊ฐ(How much to test in on go).
4.
ํ
์คํธ๋ฅผ ์ด๋ป๊ฒ ๋ช
๋ช
ํด์ผ ํ๋๊ฐ(What to call the tests).
5.
ํ
์คํธ๊ฐ ์คํจํ๋ ์ด์ ์ ๋ํด ์ด๋ป๊ฒ ์ดํดํด์ผ ํ๋๊ฐ(How to understand why a test fails).
์ด์ ๋ ๋
ธ์ค์ ๊ทธ์ ๋๋ฃ๋ค์ ํ๋์ ํ
ํ๋ฆฟ์ ๋ง๋ค์ด ์ฑํํ๋๋ฐ ์๋์ ๊ฐ์์ต๋๋ค.
1.
ํน์ ๊ฐ์ด ์ฃผ์ด์ง๊ณ (Given)
2.
์ด๋ค ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋(When)
3.
๊ทธ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฅํด์ผ ํ๋ค(Then).
๋ ๋
ธ์ค๋ TDD ์ฝ์นญ์ ํ๋ ์์ โTestโ๋ผ๋ ๋จ์ด๋ฅผ ์ฌ์ฉํ์ง ์๋ ํธ์ด ์ฌ๋๋ค์ด ์ข๋ TDD์ ์๋ฆฌ๋ฅผ ์ดํดํ๋ ๋ฐ ๋์๋ ๊ฒ์ด๋ผ ์๊ฐํ๊ณ , Test๋ผ๋ ๊ฐ๋
๋ณด๋ค๋ โBehaviourโ๋ผ๋ ๊ฐ๋
์ ์ผ์ ๋ ํ
์คํธ ์ ๋์ ์๋๊ฐ ์ข๋ ๋ช
ํํด์ง๋ค๋ ๊ฒ์ ๊นจ๋ฌ์๋ค๊ณ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ๋ชจ๋ ํ
์คํธ ๋ฉ์๋๋ช
์ โshouldโ๋ฅผ ๋ฃ๊ธฐ ์์ํ์ต๋๋ค.
should๋ ์๋ฌธ๋ฒ์์ ์ด๋ค ํ์๋ฅผ ๊ธฐ๋ํ๋ค๋ ์กฐ๋์ฌ์
๋๋ค. ์ด๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ๋ ์ด์ ํ
์คํธ ๋ฉ์๋๋ฅผ ์์ฑํ ๋ ์ด๋ป๊ฒ ๋ช
๋ช
ํด์ผ ํ๋์ง ํผ๋์ ๋๋ผ์ง ์์๋ ๋๊ณ , ์ด๋ก์จ ํ
์คํธ ์ ๋์ ๊ธฐ๋๋๋ ํ์๋ค์ด ๋ช
ํํด์ก์ต๋๋ค. ๋ํ ์์ฑํ๋ ์ฝ๋๊ฐ ๊ธฐ๋ํ๋ ํ์์ ๋ง์ง ์๋๋ค๋ฉด ์ด๋ ๋ฆฌํฉํ ๋ง์ ์ง์กฐ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๋ฆฌํฉํ ๋ง์ ํตํด ๋ชจ๋ ๊ตฌํ ์ฝ๋์ ์๋ ๋ํ ๋ช
ํํด์ง๋๋ค.
์์ ์งํํ ๊ณ์ฐ๊ธฐ ๋ฏธ์
์ ์๋ก ๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
์คํ ๋ฆฌ
Given (์ฃผ์ด์ง ํ๊ฒฝ)
โข
์ ์ ์๊ฒ ๊ณ์ฐ๊ธฐ ํ๋ฉด์ด ๋ ๋๋ง ๋ ํ
When (ํ์)
โข
์ ์ ๊ฐ ์ซ์ 4์ ํด๋ฆญํ๋ค.
โข
์ ์ ๊ฐ + ๋ฒํผ์ ํด๋ฆญํ๋ค
โข
์ ์ ๊ฐ 2๋ฅผ ํด๋ฆญํ๋ค.
โข
์ ์ ๊ฐ = ์ ํด๋ฆญํ๋ค.
Then (๊ธฐ๋๊ฒฐ๊ณผ)
โข
๊ณ์ฐ๊ธฐ ํ๋ฉด์๋ 6์ด๋ผ๋ ์ซ์๊ฐ ๋ณด์ฌ์ง๋ค.
์ด๋ฐ ์ ์ ์ ํ์๋ฅผ ๊ทธ๋๋ก ํ
์คํธ์ฝ๋๋ฅผ ์ด์ฉํ์ฌ ์ฌํํฉ๋๋ค. ์ด์ฒ๋ผ BDD๋ ํ์๋ฅผ ์ค์ ์ผ๋ก ๊ธฐ์ ํ๋ฉด์ ํ
์คํธ๋ฅผ ํ๋๊ฑด๋ฐ, ์ฌ์ค์ TDD์ ์ฌ์ดํด์ ๋น์ทํฉ๋๋ค. ๊ทธ๋์ ํน์๋ BDD๋ฅผ ์๋ TDD๋ผ๊ณ ํํํ๋๋ฐ์. ๊ฒฐ๊ตญ ์ค์ํ๊ฑด ๋ฌธ์ ๋ฅผ ์ ์ํ๊ณ , ๊ทธ ํด๋ต์ ์ฐพ์๊ฐ๋ ๊ณผ์ ์ด๋ผ๋๊ฒ๋๋ค.