์™œ ํ•„์š”ํ• ๊นŒ?

  • V-Diagram
  • ์™œ ๋‹จ๊ณ„์ ์ธ ํ…Œ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ• ๊นŒ?
  • ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ์‹œ๊ฐ„, ์˜์‚ฌ์†Œํ†ต ๋“ฑ์˜ ๋น„์šฉ์„ ์ค„์ด๊ธฐ ์œ„ํ•จ
  • ์š”๊ตฌ์‚ฌํ•ญ ๋งŒ์กฑํ•จ์„ ์ฆ๋ช…ํ•˜๋Š” ๊ฒƒ

์–ด๋–ค ์ข…๋ฅ˜๊ฐ€ ์žˆ์„๊นŒ?

๋‹จ์œ„ ํ…Œ์ŠคํŠธ

  • ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ตœ์†Œ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด์ง„ ๋ชจ๋“ˆ, ํ”„๋กœ๊ทธ๋žจ, ๊ฐ์ฒด, ํด๋ž˜์Šค ๋‚ด์—์„œ ๊ฒฐํ•จ์„ ์ฐพ๊ณ  ๊ธฐ๋Šฅ์„ ๊ฒ€์ฆ
  • ๋…๋ฆฝ์ ์œผ๋กœ ์ˆ˜ํ–‰๋จ
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ฃผ๋„ํ•จ
  • ์ฝ”๋“œ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ˆ˜ํ–‰
  • ์ด๋Ÿฌํ•œ ๊ตฌ๋ถ„์€, ์–ด๋–ค Task๋ƒ์— ๋”ฐ๋ผ ๊ตฌ๋ถ„์ด ๋‹ฌ๋ผ์ง„๋‹ค.
  • ๊ฐ€์žฅ ์ง‘์ค‘ํ•ด์•ผ ํ•˜๋Š” ํ…Œ์ŠคํŠธ

ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ

  • ๋ชจ๋“ˆ๊ฐ„ ์ธํ„ฐํŽ˜์ด์Šค ํ…Œ์ŠคํŠธ
  • ๋‹ค๋ฅธ ๋ชจ๋“ˆ๊ณผ ์ƒํ˜ธ์ž‘์šฉ ํ…Œ์ŠคํŠธ
  • ๊ธฐ๋Šฅ์  ํŠน์„ฑ: ์ œ๋Œ€๋กœ ๋œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š”๊ฐ€
  • ๋น„๊ธฐ๋Šฅ์  ํŠน์„ฑ: ์„ฑ๋Šฅ, ๋ถ€ํ•˜, ์ŠคํŠธ๋ ˆ์Šค ๋“ฑ์˜ ํ…Œ์ŠคํŠธ

์‹œ์Šคํ…œ ํ…Œ์ŠคํŠธ

  • ์ „์ฒด ์‹œ์Šคํ…œ, ์ œํ’ˆ์˜ ๋™์ž‘ ํ…Œ์ŠคํŠธ
  • ์‹ค๊ฒŒ ์ตœ์ข… ์‚ฌ์šฉ ํ™˜๊ฒฝ ๋˜๋Š” ์œ ์‚ฌํ•œ ํ™˜๊ฒฝ์—์„œ ์ˆ˜ํ–‰
    • ํ™˜๊ฒฝ ํŠน์ • ์žฅ์•  ๋ฆฌ์Šคํฌ๋ฅผ ์ตœ์†Œํ™” ํ•˜๊ธฐ ์œ„ํ•ด
  • ๊ธฐ๋Šฅ, ๋น„๊ธฐ๋Šฅ ์š”์ˆ˜ ์‚ฌํ•ญ์„ ๋ชจ๋‘ ๊ฒ€์ฆ
  • ๋…๋ฆฝ์ ์ธ ํ…Œ์ŠคํŠธ ํŒ€์ด ์ฃผ๋„ (QAํŒ€)

์ธ์ˆ˜ ํ…Œ์ŠคํŠธ

  • ์‹ค์ œ ์‚ฌ์šฉํ• ๋งŒํ•œ ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ๋Š”์ง€ ํ‰๊ฐ€
    • ๊ฒฐํ•จ์„ ์ฐพ๋Š” ๊ฒƒ์ด ์ฃผ๋œ ๊ด€์‹ฌ์‚ฌ๊ฐ€ ์•„๋‹˜
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ „๋‹ดํ•˜์—ฌ ์ˆ˜ํ–‰ํ•จ
  • ๊ฒฐํ•จ์€ ๋ฐœ๊ฒฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ  ๋ฐœ๊ฒฌ๋˜๋Š” ๊ฒƒ
  • ์•ŒํŒŒ/๋ฒ ํƒ€ ํ…Œ์ŠคํŠธ๊ฐ€ ์ด์— ์†ํ•จ
  • ์•ŒํŒŒ ํ…Œ์ŠคํŠธ
    • ์‚ฌ๋‚ด ์ดํ•ด ๋‹น์‚ฌ์ž์—๊ฒŒ
  • ๋ฒ ํƒ€ ํ…Œ์ŠคํŠธ
    • ์‚ฌ์™ธ ์‚ฌ์šฉ์ž์—๊ฒŒ

FIRST: ์ข‹์€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋Š” ๋ฌด์—‡์ธ๊ฐ€?

Fast

  • ์‹คํ–‰์ด ๋Š๋ฆฐ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ
    • ์™ธ๋ถ€ ์ž์› ์ ‘๊ทผ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•จ
      • ์™ธ๋ถ€ ์ž์›: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ํŒŒ์ผ, ๋„คํŠธ์›Œํฌ
    • ์ˆ˜์‹ญ~์ˆ˜์ฒœ ms
  • ์‹คํ–‰์ด ๋น ๋ฅธ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ
    • ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ๋งŒ ์‹คํ–‰
    • ์ˆ˜ ms
  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ ์œ„ ์ฐจ์ด๋Š” ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ๋Š˜์–ด๋‚จ
  • ์‹ค์ œ ์™ธ๋ถ€ ์ž์› IO๋ฅผ ํ•˜๋Š” ์ฝ”๋“œ์™€, ํ‰๊ฐ€ ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•ด๋‘”๋‹ค๋ฉด mock ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅ
  • ๋งŒ์•ฝ ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ์— ์ด๋Ÿฌํ•œ ๋ถ„๋ฆฌ ์ž‘์—…์ด ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์„ ๊ฒฝ์šฐ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ์Šต๊ด€์ž„
  • ์™ธ๋ถ€์ž์› ์˜์กด์„ฑ์„ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•
    • Stub: ํ•˜๋“œ ์ฝ”๋”ฉํ•œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ตฌํ˜„์ฒด
    • Mock: ๊ฐ€์ƒ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ฆ

Isolated/Independent

  • ์ ‘๊ทผ์„ฑ, ๊ฐ€์šฉ์„ฑ ์ด์Šˆ
    • ํŠน์ • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ Database์— ์ ‘๊ทผ
    • ๊ทธ๋Ÿฐ๋ฐ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์— ๋ฌธ์ œ ๋ฐœ์ƒ
    • ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์‹คํŒจ
    • ์ด๋Ÿฐ ๊ฒฝ์šฐ๋ฅผ ์ ‘๊ทผ์„ฑ(accessibility), ๊ฐ€์šฉ์„ฑ(availibility) ์ด์Šˆ๋ผ ํ•จ
    • ์ด๋ ‡๊ฒŒ ๋˜๋ฉด, ๋ณดํ†ต์€ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ฝ”๋“œ ๋ฌธ์ œ๋ผ ํŒ๋‹จํ•˜๊ธฐ ์‰ฝ๊ณ , ๊ฒฐ๊ตญ ๋ฌธ์ œ ํƒ์ƒ‰์— ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๊ฒŒ ๋œ๋‹ค.
  • ๋ฐ์ดํ„ฐ ์˜์กด์ ์ธ ๊ฒฝ์šฐ
    • DB์— ์žˆ๋Š” ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์งฐ๊ธฐ ๋•Œ๋ฌธ์—, ์ ‘๊ทผํ•˜๋Š” ์‹คํ–‰ ์ฃผ์ฒด๊ฐ€ ๋งŽ์„ ๊ฒฝ์šฐ ์›ํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.
    • ๊ณ ๋ฆฝ๋˜์–ด ์žˆ์ง€ ์•Š๊ณ , ๊ฐ’์— ์˜์กด์ ์ธ ์ƒํ™ฉ์ด๋‹ค.
  • ์ˆœ์„œ ์˜์กด์„ฑ ์กด์žฌ
    • TC C๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” TC A, B๊ฐ€ ์„ ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค.
    • ์ด๋Ÿด ๊ฒฝ์šฐ ์‹คํŒจ์‹œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ฒด์ธ์„ ๋ถ„์„ํ•ด์•ผ ํ•จ
    • ๋˜, ์•ž์„  TC๊ฐ€ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•˜์—ฌ ์›ํ•˜๋Š” TC C๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ๋ชปํ•œ๋‹ค.

Repeatable

  • ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์žฅํ•จ
    • ํ†ต์ œํ•  ์ˆ˜ ์—†๋Š” ์™ธ๋ถ€ ์š”์†Œ๋Š” ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์žฅํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์‚ฐ๋ฐœ์ ์œผ๋กœ ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ๋Š” ๋ถˆํ•„์š”ํ•œ ๋น„์šฉ์„ ๋ฐœ์ƒ์‹œํ‚ด

Self-Validating

  • ์Šค์Šค๋กœ ๊ฒ€์ฆ ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค.
    • ์ฝ˜์†”์— ์ฐ๋Š” ํ–‰์œ„ X: ํŒ๋‹จํ•˜๋Ÿฌ ๋กœ๊ทธ๋ฅผ ๋ณด์•„์•ผ ํ•จ
    • Assert: ์Šค์Šค๋กœ ๊ฒ€์ฆ ๊ฐ€๋Šฅ
    • ํšจ๊ณผ
      • ์‹คํ–‰ ์ž๋™ํ™”
      • ์ง€์†์  ํ†ตํ•ฉ
        • Jenkins, TeamCity

Thorough/Timely

  • ์ ์ ˆํ•œ?
    • ์š”๊ตฌ์‚ฌํ•ญ์ด ๋ณ€๊ฒฝ์ด ๋นˆ๋ฒˆํ•œ ๊ฐœ๋ฐœ ์ดˆ๊ธฐ ๋‹จ๊ณ„
    • ์˜ค๋ž˜ ๋ฐฉ์น˜๋œ ํ•˜์ง€๋งŒ ๋ฌธ์ œ ์—†๋Š” ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ
    • ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ ๊ตฌํ˜„ ์ „ํ›„
    • develop ๋ธŒ๋žœ์น˜์— ํ†ตํ•ฉํ•˜๊ธฐ ์ „
    • ๋ฐฐํฌํ•˜๊ธฐ ์ „
  • ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ ๋„์ž…์€ ์‚ฌ์‹ค ๊ณ ๋ฏผ์ด ํ•„์š”ํ•˜๋‹ค.

Right-BICEP

  • ๊ธฐ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ€์ฆํ•œ๋‹ค.
  • ํ•ดํ”ผ ์‹œ๋‚˜๋ฆฌ์˜ค ํ…Œ์ŠคํŠธ
    • ์ฝ”๋“œ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค๋ฉด, ๊ทธ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์„๊นŒ?
    • ์ด๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ๊ณง ์š”๊ตฌ์‚ฌํ•ญ, ์‹œ๋‚˜๋ฆฌ์˜ค, ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ๋ฅผ ์ถฉ๋ถ„ํžˆ ์ดํ•ดํ•œ ์ƒํƒœ๋ผ๋Š” ๊ฒƒ์„ ๋งํ•จ

Boundary condition

  • ๊ฒฝ๊ณ„ ์กฐ๊ฑด์„ ํ…Œ์ŠคํŠธ ํ•œ๋‹ค.

  • ๊ฒฝ๊ณ„์กฐ๊ฑด์˜ ์˜ˆ์‹œ

  • ๋ชจํ˜ธํ•˜๊ณ  ์ผ๊ด€์„ฑ ์—†๋Š” ์ž…๋ ฅ๊ฐ’

  • ์ž˜๋ชป๋œ ์–‘์‹์˜ ๋ฐ์ดํ„ฐ

  • ์ˆ˜์น˜์  ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ฅผ ์ผ์œผํ‚ค๋Š” ์—ฐ์‚ฐ

  • ๋น„๊ฑฐ๋‚˜ ๋น ์ง„ ๊ฐ’

  • ์ด์„ฑ์ ์ธ ๊ธฐ๋Œ€ ๊ฐ’์„ ํ›จ์”ฌ ๋ฒ—์–ด๋‚˜๋Š” ๊ฐ’

    • ๋‚˜์ด (150์‚ด?)
  • ์ค‘๋ณต ํ—ˆ์šฉ์ด ์•ˆ๋˜๋Š” ๋ชฉ๋ก์— ์ค‘๋ณต ๊ฐ’์ด ์กด์žฌ

  • ์ •๋ ฌ์ด ์•ˆ๋œ ์ •๋ ฌ ๋ฆฌ์ŠคํŠธ, ํ˜น์€ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ

  • ์‹œ๊ฐ„ ์ˆœ์ด ๋งž์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

    CORRECT (๊ฒฝ๊ณ„์กฐ๊ฑด)

  • Conformance (์–‘์‹ ์ค€์ˆ˜)

  • Ordering (์ •๋ ฌ ์ˆœ์„œ)

  • Range (๋ฒ”์œ„)

  • Reference (์ฐธ์กฐ)

  • Existence (์กด์žฌ)

  • Cardinality (๊ธฐ์ˆ˜)

  • Time (์ˆœ์„œ)

Inverse relationship

  • ๋…ผ๋ฆฌ์ ์ธ ์—ญ๊ด€๊ณ„๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ ํ•œ๋‹ค.
  • ์ˆ˜ํ•™์ ์ธ ๊ณ„์‚ฐ ๋กœ์ง ํ…Œ์ŠคํŠธ์— ์ข…์ข… ์‚ฌ์šฉ๋จ
    • ์ œ๊ณฑ๊ทผ: ๊ฒฐ๊ณผ๋ฅผ ๋‘๋ฒˆ ๊ณฑํ•ด์„œ ํ•ด๋‹น ๊ฐ’์ด ๋‚˜์˜ค๋Š”์ง€ ํ…Œ์ŠคํŠธ ํ•œ๋‹ค.

Cross-check result

  • ๋‹ค๋ฅธ ์ˆ˜๋‹จ์„ ํ™œ์šฉํ•˜์—ฌ ๊ต์ฐจ ํ…Œ์ŠคํŠธ ํ•œ๋‹ค.
  • ์ œ๊ณฑ๊ทผ ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค๋ฉด, ๋‹ค๋ฅธ ์ œ๊ณฑ๊ทผ ํ•จ์ˆ˜์™€ ๋น„๊ต๋ฅผ ํ•ด์„œ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•œ๋‹ค.
  • ์žฌ๊ตฌ์„ฑํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • ๋ฆฌํŒฉํ† ๋ง ์ด์ „ vs ์ดํ›„
  • ์ดํ•ฉ ํ™•์ธ

Error condition

  • ์˜ค๋ฅ˜ ์กฐ๊ฑดํ•˜์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธ ํ•œ๋‹ค.
  • ์–ธํ•ดํ”ผ ์‹œ๋‚˜๋ฆฌ์˜ค
    • ํ™˜๊ฒฝ์ ์ธ ์ œ์•ฝ
      • ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ฐ€๋“ ์ฐฐ ๋•Œ
      • ๋””์Šคํฌ ๊ณต๊ฐ„์ด ๊ฐ€๋“ ์ฐฐ ๋•Œ
      • ๋ฒฝ์‹œ๊ณ„ ์‹œ๊ฐ„์— ๊ด€ํ•œ ๋ฌธ์ œ๋“ค
      • ๋„คํŠธ์›Œํฌ ๊ฐ€์šฉ์„ฑ ๋ฐ ์˜ค๋ฅ˜๋“ค
      • ์‹œ์Šคํ…œ ๋กœ๋“œ
      • ์ œํ•œ๋œ ์ƒ‰์ƒ ํŒ”๋ ˆํŠธ
      • ๋งค์šฐ ๋†’๊ฑฐ๋‚˜ ๋‚ฎ์€ ๋น„๋””์˜ค ํ•ด์ƒ๋„

Performance

  • ์„ฑ๋Šฅ ์กฐ๊ฑด์„ ํ…Œ์ŠคํŠธ ํ•œ๋‹ค.
  • ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋กœ ๊ตฌ๊ฐ„๋ณ„ ๊ฒฝ๊ณผ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜์—ฌ ์ง„๋‹จ
    • ๋ณ‘๋ชฉ ์ง€์  ์ถ”์ธก์ด ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ
  • ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ด์ „ ์ฝ”๋“œ vs ์ตœ์ ํ™” ์ดํ›„ ์ฝ”๋“œ
    • old vs new
    • ๊ฐ๊ฐ์˜ ํ•จ์ˆ˜ ๋ฆฌํ„ด ์‚ฌ์ด ํ˜ธ์ถœ ์‹œ๊ฐ„ ๋น„๊ต

Reference