๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
IT

TDD(Test-Driven-Development) ๋ฐฉ๋ฒ•๋ก 

by yunamom 2022. 3. 7.
๋ฐ˜์‘ํ˜•

 

โœฝ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

 

 

300x250

์ฝ”๋“œ