Search
Duplicate

TDD (Test-Driven-Development)

์ƒ์„ฑ์ผ
2023/02/26 05:07
ํƒœ๊ทธ
SE

TDD (Test-Driven-Development)

TDD(ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ)๋Š” ๋ฐ˜๋ณต ํ…Œ์ŠคํŠธ๋ฅผ ์ด์šฉํ•œ ์†Œํ”„ํŠธ์›จ์–ด ๋ฐฉ๋ฒ•๋ก ์ด๋‹ค.
[๊ธฐ์กด ํ”„๋กœ์„ธ์Šค]
โ†’ ๊ธฐ์กด์˜ ์ผ๋ฐ˜์ ์ธ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์™€ ๋‹ค๋ฅด๊ฒŒ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•œ ํ›„, ์‹ค์ œ ์ฝ”๋“œ๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ์ ˆ์ฐจ๋ฅผ ๋”ฐ๋ฅธ๋‹ค.

TDD ๊ฐœ๋ฐœ ์ฃผ๊ธฐ

โ€ข
Write a failing test[Red] ๋‹จ๊ณ„ - ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•œ๋‹ค.
โ€ข
Make the test pass[Green] ๋‹จ๊ณ„ - ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์„ฑ๊ณต์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
โ€ข
Refactor[Blue] ๋‹จ๊ณ„ - ์ค‘๋ณต ์ฝ”๋“œ ์ œ๊ฑฐ, ์ผ๋ฐ˜ํ™” ๋“ฑ์˜ ๋ฆฌํŒฉํ† ๋ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
TDD์™€ ์ผ๋ฐ˜์ ์ธ ๊ฐœ๋ฐœ ๋ฐฉ์‹์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ๋’ค์— ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋””์ž์ธ(์„ค๊ณ„) ๋‹จ๊ณ„์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชฉ์ ์„ ๋ฏธ๋ฆฌ ์ •์˜ํ•˜๊ณ , ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ์„ ํ•ด์•ผํ•œ๋‹ค. ํ…Œ์Šคํฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋„์ค‘, ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ ์‚ฌํ•ญ(๋ฒ„๊ทธ ๋ฐ ์ˆ˜์ •์‚ฌํ•ญ)์€ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ์ถ”๊ฐ€ํ•˜๊ณ  ์„ค๊ณ„๋ฅผ ๊ฐœ์„ ํ•œ๋‹ค. ์ดํ›„, ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผ๋œ ์ฝ”๋“œ๋งŒ์„ ์ฝ”๋“œ ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ ์‹ค์ œ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•œ๋‹ค.

TDD์˜ ๋Œ€ํ‘œ์ ์ธ ํˆด

JUnit

โ€ข
JUnit์€ ์ „์„ธ๊ณ„์ ์œผ๋กœ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” โ€˜Java ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌโ€™ ์ด๋‹ค. (Spring Boot์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ)

xUnit

โ€ข
JUnit ๋ง๊ณ , CUnit(C์–ธ์–ด), CPPUnit(C++), PyUnit(Python) ๋“ฑ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ๋„ ์ง€์›ํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ xUnit์ด๋ผ๊ณ  ์นญํ•œ๋‹ค.

TDD ๋ฐฉ์‹์˜ ์žฅ์ 

1. ๋ณด๋‹ค ํŠผํŠผํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ์ฝ”๋“œ ์ƒ์‚ฐ

โ€ข
TDD๋Š” ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ ๋ณด์žฅ์„ ๋ช…์‹œํ•˜๋ฏ€๋กœ, TDD๋ฅผ ํ†ตํ•œ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์‹œ, ๊ธฐ๋Šฅ ๋ณ„ ์ฒ ์ €ํ•œ ๋ชจ๋“ˆํ™”๊ฐ€ ์ด๋ค„์ง„๋‹ค.
โ€ข
์ด๋Š” ์ข…์†์„ฑ๊ณผ ์˜์กด์„ฑ์ด ๋‚ฎ์€ ๋ชจ๋“ˆ๋กœ ์กฐํ•ฉ๋œ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋ฉฐ, ํ•„์š”์— ๋”ฐ๋ผ ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•ด๋„ ์†Œํ”„ํŠธ์›จ์–ด ์ „์ฒด ๊ตฌ์กฐ์— ์˜ํ–ฅใ…‡๋ฅด ๋ฏธ์น˜์ง€ ์•Š๊ฒŒ ๋œ๋‹ค.

2. ์žฌ์„ค๊ณ„ ์‹œ๊ฐ„์˜ ๋‹จ์ถ•

โ€ข
ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง€๊ธˆ ๋ฌด์—‡์„ ํ•ด์•ผํ•˜๋Š”์ง€ ๋ถ„๋ช…ํžˆ ์ •์˜ํ•˜๊ณ  ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค.
โ€ข
๋˜ํ•œ ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ, ๋‹ค์–‘ํ•œ ์˜ˆ์™ธ์‚ฌํ•ญ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
โ€ข
์ด๋Š” ๊ฐœ๋ฐœ ์ง„ํ–‰ ์ค‘, ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ „๋ฐ˜์ ์ธ ์„ค๊ณ„๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ์ผ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

3. ๋””๋ฒ„๊น… ์‹œ๊ฐ„์˜ ๋‹จ์ถ•

โ€ข
์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž˜๋ชป ๋‚˜์˜จ๋‹ค๋ฉด DB์˜ ๋ฌธ์ œ์ธ์ง€, ๋น„์ฆˆ๋‹ˆ์Šค ๋ ˆ์ด์–ด์˜ ๋ฌธ์ œ์ธ์ง€, UI์˜ ๋ฌธ์ œ์ธ์ง€ ์‹ค์ œ ๋ชจ๋“  ๋ ˆ์ด์–ด๋“ค์„ ์ „๋ถ€ ๋””๋ฒ„๊น… ํ•ด์•ผํ•˜์ง€๋งŒ, TDD์˜ ๊ฒฝ์šฐ ์ž๋™ํ™”๋œ ์œ ๋‹› ํ…Œ์ŠคํŒ…์„ ์ „์ œํ•˜๋ฏ€๋กœ ํŠน์ • ๋ฒ„๊ทธ๋ฅผ ์†์‰ฝ๊ฒŒ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

4. ํ…Œ์ŠคํŠธ ๋ฌธ์„œ์˜ ๋Œ€์ฒด ๊ฐ€๋Šฅ

โ€ข
์ฃผ๋กœ SI ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ๊ณผ์ •์—์„œ ์–ด๋–ค ์š”์†Œ๋“ค์ด ํ…Œ์ŠคํŠธ ๋˜์—ˆ๋Š”์ง€ ํ…Œ์Šค์ฆˆ ์ •์˜์„œ๋ฅผ ๋งŒ๋“ ๋‹ค.
โ€ข
์ด๊ฒƒ์€ ๋‹จ์ˆœ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๋ฌธ์„œ์— ์ง€๋‚˜์ง€ ์•Š๋Š”๋‹ค. ํ•˜์ง€๋งŒ TDD๋ฅผ ํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ ํ…Œ์ŠคํŒ…์„ ์ž๋™ํ™” ์‹œํ‚ด๊ณผ ๋™์‹œ์—, ๋ณด๋‹ค ์ •ํ™•ํ•œ ํ…Œ์ŠคํŠธ ๊ทผ๊ฑฐ๋ฅผ ์‚ฐ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

5. ์ถ”๊ฐ€ ๊ตฌํ˜„์˜ ์šฉ์ดํ•จ

โ€ข
๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋œ ์†Œํ”„ํŠธ์›จ์–ด์— ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ, ์šฐ๋ ค๋˜๋Š” ์ ์€ ํ•ด๋‹น ๊ธฐ๋Šฅ์ด ๊ธฐ์กด ์ฝ”๋“œ์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น ์ง€ ์•Œ์ง€ ๋ชปํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
โ€ข
ํ•˜์ง€๋งŒ TDD์˜ ๊ฒฝ์šฐ, ์ž๋™ํ™”๋œ ์œ ๋‹› ํ…Œ์ŠคํŒ…์„ ์ „์ œํ•˜๋ฏ€๋กœ ํ…Œ์ŠคํŠธ ๊ธฐ๊ฐ„์„ ๋‹จ์ถ•์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

TDD ๋ฐฉ์‹์˜ ๋‹จ์ 

์ƒ์‚ฐ์„ฑ ์ €ํ•˜, ์ƒ์‚ฐ๋น„์šฉ ์ฆ๊ฐ€

โ€ข
๊ธฐ์กด ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ๋” ๋Š๋ ค์ง€๊ณ , ์ƒ์‚ฐ ๋น„์šฉ๋„ ์ฆ๊ฐ€ํ•œ๋‹ค.

TDD ์˜ˆ์‹œ

ํ”„๋ก ํŠธ์—”๋“œ

์ž๋ฐ”

[์šฐ์•„ํ•œํ…Œํฌ์„ธ๋ฏธ๋‚˜] 190425 TDD ๋ฆฌํŒฉํ† ๋ง by ์ž๋ฐ”์ง€๊ธฐ ๋ฐ•์žฌ์„ฑ๋‹˜
๐Ÿ’ป ์šฐ์•„ํ•œํ˜•์ œ๋“ค์˜ ๊ธฐ์ˆ ์กฐ์ง ์ด์•ผ๊ธฐ๋ฅผ ์ „ํ•˜๋Š” ์šฐ์•„ํ•œTech ์œ ํŠœ๋ธŒ์ž…๋‹ˆ๋‹ค.๐Ÿ’ป ์ง€๋‚œ 4์›” 25์ผ, ์ž๋ฐ”์ง€๊ธฐ ๋ฐ•์žฌ์„ฑ๋‹˜์˜ 4์›” ์šฐ์•„ํ•œํ…Œํฌ์„ธ๋ฏธ๋‚˜ ๊ฐ•์˜๊ฐ€ ์ง„ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์˜์ƒ์„ ํ†ตํ•ด ํ™•์ธํ•˜์„ธ์š”. ๐Ÿ˜˜ [์ด๋ฒคํŠธ ๋งˆ๊ฐ] [์šฐ์•„ํ•œTech ์œ ํŠœ๋ธŒ ์˜คํ”ˆ ์ด๋ฒคํŠธ ~5/24] ์šฐ์•„ํ•œTech๋ฅผ ๊ตฌ๋…ํ•˜๊ณ  ์ฒซ ์˜์ƒ์— ์ด๋ฉ”์ผ์„ ๋‚จ๊ฒจ์ฃผ์‹œ๋ฉด ๋‹ค์„ฏ๋ถ„๊ป˜ ์šฐ์•„ํ•œ๊ฐœ๋ฐœ์ž๊ฐ€์œ๋‹ค ๋ฐฐ๋‹ฌ์˜๋ฏผ์กฑ ์ฟ ํฐ์„ ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋งŽ์€ ์ฐธ์—ฌ๋ถ€ํƒ๋“œ๋ ค์š”! ใ…ค ์ฐธ์—ฌ๋ฐฉ๋ฒ• 1. ์šฐ์•„ํ•œTech ์œ ํŠœ๋ธŒ๋ฅผ ๊ตฌ๋…ํ•œ๋‹ค. (์ƒ๋‹จ ๋งํฌ ํด๋ฆญ!) 2. ์ฒซ ์˜์ƒ์— ์‘์›๋Œ“๊ธ€๊ณผ ํ•จ๊ป˜ ์ด๋ฉ”์ผ์„ ๋‚จ๊ธด๋‹ค. 3. 5์›” 24์ผ ๊ฐœ๋ณ„ ์•ˆ๋‚ด๋˜๋Š” ์ฟ ํฐ์„ ํ™•์ธํ•œ๋‹ค. ใ…ค ์ฟ ํฐ์€ ์ด๋ฉ”์ผ์„ ํ†ตํ•ด ๋ฐœ์†ก๋  ์˜ˆ์ •์ด๋‹ˆ ๊ฐœ์ธํ™•์ธ์ด ๊ฐ€๋Šฅํ•œ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ๋‚จ๊ฒจ์ฃผ์„ธ์š”! ๊ตฌ๋…์ž ์ˆ˜ ์ฆ๊ฐ€์™€ ํ•จ๊ป˜ ๋‹ค๋ฅธ ์ด๋ฒคํŠธ๋„ ์ง„ํ–‰๋  ์˜ˆ์ •์ด๋‹ˆ ์•ž์œผ๋กœ๋„ ๊ธฐ๋Œ€ํ•ด์ฃผ์„ธ์š”! ๐Ÿ˜˜ ์šฐ์•„ํ•œTech ํŽ˜์ด์Šค๋ถ https://www.facebook.com/woowahanTech ์šฐ์•„ํ•œํ˜•์ œ๋“ค ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ http://woowabros.github.io/

ref)