Search
๐Ÿ› ๏ธ

TDD & BDD

ํ…Œ์ŠคํŠธ๋ฅผ ์•Œ์•„์•ผ ํ•˜๋Š” ์ด์œ 

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๋ผ๊ณ  ํ‘œํ˜„ํ•˜๋Š”๋ฐ์š”. ๊ฒฐ๊ตญ ์ค‘์š”ํ•œ๊ฑด ๋ฌธ์ œ๋ฅผ ์ •์˜ํ•˜๊ณ , ๊ทธ ํ•ด๋‹ต์„ ์ฐพ์•„๊ฐ€๋Š” ๊ณผ์ • ์ด๋ผ๋Š”๊ฒ๋‹ˆ๋‹ค.