[10๋ถ„ ํ…Œ์ฝ”ํ†ก] ๐Ÿ˜ผ ํ”ผ์นด์˜ TDD์™€ ๋‹จ์œ„ํ…Œ์ŠคํŠธ

Meustarยท2025๋…„ 12์›” 18์ผ

์ถœ์ฒ˜: https://www.youtube.com/watch?v=3LMmPXoGI9Q

movie

๐Ÿ“Œ TDD(ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ)์™€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋Š” ๋ฌด์—‡์ด๋ฉฐ, ์™œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€?

TDD๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•˜๊ณ  ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ๋ฅผ ๋‚˜์ค‘์— ๋งŒ๋“œ๋Š” ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•์ด๋ฉฐ, ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋Š” ์ฝ”๋“œ์˜ ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„๋ฅผ ๊ฒ€์ฆํ•˜์—ฌ ์ฝ”๋“œ์˜ ์•ˆ์ •์„ฑ๊ณผ ํ’ˆ์งˆ์„ ๋†’์ด๋Š” ์ ˆ์ฐจ์ž…๋‹ˆ๋‹ค.

๐Ÿ’ก TDD์˜ ์ง„์ •ํ•œ ์žฅ์ ์€ ๋ฌด์—‡์ธ๊ฐ€?

  • ์ž์—ฐ์Šค๋Ÿฌ์šด ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€ ์ฆ๊ฐ€
  • ์˜ค๋ฒ„ ์—”์ง€๋‹ˆ์–ด๋ง ๋ฐฉ์ง€
  • ์„ค๊ณ„์— ๋Œ€ํ•œ ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ ์ œ๊ณต

๋ฐฐ๊ฒฝ์ง€์‹: TDD์™€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ, ๊ทธ๋ฆฌ๊ณ  ๊ฐœ๋ฐœ ๋ฌธํ™”

์ด ๋…ธํŠธ๋Š” ์—์„œ ๋‹ค๋ฃจ๋Š” TDD(ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ)์™€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ๋ถ„๋“ค์ด ๋‚ด์šฉ์„ 100% ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๊ธฐ ์œ„ํ•ด ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ TDD์˜ ๋ฐฐ๊ฒฝ, ๊ทธ ์ฐฝ์‹œ์ž์˜ ์˜๋„, ๊ทธ๋ฆฌ๊ณ  ์ข‹์€ ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๊ตฌ์ฒด์ ์ธ ์›์น™์„ ์‰ฝ๊ฒŒ ํ’€์–ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

1. TDD์˜ ์ฐฝ์‹œ์ž, ์ผ„ํŠธ ๋ฒก(Kent Beck)๊ณผ ๊ทผ๋ณธ์ ์ธ ์ด์œ 

TDD(Test-Driven Development)๋Š” ๋‹จ์ˆœํžˆ 'ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ' ์ด์ƒ์˜ ์ฒ ํ•™์„ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•๋ก ์„ ์ฐฝ์‹œํ•œ ์ผ„ํŠธ ๋ฒก์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ, ์ฆ‰ ๋‘๋ ค์›€(Fear)์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด TDD๋ฅผ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์ผ„ํŠธ ๋ฒก์˜ ์ •์ฒด:
    • ์ผ„ํŠธ ๋ฒก์€ ์ต์ŠคํŠธ๋ฆผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(XP)์˜ ์ฐฝ์‹œ์ž ์ค‘ ํ•œ ๋ช…์ด๋ฉฐ, ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ๋ถ„์•ผ์˜ ์„ ๊ตฌ์ž๋กœ ๊ผฝํž™๋‹ˆ๋‹ค. ๊ทธ๋Š” ๊ฐœ๋ฐœ์ž๋“ค์ด ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•  ๋•Œ ๋А๋ผ๋Š” ๋ถˆ์•ˆ๊ฐ์„ ์ค„์ด๋Š” ๋ฐ ์ง‘์ค‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ๊ทธ๋Š” TDD๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋“ค์ด ์ฝ”๋”ฉ ๊ฒฐ์ • ํ•˜๋‚˜ํ•˜๋‚˜์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์ฆ‰๊ฐ์ ์œผ๋กœ ์–ป๊ณ  , ๊ถ๊ทน์ ์œผ๋กœ ๊ฐœ๋ฐœ์˜ ๋‘๋ ค์›€์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค .
  • TDD์˜ ํ•ต์‹ฌ ์‚ฌ์ดํด (Red-Green-Refactor):
    • TDD๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ธ ๋‹จ๊ณ„์˜ ์ˆœํ™˜ ๊ตฌ์กฐ๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉฐ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค . ์ด ์‚ฌ์ดํด์„ ์ง€ํ‚ค๋Š” ๊ฒƒ์ด TDD์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

  • TDD์˜ ์žฅ์  (Why We Use TDD):
    • ๋””๋ฒ„๊น… ์‹œ๊ฐ„ ์ ˆ๊ฐ: ํ…Œ์ŠคํŠธ๊ฐ€ ํŠน์ • ๊ธฐ๋Šฅ์˜ ์˜ค๋ฅ˜ ์ง€์ ์„ ๋ฐ”๋กœ ์•Œ๋ ค์ฃผ๊ธฐ ๋•Œ๋ฌธ์—, ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๋ถ€๋ถ„์„ ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .
    • ์˜ค๋ฒ„ ์—”์ง€๋‹ˆ์–ด๋ง ๋ฐฉ์ง€: ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฑ ๋งž๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ฏธ๋ž˜์— ํ•„์š”ํ• ์ง€ ๋ชจ๋ฅด๋Š” ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์ง€ ์•Š๊ฒŒ ๋ฉ๋‹ˆ๋‹ค (์˜ค๋ฒ„ ์—”์ง€๋‹ˆ์–ด๋ง ๋ฐฉ์ง€) .
    • ๋™์ž‘ํ•˜๋Š” ๋ฌธ์„œ ์—ญํ• : ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ๊ณง ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ๊ฐ€ '์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•ด์•ผ ํ•˜๋Š”์ง€'๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฐ€์žฅ ํ™•์‹คํ•œ ๋ฌธ์„œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค .

2. '10๋ถ„ ํ…Œ์ฝ”ํ†ก'์˜ ๋งฅ๋ฝ๊ณผ ์ด๊ทœ์›์˜ ๋…ผ์Ÿ

์›๋ณธ ์ž๋ฃŒ๋Š” '์šฐ์•„ํ•œ ํ…Œํฌ์ฝ”์Šค(์šฐํ…Œ์ฝ”)' ๊ต์œก ๊ณผ์ •์˜ ์ผํ™˜์ธ 'ํ…Œ์ฝ”ํ†ก'์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๊ต์œก์ƒ๋“ค์ด ์ง€์‹์„ ๊ณต์œ ํ•˜๋Š” ๋ฐœํ‘œ ์„ธ์…˜์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐœํ‘œ์ž์ธ ํ”ผ์นด(Pika)๋‹˜์€ ์ด ๊ต์œก ๊ณผ์ •์„ ๊ฒฝํ—˜ํ•œ ๊ฐœ๋ฐœ์ž๋กœ์„œ ์‹ค์งˆ์ ์ธ ๋…ธํ•˜์šฐ๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์šฐ์•„ํ•œ ํ…Œํฌ์ฝ”์Šค(์šฐํ…Œ์ฝ”) ๋ฐฐ๊ฒฝ:
    • ์šฐํ…Œ์ฝ”๋Š” ๋ฐฐ๋‹ฌ์˜๋ฏผ์กฑ์„ ์šด์˜ํ•˜๋Š” ์šฐ์•„ํ•œํ˜•์ œ๋“ค์—์„œ ์šด์˜ํ•˜๋Š” ๊ฐœ๋ฐœ์ž ๊ต์œก ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ, ์ž๊ธฐ์ฃผ๋„ ํ•™์Šต, ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ, TDD, ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋“ฑ์„ ํ†ตํ•ด ํ’ˆ์งˆ ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์—ฐ์Šต์„ ์ค‘์‹œํ•ฉ๋‹ˆ๋‹ค .
    • ์ด๋Ÿฌํ•œ ๋ฐฐ๊ฒฝ ๋•Œ๋ฌธ์—, ์ด ์ž๋ฃŒ๋Š” ๋‹จ์ˆœํžˆ ์ด๋ก ์ด ์•„๋‹Œ ์‹ค์ œ ๊ต์œก ํ™˜๊ฒฝ์—์„œ ์ฒด๋“ํ•œ TDD ๊ฒฝํ—˜๊ณผ ๊ทธ ์–ด๋ ค์›€์„ ๋‹ค๋ฃจ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • TDD๋Š” ์„ค๊ณ„ ๋ฐฉ๋ฒ•๋ก ์ธ๊ฐ€? ๋…ผ์Ÿ์˜ ๋ฐฐ๊ฒฝ:
    • ์˜์ƒ์—์„œ "TDD๋Š” ์„ค๊ณ„ ๋ฐฉ๋ฒ•๋ก ์ด ์•„๋‹ˆ๋‹ค"๋ผ๋Š” ์ด๊ทœ์› ๋‹˜์˜ ๋ฐœ์–ธ์ด ์ธ์šฉ๋ฉ๋‹ˆ๋‹ค . ์ด ๋…ผ์Ÿ์€ TDD์— ๋Œ€ํ•œ ์‹ค๋ฌด์ ์ธ ์ดํ•ด๋ฅผ ๋†’์ด๋Š” ์ค‘์š”ํ•œ ์ง€์ ์ž…๋‹ˆ๋‹ค.
    • ์ด๊ทœ์› ๋‹˜์€ OKKYCON 2018 ๋“ฑ์—์„œ TDD์˜ ํ˜„์‹ค์ ์ธ ์ ์šฉ๊ณผ ์‹คํŒจ ์ด์œ ์— ๋Œ€ํ•ด ๊ฐ•์—ฐํ•œ ๋ฐ” ์žˆ๋Š” ๊ฐœ๋ฐœ ์ „๋ฌธ๊ฐ€์ž…๋‹ˆ๋‹ค.
    • ๊ทธ์˜ ํ•ต์‹ฌ ์ฃผ์žฅ์€ TDD ์ž์ฒด๊ฐ€ '์ข‹์€ ์„ค๊ณ„'๋ฅผ ๋ณด์žฅํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. TDD๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์ ์šฉํ•˜๋ ค๋ฉด, ๋†’์€ ์‘์ง‘๋„์™€ ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„์™€ ๊ฐ™์€ ์„ค๊ณ„ ๊ธฐ๋ฒ•(SOLID ์›์น™ ๋“ฑ)์ด ๋จผ์ € ๋„์ž…๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค .
    • ์‹คํŒจํ•˜๋Š” TDD: TDD๊ฐ€ ์‹คํŒจํ•˜๋Š” ํ”ํ•œ ์ด์œ ๋Š” ๊ตฌํ˜„์ฒด์— ์˜์กด์ ์ธ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ์š”๊ตฌ์‚ฌํ•ญ ๋Œ€์‹ , ๋‚ด๋ถ€ ๊ตฌํ˜„ ๋ฐฉ์‹์„ ํ…Œ์ŠคํŠธํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•  ๋•Œ๋งˆ๋‹ค ํ…Œ์ŠคํŠธ๊ฐ€ ๊นจ์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค .

3. ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์œ„ํ•œ ๋‘ ๊ฐ€์ง€ ์›์น™: SOLID์™€ FIRST

๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๊ณ , TDD๋ฅผ ํ†ตํ•ด ์ข‹์€ ์„ค๊ณ„๋ฅผ ์œ ๋„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‘ ๊ฐ€์ง€ ํ•ต์‹ฌ ์›์น™์„ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

3.1. TDD๊ฐ€ ์ถ”๊ตฌํ•˜๋Š” ์ข‹์€ ์„ค๊ณ„ (SOLID ์›์น™)

TDD๊ฐ€ ์ง์ ‘์ ์œผ๋กœ SOLID ์›์น™์„ ๊ฐ•์ œํ•˜์ง€๋Š” ์•Š์ง€๋งŒ , TDD๋ฅผ ํ†ตํ•ด ์–ป์œผ๋ ค๋Š” '์ข‹์€ ์„ค๊ณ„'๋Š” ๊ถ๊ทน์ ์œผ๋กœ SOLID ์›์น™์„ ์ง€ํ–ฅํ•ฉ๋‹ˆ๋‹ค. SOLID๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์˜ 5๊ฐ€์ง€ ํ•ต์‹ฌ ์›์น™์˜ ์•ฝ์ž์ž…๋‹ˆ๋‹ค.

์›์น™์˜์–ด ํ’€๋„ค์ž„ํ•ต์‹ฌ ์„ค๋ช…TDD์™€์˜ ์—ฐ๊ฒฐ์ 
SSingle Responsibility Principleํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋Š” ์˜ค์ง ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ง„๋‹ค.ํด๋ž˜์Šค๋‚˜ ๋ฉ”์„œ๋“œ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ์ผ์„ ํ•˜๋ฉด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์ด ๋ณต์žกํ•ด์ ธ TDD๊ฐ€ ์–ด๋ ค์›Œ์ง„๋‹ค .
OOpen/Closed Principleํ™•์žฅ์— ์—ด๋ ค ์žˆ๊ณ , ์ˆ˜์ •์— ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์œผ๋ฏ€๋กœ ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ๋‹ค.
LLiskov Substitution Principle์ž์‹ ํด๋ž˜์Šค๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค.๋‹คํ˜•์„ฑ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ™œ์šฉํ•˜์—ฌ ์œ ์—ฐํ•œ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ ๋‹ค.
IInterface Segregation Principleํด๋ผ์ด์–ธํŠธ๋Š” ์ž์‹ ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.์ธํ„ฐํŽ˜์ด์Šค์˜ ์ผ๊ด€์„ฑ์„ ๋†’์ด๊ณ  ํ…Œ์ŠคํŠธ ๋‹จ์œ„ ๋ถ„๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ํ•œ๋‹ค.
DDependency Inversion Principle์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•˜๋ฉฐ, ๊ตฌ์ฒดํ™”์— ์˜์กดํ•˜๋ฉด ์•ˆ ๋œ๋‹ค.๋†’์€ ์ˆ˜์ค€์˜ ๋ชจ๋“ˆ(์ธํ„ฐํŽ˜์ด์Šค)์„ ํ…Œ์ŠคํŠธํ•˜์—ฌ ๊ตฌํ˜„์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด๋„ ํ…Œ์ŠคํŠธ๊ฐ€ ๊นจ์ง€์ง€ ์•Š๊ฒŒ ํ•œ๋‹ค.

3.2. ์ข‹์€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์˜ ์กฐ๊ฑด (FIRST ์›์น™)

์—์„œ ์ข‹์€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์˜ ์กฐ๊ฑด์œผ๋กœ ์–ธ๊ธ‰๋œ ํ•ญ๋ชฉ๋“ค์€ FIRST๋ผ๋Š” ์•ฝ์ž๋กœ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€์ ธ์•ผ ํ•  5๊ฐ€์ง€ ๋•๋ชฉ์ž…๋‹ˆ๋‹ค.

  • Fast (๋น ๋ฅด๊ฒŒ, Fast)
    • ํ…Œ์ŠคํŠธ๋Š” ์ปดํ“จํ„ฐ์ฒ˜๋Ÿผ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๊ฐ€ ๋А๋ฆฌ๋ฉด ์ž์ฃผ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ฒŒ ๋˜๊ณ  , ๊ฒฐ๊ตญ ์ฝ”๋“œ ํ’ˆ์งˆ์ด ๋‚˜๋น ์ง‘๋‹ˆ๋‹ค.
  • Independent (๋…๋ฆฝ์ ์œผ๋กœ, Independent)
    • ๊ฐ ํ…Œ์ŠคํŠธ๋Š” ์„œ๋กœ ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ํ•œ ํ…Œ์ŠคํŠธ์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ์— ์˜ํ–ฅ์„ ์ฃผ๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.
    • ๋งŒ์•ฝ ์˜์กด์„ฑ์ด ์žˆ๋‹ค๋ฉด, ํ•˜๋‚˜๊ฐ€ ์‹คํŒจํ•  ๋•Œ ๋„๋ฏธ๋…ธ์ฒ˜๋Ÿผ ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜์—ฌ ์‹คํŒจ ์›์ธ์„ ์ง„๋‹จํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
  • Repeatable (๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•˜๊ฒŒ, Repeatable)
    • ํ…Œ์ŠคํŠธ๋Š” ์–ด๋–ค ํ™˜๊ฒฝ(๊ฐœ๋ฐœ ํ™˜๊ฒฝ, ํ…Œ์ŠคํŠธ ์„œ๋ฒ„, ์ธํ„ฐ๋„ท์ด ๋Š๊ธด ํ™˜๊ฒฝ ๋“ฑ)์—์„œ๋„ ํ•ญ์ƒ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค .
  • Self-Validating (์ž๊ฐ€ ๊ฒ€์ฆ, Self-Validating)
    • ํ…Œ์ŠคํŠธ๋Š” ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ๋žŒ์ด ์ฃผ๊ด€์ ์œผ๋กœ ํŒ๋‹จํ•  ํ•„์š” ์—†์ด, ์„ฑ๊ณต(True) ๋˜๋Š” ์‹คํŒจ(False)์˜ ๋ถˆ๋ฆฐ ๊ฐ’์œผ๋กœ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค .
  • Timely (์ ์‹œ์—, Timely)
    • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์ง์ „์— ์ž‘์„ฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค . ์ฝ”๋“œ๋ฅผ ๋‹ค ์งœ๊ณ  ๋‚˜์„œ ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๋ฉด, ์ฝ”๋“œ๊ฐ€ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋˜์–ด ๊ฒฐ๊ตญ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์งœ์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค .


1. TDD(ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ)์˜ ์ •์˜์™€ ๊ฐœ๋ฐœ ์‚ฌ์ดํด

1.1. TDD์˜ ๊ฐœ๋… ๋ฐ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค

  1. TDD์˜ ์ •์˜: TDD๋Š” ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ(Test Driven Development)์˜ ์•ฝ์ž๋กœ, ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ ์ „์— ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•˜๊ณ  ์‹ค์ œ ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ๋ฅผ ๋‚˜์ค‘์— ๋งŒ๋“œ๋Š” ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•์ด๋‹ค.
  2. TDD์˜ ์ฐฝ์‹œ์ž: TDD์˜ ์ฐฝ์‹œ์ž์ธ ์ผ„ํŠธ ๋ฒก(Kent Beck)์€ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๊ธฐ ์ „์— ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ํ•˜๋ผ๊ณ  ๊ฐ•์กฐํ–ˆ๋‹ค.
  3. ๊ธฐ์กด ํ”„๋กœ์„ธ์Šค์™€์˜ ์ฐจ์ด:
    1. ๊ธฐ์กด ํ”„๋กœ์„ธ์Šค: ์„ค๊ณ„ โ†’ ๊ฐœ๋ฐœ ์ฝ”๋“œ ์ž‘์„ฑ โ†’ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ์ˆœ์„œ์ด๋‹ค.
    2. TDD ํ”„๋กœ์„ธ์Šค: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•œ ํ›„ ๊ฐœ๋ฐœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
  4. TDD ๊ฐœ๋ฐœ ์‚ฌ์ดํด (๋ ˆ๋“œ, ๊ทธ๋ฆฐ, ๋ฆฌํŒฉํ„ฐ): TDD๋Š” ์„ธ ๊ฐ€์ง€ ์‚ฌ์ดํด๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.
    1. ๋ ˆ๋“œ (Red): ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํŒจํ•˜๋Š” ๋‹จ๊ณ„์ด๋‹ค.
    2. ๊ทธ๋ฆฐ (Green): ํ…Œ์ŠคํŠธ๋ฅผ ์„ฑ๊ณตํ•  ์ˆ˜ ์žˆ๋„๋ก ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋‹จ๊ณ„์ด๋‹ค.
    3. ๋ฆฌํŒฉํ„ฐ (Refactor): ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ์™€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋Š” ๋‹จ๊ณ„์ด๋‹ค.

1.2. TDD๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์™€ ์žฅ์ 

  1. ์ผ๋ฐ˜์ ์œผ๋กœ ์•Œ๋ ค์ง„ TDD์˜ ์žฅ์ :
    1. ๊ฐœ๋ฐœ์— ๋Œ€ํ•œ ๋‘๋ ค์›€์„ ์ค„์—ฌ์ค€๋‹ค.
    2. ๋””๋ฒ„๊น… ์‹œ๊ฐ„์„ ์ค„์—ฌ์ค€๋‹ค.
    3. ๋™์ž‘ํ•˜๋Š” ๋ฌธ์„œ ์—ญํ• ์„ ํ•œ๋‹ค.
  2. ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€ ํ–ฅ์ƒ: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•˜๋ฏ€๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€๊ฐ€ ๋†’์•„์ง„๋‹ค.
    1. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์„ ๋ฏธ๋ฃจ๊ฑฐ๋‚˜ ํ•˜์ง€ ์•Š๋Š” ๊ฒฝํ—˜์„ ๋ฐฉ์ง€ํ•ด ์ค€๋‹ค.
  3. ์˜ค๋ฒ„ ์—”์ง€๋‹ˆ์–ด๋ง ๋ฐฉ์ง€:
    1. TDD๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž์ถฐ ๊ฐœ๋ฐœ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฏ€๋กœ, ๋”ฑ ํ•„์š”ํ•œ ๋งŒํผ๋งŒ ์ฝ”๋”ฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    2. ๋ฏธ๋ž˜์— ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ง์ž‘ํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์˜ค๋ฒ„ ์—”์ง€๋‹ˆ์–ด๋ง์„ ๋ฐฉ์ง€ํ•ด ์ค€๋‹ค.
  4. ์„ค๊ณ„์— ๋Œ€ํ•œ ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ:
    1. ์„ค๊ณ„๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ž˜ํ•˜๋ฉด ์ข‹์ง€๋งŒ, ์ž˜๋ชป ์„ค๊ณ„ํ–ˆ์„ ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ค์šธ ๋•Œ ๋น„๋กœ์†Œ ๊นจ๋‹ซ๊ฒŒ ๋œ๋‹ค.
    2. TDD๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ณต์žกํ•˜๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ์„ค๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์ด ์–ด๋ ค์›Œ์ง€๋Š” ๊ฒƒ์„ ํ†ตํ•ด ๋น ๋ฅด๊ฒŒ ์„ค๊ณ„์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์„ค๊ณ„๋ฅผ ๋น ๋ฅด๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.

1.3. TDD๊ฐ€ ์„ค๊ณ„ ๋ฐฉ๋ฒ•๋ก ์ด ์•„๋‹Œ ์ด์œ 

  1. TDD์˜ ์—ญํ•  ํ•œ๊ณ„: TDD๊ฐ€ ์„ค๊ณ„ ๋ฐฉ๋ฒ•๋ก ์ด๋ผ๋ฉด TDD๋ฅผ ํ†ตํ•ด ์ข‹์€ ์„ค๊ณ„๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  2. TDD๊ฐ€ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ๊ฒƒ: TDD๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ค๊ณ„ ์›์น™์— ๋Œ€ํ•œ ์–ด๋– ํ•œ ์‹ ํ˜ธ๋„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.
    1. ๋†’์€ ์‘์ง‘๋„(Cohesion)
    2. ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)
    3. ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™(OCP)
    4. ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™(ISP)
    5. ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ผ๊ด€์„ฑ ๋…ธ์ถœ
    6. ๋ฆฌํŒฉํ† ๋ง ๋‹จ๊ณ„์—์„œ ์ข‹์€ ๊ตฌ์กฐ๋ฅผ ์•ˆ๋‚ดํ•˜๊ฑฐ๋‚˜ ๊ฐ•์ œํ•˜์ง€ ์•Š๋Š”๋‹ค.
  3. TDD์˜ ์„ค๊ณ„ ์˜ํ–ฅ: TDD๋Š” ์„ค๊ณ„์— ์ „ํ˜€ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
    1. ๊ฐ„๊ฒฉ๊ณผ ์˜์กด์„ฑ ํ˜•์„ฑ์„ ์–ต์ œํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
    2. OCP ์œ„๋ฐฐ๋ฅผ ๊ฒฝ๊ณ ํ•˜๊ณ  ๋ถˆ๋ช…ํ™•ํ•œ ์„ค๊ณ„ ์ง€์ ์„ ๋ฐœ๊ฒฌํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค€๋‹ค.
  4. ์„ค๊ณ„ ์˜์กด์˜ ์œ„ํ—˜์„ฑ: ์ „์ ์œผ๋กœ TDD์—๋งŒ ์˜์กดํ•˜์—ฌ ์„ค๊ณ„๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด, ํ…Œ์ŠคํŠธํ•˜๊ธฐ์—๋งŒ ์ข‹์€ ์•ˆ ์ข‹์€ ์„ค๊ณ„๊ฐ€ ๋งŒ๋“ค์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

2. TDD ์‹คํŒจ์˜ ์ผ๋ฐ˜์ ์ธ ์ด์œ ์™€ ํ•ด๊ฒฐ์ฑ…: ์ธํ„ฐํŽ˜์ด์Šค ํ…Œ์ŠคํŠธ์˜ ์ค‘์š”์„ฑ

  1. TDD ์ ์šฉ ์‹คํŒจ์˜ ์›์ธ: TDD๋ฅผ ์ ์šฉํ•˜๋ฉด์„œ ์‹คํŒจํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋งŽ๋‹ค.
    1. TDD๋ฅผ ์‹คํŒจํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ฝ”๋“œ๊ฐ€ ์ด๋ฃจ๊ณ ์ž ํ•˜๋Š” ๊ฐ€์น˜๋‚˜ ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ๋ณด๋‹ค๋Š”, ๊ทธ ๊ธฐ๋Šฅ์„ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ํ…Œ์ŠคํŠธํ•œ๋‹ค.
  2. ๊ตฌํ˜„์ฒด ํ…Œ์ŠคํŠธ์˜ ๋ฌธ์ œ์ :
    1. ๊ตฌํ˜„ ๋ฐฉ์‹์„ ํ…Œ์ŠคํŠธํ•˜๋ฉด ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋“ค์ด ๊ตฌ์กฐ์  ๊ฒฐํ•ฉ๋„(Coupling)๊ฐ€ ๋†’์•„์ง€๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•œ๋‹ค.
    2. ๊ฒฐ๊ตญ ๊ตฌํ˜„์ฒด๋ฅผ ๋ฆฌํŒฉํ† ๋ง(๋‚ด๋ถ€ ๊ตฌํ˜„ ๋ณ€๊ฒฝ)ํ•˜๋ฉด, ๊ฒฐํ•ฉ๋˜์–ด ์žˆ๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋“ค์ด ๋ชจ๋‘ ๊นจ์ง€๊ฒŒ ๋œ๋‹ค.
    3. ์ด๋Š” ํ…Œ์ŠคํŠธ๋“ค์ด ๊ตฌํ˜„์ฒด ๋‚ด๋ถ€์˜ Implementation์— ์กด์žฌํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์ฒด๋“ค์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•œ๋‹ค.
  3. ํ•ด๊ฒฐ์ฑ…: ์ธํ„ฐํŽ˜์ด์Šค ํ…Œ์ŠคํŠธ:
    1. ๊ตฌํ˜„์ฒด๊ฐ€ ์•„๋‹Œ ์„ค๊ณ„, ์ฆ‰ ์ธํ„ฐํŽ˜์ด์Šค(Interface)๋ฅผ ํ…Œ์ŠคํŠธํ•ด์•ผ ํ•œ๋‹ค.
    2. ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ฒŒ ๋˜๋ฉด, ๋‚ด๋ถ€์— ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š” ๊ตฌํ˜„์ฒด๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋”๋ผ๋„ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊นจ์ง€์ง€ ์•Š๋Š”๋‹ค.
    ํ…Œ์ŠคํŠธ ๋Œ€์ƒํŠน์ง•๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ
    ๊ตฌํ˜„์ฒด (Implementation)์ฝ”๋“œ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹ ์ž์ฒด๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉด ํ…Œ์ŠคํŠธ๊ฐ€ ์šฐ๋ฅด๋ฅด ๊นจ์ง
    ์ธํ„ฐํŽ˜์ด์Šค (Interface)์ฝ”๋“œ๊ฐ€ ์™ธ๋ถ€์— ๋…ธ์ถœํ•˜๋Š” ๊ธฐ๋Šฅ๋‚ด๋ถ€๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•ด๋„ ํ…Œ์ŠคํŠธ๋Š” ์•ˆ์ •์ ์ž„

3. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ(Unit Test)์˜ ๊ฐœ๋…๊ณผ ๋ชฉ์ 

3.1. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์˜ ์œ„์น˜์™€ ์ •์˜

  1. ์ „์ฒด ํ”„๋กœ๊ทธ๋žจ ํ…Œ์ŠคํŠธ์˜ ์ข…๋ฅ˜: ํ…Œ์ŠคํŠธ๋Š” ํฌ๊ฒŒ ์œ ๋‹› ํ…Œ์ŠคํŠธ(๋‹จ์œ„ ํ…Œ์ŠคํŠธ), ๋ถ€๋ถ„ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ, ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๊ฐ€ ์กด์žฌํ•œ๋‹ค.
  2. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์˜ ๋ฒ”์œ„: ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋Š” ์ „์ฒด ํ…Œ์ŠคํŠธ ์ค‘ ์ œ์ผ ์ž‘์€ ๋‹จ์œ„์ด๋ฉฐ, ์ฝ”๋“œ ๋‹จ์œ„์˜ ํ–‰์œ„๋ฅผ ํ…Œ์ŠคํŠธํ•œ๋‹ค.
  3. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์˜ ์ผ๋ฐ˜์ ์ธ ์ ˆ์ฐจ: ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฉ”์„œ๋“œ(Method) ๋ ˆ๋ฒจ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ๊ฒ€์ฆ์ด ํ•„์š”ํ•œ ์ฝ”๋“œ์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์ ˆ์ฐจ์ด๋‹ค.

3.2. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์˜ ๋ชฉ์ 

  1. ๋ฌธ์ œ ์ง€์  ๋ถ„๋ฆฌ:
    1. ๊ฐ ๋‹จ์œ„๊ฐ€ ์ •ํ™•ํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๊ณ , ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์–ด๋”” ๋ถ€๋ถ„์ด ์ž˜๋ชป๋˜์—ˆ๋Š”์ง€๋ฅผ ๋นจ๋ฆฌ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.
    2. ์ด๋ฅผ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ์˜ ์•ˆ์ •์„ฑ์ด ๋†’์•„์ง€๋ฉฐ, ์ด ์•ˆ์ •์„ฑ์€ ์ž ์žฌ์ ์ธ ๋น„์šฉ ์ ˆ๊ฐ์œผ๋กœ ์ด์–ด์ง„๋‹ค.
  2. ๋ณ€๊ฒฝ ์ œ์–ด:
    1. ์ฝ”๋“œ์˜ ๋ณ€ํ™”๋ฅผ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ณ , ์ˆ˜์ •๋œ ์ฝ”๋“œ๊ฐ€ ์ •ํ™•ํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
    2. ๋”ฐ๋ผ์„œ ๋ณ€๊ฒฝ์„ ์ž์ฃผ ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์ด ์กฐ์„ฑ๋œ๋‹ค.
  3. ํ…Œ์ŠคํŠธ ๊ฐœ์ˆ˜ ํ˜•์„ฑ (์„ค๊ณ„ ํ”ผ๋“œ๋ฐฑ):
    1. ํ•˜๋‚˜์˜ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ๋„ˆ๋ฌด ํฌ๊ฑฐ๋‚˜ ๋ณต์žกํ•ด์ง€๋Š” ๊ฒƒ์€ ์ฝ”๋“œ์— ์ž˜๋ชป๋œ ๊ฒƒ์ด ์žˆ๋‹ค๋Š” ์‹ ํ˜ธ๋กœ ๊ฐ„์ฃผํ•  ์ˆ˜ ์žˆ๋‹ค.
    2. ํ…Œ์ŠคํŠธ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ํ•ด๋‹น ์ฝ”๋“œ๊ฐ€ ๋ฆฌํŒฉํ† ๋ง์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ฐ”๋กœ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  4. ์ฝ”๋“œ์˜ ๋ฌธ์„œํ™”:
    1. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋Š” ์ผ๋ช… ์ƒ˜ํ”Œ ์ฝ”๋“œ๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋ฉฐ, ์ƒํ˜ธ์ž‘์šฉ ๋ฐ ์˜์กด ๊ด€๊ณ„๋ฅผ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.
    2. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋Š” ๋ฐฐํฌ๋˜๋Š” ์ฝ”๋“œ์™€ ์ผ์น˜ํ•˜๋ฏ€๋กœ ํ•ญ์ƒ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€๋œ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

4. ์ข‹์€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ FIRST ์›์น™

4.1. FIRST ์›์น™์˜ ๊ตฌ์„ฑ ์š”์†Œ

  1. F: Fast (๋น ๋ฅด๊ฒŒ):
    1. ํ…Œ์ŠคํŠธ๋Š” ๋นจ๋ผ์•ผ ํ•œ๋‹ค.
    2. ํ…Œ์ŠคํŠธ๊ฐ€ ๋А๋ฆฌ๋ฉด ์ž์ฃผ ๋Œ๋ฆด ์—„๋‘๋ฅผ ๋‚ด์ง€ ๋ชปํ•˜๊ฒŒ ๋˜๊ณ , ๊ฒฐ๊ตญ ๋ฌธ์ œ๋ฅผ ๋นจ๋ฆฌ ์ฐพ์•„๋‚ด ๊ณ ์น˜์ง€ ๋ชปํ•˜์—ฌ ์ฝ”๋“œ ํ’ˆ์งˆ์ด ๋ง๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.
  2. I: Independent (๋…๋ฆฝ์ ์œผ๋กœ):
    1. ๊ฐ ํ…Œ์ŠคํŠธ๋Š” ์„œ๋กœ ์˜์กดํ•˜๋ฉด ์•ˆ ๋œ๋‹ค.
    2. ํ…Œ์ŠคํŠธ๊ฐ€ ์„œ๋กœ ์˜์กดํ•˜๊ฒŒ ๋˜๋ฉด ํ•˜๋‚˜๊ฐ€ ์‹คํŒจํ•  ๋•Œ ๋„๋ฏธ๋…ธ์ฒ˜๋Ÿผ ๋‚˜๋จธ์ง€๋„ ์ž‡๋”ฐ๋ผ ์‹คํŒจํ•˜๊ฒŒ ๋˜์–ด ์›์ธ ์ง„๋‹จ์ด ์–ด๋ ค์›Œ์ง€๊ณ , ๋‚ด๋ถ€์˜ ๊ฒฐํ•จ์ด ์ˆจ๊ฒจ์ง€๊ฒŒ ๋œ๋‹ค.
  3. R: Repeatable (๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•˜๊ฒŒ):
    1. ํ…Œ์ŠคํŠธ๋Š” ์–ด๋–ค ํ™˜๊ฒฝ์—์„œ๋„ ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค.
    2. ์‹ค์ œ ํ™˜๊ฒฝ, QA ํ™˜๊ฒฝ, ์‹ฌ์ง€์–ด ๋„คํŠธ์›Œํฌ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์€ ์˜คํ”„๋ผ์ธ ํ™˜๊ฒฝ์—์„œ๋„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
    3. ํ…Œ์ŠคํŠธ๊ฐ€ ํ™˜๊ฒฝ์— ์˜์กดํ•˜๊ฒŒ ๋˜๋ฉด ํ…Œ์ŠคํŠธ ์‹คํŒจ์˜ ๋ณ€๋ช…์ด ์ƒ๊ธฐ๊ณ , ํ™˜๊ฒฝ์ด ์ค€๋น„๋˜์ง€ ์•Š์•„ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•œ๋‹ค.
  4. S: Self-Validating (์ž๊ฐ€ ๊ฒ€์ฆํ•˜๋Š”):
    1. ํ…Œ์ŠคํŠธ๋Š” ๋ถˆ๋ฆฐ ๊ฐ’(Boolean)์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋‚ด์•ผ ํ•˜๋ฉฐ, ์„ฑ๊ณต ์•„๋‹ˆ๋ฉด ์‹คํŒจ๋ฅผ ๋ฌด์กฐ๊ฑด ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.
    2. ํ…Œ์ŠคํŠธ๊ฐ€ ์Šค์Šค๋กœ ์„ฑ๊ณต๊ณผ ์‹คํŒจ๋ฅผ ํŒ๋‹จํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ํŒ๋‹จ์ด ์ฃผ๊ด€์ ์œผ๋กœ ๋ณ€ํ•˜๊ฒŒ ๋˜๊ณ  ์ง€๋ฃจํ•œ ์ˆ˜๋™ ๊ฒ€์ฆ ์ž‘์—…์ด ํ•„์š”ํ•˜๊ฒŒ ๋œ๋‹ค.
  5. T: Timely (์ ์‹œ์—):
    1. ํ…Œ์ŠคํŠธ๋Š” ํ•ญ์ƒ ์ ์‹œ์— ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.
    2. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋Š” ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์ง์ „์— ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.
    3. ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ ๋‹ค์Œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜๋ฉด, ์‹ค์ œ ์ฝ”๋“œ๊ฐ€ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋’ค๋Šฆ๊ฒŒ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ๊ฒฝ์šฐ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์งœ์•ผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
์›์น™๋‚ด์šฉ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜๋ฉด?
Fast (๋น ๋ฅด๊ฒŒ)ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์†๋„๊ฐ€ ๋นจ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค.ํ…Œ์ŠคํŠธ๊ฐ€ ๋А๋ฆฌ๋ฉด ์ž์ฃผ ์•ˆ ๋Œ๋ ค๋ณด๊ฒŒ ๋˜๊ณ , ๊ฒฐ๊ตญ ์ฝ”๋“œ ํ’ˆ์งˆ์ด ๋‚˜๋น ์ง‘๋‹ˆ๋‹ค .
Independent (๋…๋ฆฝ์ ์œผ๋กœ)๊ฐ ํ…Œ์ŠคํŠธ๋Š” ์„œ๋กœ์—๊ฒŒ ์˜์กดํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.ํ•˜๋‚˜๊ฐ€ ์‹คํŒจํ–ˆ์„ ๋•Œ ๋„๋ฏธ๋…ธ์ฒ˜๋Ÿผ ์ค„์ค„์ด ์‹คํŒจํ•˜๋ฉด, ์ง„์งœ ์›์ธ์„ ์ฐพ๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค .
Repeatable (๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•˜๊ฒŒ)์–ด๋–ค ํ™˜๊ฒฝ์—์„œ๋„ (ํšŒ์‚ฌ, ์ง‘, ์‹ฌ์ง€์–ด ์ธํ„ฐ๋„ท ์—†๋Š” ํ™˜๊ฒฝ์—์„œ๋„) ๋ฐ˜๋ณต ์‹คํ–‰ ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค .ํ™˜๊ฒฝ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ๊ฐœ๋ฐœ์ž๊ฐ€ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š์„ ๋ณ€๋ช…๊ฑฐ๋ฆฌ๋ฅผ ์ค๋‹ˆ๋‹ค .
Self-Validating (์ž๊ฐ€ ๊ฒ€์ฆ)ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋Š” ๋ฐ˜๋“œ์‹œ ์„ฑ๊ณต(True) ๋˜๋Š” ์‹คํŒจ(False)๋กœ ๋ช…ํ™•ํžˆ ๋‚˜์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค .์‚ฌ๋žŒ์ด ์ฃผ๊ด€์ ์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ํŒ๋‹จํ•˜๊ฒŒ ๋˜๋ฉด, ์ง€๋ฃจํ•˜๊ณ  ๋น„ํšจ์œจ์ ์ธ ์ˆ˜๋™ ํ™•์ธ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค .
Timely (์ ์‹œ์—)ํ…Œ์ŠคํŠธ๋Š” ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์ง์ „์— ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค .์ฝ”๋“œ๋ฅผ ๋‹ค ์งœ๊ณ  ๋‚˜์ค‘์— ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๋ฉด, ์ฝ”๋“œ๊ฐ€ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ์งœ์—ฌ์กŒ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋„ˆ๋ฌด ๋Šฆ๊ฒŒ ๊นจ๋‹ซ๊ฒŒ ๋˜์–ด ๋‹ค์‹œ ์งœ์•ผ ํ•ฉ๋‹ˆ๋‹ค .
profile
์œ ํŠœ๋ธŒ ๊ธฐ์ˆ  ์˜์ƒ์„ ๋ณด๋ฉด์„œ ์ž˜ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด... Lilys AI๋ฅผ ํ™œ์šฉํ•ด ๋ฐฐ๊ฒฝ์ง€์‹, ์˜์ƒ ์ „์ฒด ์š”์•ฝ ๋ฐ ํ•ต์‹ฌ ๋‚ด์šฉ ์„ค๋ช…๋“ค์„ ๋ธ”๋กœ๊น… ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์„ฑํ•œ ๋‚ด์šฉ๋“ค์— ๋Œ€ํ•ด์„œ ์–ธ์ œ๊ณ  ๋‹ค์‹œ "๋‚ด๊ฐ€" ์ฐพ์•„ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋ก์œผ๋กœ ๋‚จ๊น๋‹ˆ๋‹ค!

0๊ฐœ์˜ ๋Œ“๊ธ€