(RM 3๊ฐ•) EARS(Easy Approach to Requirements Syntax) ์†Œ๊ฐœ

๐Ÿš€ 3๊ฐ•: EARS(Easy Approach to Requirements Syntax) ์†Œ๊ฐœ

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„! ๐Ÿ˜€
์˜ค๋Š˜์€ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋” ์‰ฝ๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ธ EARS(Easy Approach to Requirements Syntax)๋ฅผ ์†Œ๊ฐœํ•ด๋“œ๋ฆด๊ฒŒ์š”.
์ด ๋ฐฉ๋ฒ•์€ ๋ณต์žกํ•œ ๋ฌธ์žฅ์„ ๊ฐ„๋‹จํ•œ ํŒจํ„ด์œผ๋กœ ์ •๋ฆฌํ•ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐœ๋ฐœ์ž์™€ ๊ธฐํš์ž, ์‹ฌ์ง€์–ด ๊ณ ๊ฐ๊นŒ์ง€ ๋ชจ๋‘ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.


๐ŸŒŸ EARS๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

EARS๋Š” Easy Approach to Requirements Syntax์˜ ์•ฝ์ž๋กœ,
์š”๊ตฌ์‚ฌํ•ญ์„ ์ผ์ •ํ•œ ๋ฌธ๋ฒ• ํŒจํ„ด์— ๋งž์ถฐ ์ž‘์„ฑํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.

๐Ÿ‘‰ ์žฅ์ ์€?

  • ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๊ธด ์„ค๋ช… โŒ
  • ํ•ด์„์ด ์ œ๊ฐ๊ฐ์ธ ๋ชจํ˜ธํ•œ ํ‘œํ˜„ โŒ
  • ๋ˆ„๊ตฌ๋‚˜ ํ•œ๋ˆˆ์— ์ดํ•ด ๊ฐ€๋Šฅํ•œ ์š”๊ตฌ์‚ฌํ•ญ โœ…

์ฆ‰, "๋ชจํ˜ธ์„ฑ ์ค„์ด๊ธฐ + ๊ฐ„๊ฒฐ์„ฑ ํ™•๋ณด"๋ผ๋Š” ๋‘ ๋งˆ๋ฆฌ ํ† ๋ผ๋ฅผ ๋™์‹œ์— ์žก์„ ์ˆ˜ ์žˆ๋Š” ๊ฑฐ์ฃ ! ๐Ÿฐ๐Ÿฐ


๐Ÿงฉ EARS์˜ ๊ธฐ๋ณธ ํŒจํ„ด

EARS๋Š” ์š”๊ตฌ์‚ฌํ•ญ์„ 5๊ฐ€์ง€ ์ฃผ์š” ํŒจํ„ด์œผ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค.

EARS ์ฃผ์š” ํŒจํ„ด

 

1. Ubiquitous ์š”๊ตฌ์‚ฌํ•ญ (์–ธ์ œ๋‚˜ ์ ์šฉ๋˜๋Š” ์š”๊ตฌ์‚ฌํ•ญ)

๐Ÿ“– ๊ตฌ์กฐ:
์‹œ์Šคํ…œ์€ [ํ•ญ์ƒ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๋™์ž‘]์„ ํ•œ๋‹ค.

๋ฌธ๋ฒ• ๊ตฌ์กฐ: “The <system> shall <response>”

๐Ÿ“Œ ์˜ˆ์‹œ:

  • “์‹œ์Šคํ…œ์€ ํ•ญ์ƒ ์‹œ๋™ ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋ฉด ์—”์ง„์„ ์‹œ๋™ํ•ด์•ผ ํ•œ๋‹ค.”
  • “์‹œ์Šคํ…œ์€ ํ•ญ์ƒ ์šด์ „์ž๊ฐ€ ์•ˆ์ „๋ฒจํŠธ๋ฅผ ๋งค์ง€ ์•Š์œผ๋ฉด ๊ฒฝ๊ณ ์Œ์„ ๋ฐœ์ƒํ•ด์•ผ ํ•œ๋‹ค.”

๐Ÿ‘‰ ํŠน์ง•: ์กฐ๊ฑด์ด ๋ถ™์ง€ ์•Š๊ณ , ์‹œ์Šคํ…œ์ด ํ•ญ์ƒ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ํ–‰๋™์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.


2. Event-driven ์š”๊ตฌ์‚ฌํ•ญ (ํŠน์ • ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ)

๐Ÿ“– ๊ตฌ์กฐ:
์‹œ์Šคํ…œ์€ [์กฐ๊ฑด/์ด๋ฒคํŠธ]๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด [๋™์ž‘]์„ ํ•ด์•ผ ํ•œ๋‹ค.

๋ฌธ๋ฒ• ๊ตฌ์กฐ: “When <trigger>, the <system> shall <response>”

๐Ÿ“Œ ์˜ˆ์‹œ:

  • “์‹œ์Šคํ…œ์€ ๋ฐฐํ„ฐ๋ฆฌ ์ „์••์ด 10V ๋ฏธ๋งŒ์ด๋ฉด ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•ด์•ผ ํ•œ๋‹ค.”
  • “์‹œ์Šคํ…œ์€ ๋ธŒ๋ ˆ์ดํฌ ํŽ˜๋‹ฌ์ด ๋ˆŒ๋ฆฌ๋ฉด ๋ธŒ๋ ˆ์ดํฌ๋“ฑ์„ ์ผœ์•ผ ํ•œ๋‹ค.”

๐Ÿ‘‰ ํŠน์ง•: ์กฐ๊ฑด๋ฌธ์ด ํฌํ•จ๋˜์–ด ํŠน์ • ์ƒํ™ฉ์—์„œ๋งŒ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.


3. State-driven ์š”๊ตฌ์‚ฌํ•ญ (์ƒํƒœ ๊ธฐ๋ฐ˜)

๐Ÿ“– ๊ตฌ์กฐ:
์‹œ์Šคํ…œ์€ [ํŠน์ • ์ƒํƒœ]์ผ ๋•Œ [๋™์ž‘]์„ ํ•ด์•ผ ํ•œ๋‹ค.

๋ฌธ๋ฒ• ๊ตฌ์กฐ: “While <precondition(s)>, the <system> shall <response>”

๐Ÿ“Œ ์˜ˆ์‹œ:

  • “์‹œ์Šคํ…œ์€ ์ฃผ์ฐจ ๋ชจ๋“œ ์ƒํƒœ์ผ ๋•Œ ํ›„๋ฐฉ ์นด๋ฉ”๋ผ ์˜์ƒ์„ ํ‘œ์‹œํ•ด์•ผ ํ•œ๋‹ค.”
  • “์‹œ์Šคํ…œ์€ ํฌ๋ฃจ์ฆˆ ์ปจํŠธ๋กค์ด ํ™œ์„ฑํ™”๋œ ์ƒํƒœ์ผ ๋•Œ ์„ค์ • ์†๋„๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค.”

๐Ÿ‘‰ ํŠน์ง•: ์ด๋ฒคํŠธ๋ณด๋‹ค๋Š” ์ƒํƒœ์— ๋”ฐ๋ผ ์‹œ์Šคํ…œ์˜ ๋™์ž‘์„ ๊ทœ์ •ํ•ฉ๋‹ˆ๋‹ค.


4. Optional ์š”๊ตฌ์‚ฌํ•ญ (์กฐ๊ฑด๋ถ€, ์„ ํƒ์  ์ƒํ™ฉ)

๐Ÿ“– ๊ตฌ์กฐ:
์‹œ์Šคํ…œ์€ [ํŠน์ • ์กฐ๊ฑด์ด ์ถฉ์กฑ๋  ๊ฒฝ์šฐ] [๋™์ž‘]์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

๋ฌธ๋ฒ• ๊ตฌ์กฐ: “Where <feature is included>, the <system> shall <response>”

๐Ÿ“Œ ์˜ˆ์‹œ:

  • “์‹œ์Šคํ…œ์€ ์•ผ๊ฐ„์ผ ๊ฒฝ์šฐ ํ—ค๋“œ๋žจํ”„ ์ž๋™ ์ ๋“ฑ ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•œ๋‹ค.”
  • “์‹œ์Šคํ…œ์€ ์‚ฌ์šฉ์ž๊ฐ€ ‘์—์ฝ” ๋ชจ๋“œ’๋ฅผ ์„ ํƒํ•œ ๊ฒฝ์šฐ ์—ฐ๋ฃŒ ํšจ์œจ์„ฑ์„ ์šฐ์„ ํ•ด์•ผ ํ•œ๋‹ค.”

๐Ÿ‘‰ ํŠน์ง•: ํŠน์ • ์˜ต์…˜์  ์ƒํ™ฉ์—์„œ๋งŒ ๋™์ž‘์ด ์š”๊ตฌ๋ฉ๋‹ˆ๋‹ค.


5. Complex ์š”๊ตฌ์‚ฌํ•ญ (๋ณตํ•ฉ ์กฐ๊ฑด)

๐Ÿ“– ๊ตฌ์กฐ:
์‹œ์Šคํ…œ์€ [์กฐ๊ฑด1] AND/OR [์กฐ๊ฑด2]์ผ ๋•Œ [๋™์ž‘]์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

๋ฌธ๋ฒ• ๊ตฌ์กฐ: ์˜ˆ1) ์ƒํƒœ + ์ด๋ฒคํŠธ: “While <precondition>, when <trigger>, the <system> shall <response>”

๐Ÿ“Œ ์˜ˆ์‹œ:

  • “์‹œ์Šคํ…œ์€ ์ฐจ๋Ÿ‰ ์†๋„๊ฐ€ 30km/h ์ด์ƒ์ด๊ณ , ์ฐจ์„  ์ดํƒˆ์ด ๊ฐ์ง€๋˜๋ฉด ๊ฒฝ๊ณ ์Œ์„ ์šธ๋ ค์•ผ ํ•œ๋‹ค.”
  • “์‹œ์Šคํ…œ์€ ๋ฐฐํ„ฐ๋ฆฌ ์ „์••์ด 10V ๋ฏธ๋งŒ์ด๊ฑฐ๋‚˜, ์ถฉ์ „ ์ผ€์ด๋ธ”์ด ๋ถ„๋ฆฌ๋˜๋ฉด ๊ฒฝ๊ณ ๋“ฑ์„ ์ผœ์•ผ ํ•œ๋‹ค.”

๐Ÿ‘‰ ํŠน์ง•: ๋ณต์ˆ˜์˜ ์กฐ๊ฑด์„ ์กฐํ•ฉํ•˜์—ฌ ์ข€ ๋” ์ •๊ตํ•œ ์š”๊ตฌ์‚ฌํ•ญ์„ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.


๐ŸŽฏ ์™œ EARS๋ฅผ ์จ์•ผ ํ• ๊นŒ?

์š”๊ตฌ์‚ฌํ•ญ์ด ๋ชจํ˜ธํ•˜๋ฉด, ๊ฐœ๋ฐœํŒ€๋งˆ๋‹ค ์ œ๊ฐ๊ฐ ํ•ด์„ํ•ด์„œ ์žฌ์ž‘์—…๊ณผ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด์š”. ๐Ÿ˜ต
ํ•˜์ง€๋งŒ EARS๋Š” ์ผ์ •ํ•œ ๋ฌธ๋ฒ• ํ‹€์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ, "์ด๊ฒŒ ๋ฌด์Šจ ๋œป์ด์ง€?"๋ผ๋Š” ์˜๋ฌธ์„ ์ค„์—ฌ์ค๋‹ˆ๋‹ค.

์ฆ‰, ํ’ˆ์งˆ ์ข‹์€ ์š”๊ตฌ์‚ฌํ•ญ → ํ’ˆ์งˆ ์ข‹์€ ์†Œํ”„ํŠธ์›จ์–ด๋กœ ์ด์–ด์ง€๋Š” ๊ฒƒ์ด์ฃ .


๐Ÿ’ก ์ •๋ฆฌ

EARS๋Š” ์ด๋ ‡๊ฒŒ ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์„ ๋ช…ํ™•ํ•œ ๋ฌธ์žฅ ๊ตฌ์กฐ๋กœ ์žก์•„์ฃผ๋Š” ์•„์ฃผ ์œ ์šฉํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

  • Ubiquitous: ์–ธ์ œ๋‚˜ ๋™์ž‘
  • Event-driven: ํŠน์ • ์ด๋ฒคํŠธ ์‹œ ๋™์ž‘
  • State-driven: ํŠน์ • ์ƒํƒœ์—์„œ ๋™์ž‘
  • Optional: ์กฐ๊ฑด๋ถ€/์„ ํƒ ์ƒํ™ฉ์—์„œ ๋™์ž‘
  • Complex: ๋ณตํ•ฉ ์กฐ๊ฑด์—์„œ ๋™์ž‘

๐Ÿ‘‰ ์ด 5๊ฐ€์ง€๋ฅผ ์ตํžˆ๋ฉด, ๋ชจํ˜ธํ•˜๊ฑฐ๋‚˜ ์• ๋งคํ•œ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ค„์ด๊ณ  ํŒ€์› ๋ชจ๋‘๊ฐ€ ๊ฐ™์€ ๊ทธ๋ฆผ์„ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค! ๐ŸŽ‰

 

๐Ÿ“ ์ •๋ฆฌ ํ‘œ

Ubiquitous ํ•ญ์ƒ ์ ์šฉ๋˜๋Š” ์š”๊ตฌ์‚ฌํ•ญ ๐Ÿš— ์‹œ์Šคํ…œ์€ ์‹œ๋™ ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋ฉด ์—”์ง„์„ ์‹œ๋™ํ•ด์•ผ ํ•œ๋‹ค.
Event-Driven ํŠน์ • ์‚ฌ๊ฑด(Event)์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋™์ž‘ ๐Ÿ”‹ ์‹œ์Šคํ…œ์€ ๋ฐฐํ„ฐ๋ฆฌ ์ „์••์ด 10V ๋ฏธ๋งŒ์ด๋ฉด ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•ด์•ผ ํ•œ๋‹ค.
State-Driven ํŠน์ • ์ƒํƒœ(State)์—์„œ ๋™์ž‘ ๐Ÿ…ฟ ์ฐจ๋Ÿ‰์ด ์ฃผ์ฐจ ๋ชจ๋“œ์ผ ๋•Œ ์ž๋™ ๋ธŒ๋ ˆ์ดํฌ๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•œ๋‹ค.
Optional ์กฐ๊ฑด์ด ์ฐธ์ผ ๋•Œ๋งŒ ๋™์ž‘ โš™ ์‚ฌ์šฉ์ž๊ฐ€ ์„ค์ •์„ ํ™œ์„ฑํ™”ํ•œ ๊ฒฝ์šฐ ์ž๋™ ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.
Complex ๋ณตํ•ฉ ์กฐ๊ฑด(์—ฌ๋Ÿฌ ์ด๋ฒคํŠธ·์ƒํƒœ ๊ฒฐํ•ฉ) ๐Ÿšจ ์ฐจ๋Ÿ‰ ์†๋„๊ฐ€ 80km/h ์ด์ƒ์ด๊ณ  ์ฐจ์„  ์ดํƒˆ ๊ฐ์ง€ ์‹œ ๊ฒฝ๊ณ ์Œ์„ ์šธ๋ ค์•ผ ํ•œ๋‹ค.

๐Ÿ”ฎ ๋‹ค์Œ ์‹œ๊ฐ„ ์˜ˆ๊ณ 

๋‹ค์Œ ๊ฐ•์˜์—์„œ๋Š”
“์ž˜๋ชป๋œ ์š”๊ตฌ์‚ฌํ•ญ ์‚ฌ๋ก€์™€ ๊ฐœ์„ ํ•˜๊ธฐ”๋ผ๋Š” ์ฃผ์ œ๋กœ
EARS๋ฅผ ํ™œ์šฉํ•ด ๋‚˜์œ ์š”๊ตฌ์‚ฌํ•ญ์„ ์–ด๋–ป๊ฒŒ ์ข‹์€ ์š”๊ตฌ์‚ฌํ•ญ์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ๋‹ค์Œ ์‹œ๊ฐ„์— ๋งŒ๋‚˜์š”~ ๐Ÿ™Œ

๋ฐ˜์‘ํ˜•