Computer Science ๐Ÿ“š/์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ

[์ •์ฒ˜๊ธฐ] ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์ถ• II - ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌํ˜„, ์†Œํ”„ํŠธ์›จ์–ด ํ…Œ์ŠคํŠธ, ์†Œํ”„ํŠธ์›จ์–ด ์œ ์ง€ ๋ณด์ˆ˜ etc.

leejaejae 2024. 7. 12. 11:44

์†Œํ”„ํŠธ์›จ์–ด ์ƒ๋ช… ์ฃผ๊ธฐ(Sofrware Development Life Cycle, SDLC)
โ‘ ํ”„๋กœ์ ํŠธ ๊ณ„ํš โ–ถ๏ธŽ โ‘ก์š”๊ตฌ ๋ถ„์„ โ–ถ๏ธŽ โ‘ข์„ค๊ณ„ โ–ถ๏ธŽ โ‘ฃ๊ตฌํ˜„ โ–ถ๏ธŽ โ‘คํ…Œ์ŠคํŠธ โ–ถ๏ธŽ โ‘ฅ์œ ์ง€ ๋ณด์ˆ˜

โ‘ฃ ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌํ˜„

โ–  ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ํ”„๋ ˆ์ž„์›Œํฌ

- ๊ฐœ๋ฐœํ•ด์•ผํ•  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ผ๋ถ€๋ถ„์ด ์ด๋ฏธ ๋‚ด์žฅ๋œ ํด๋ž˜์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๊ตฌํ˜„
- ๋™์ผ ๋กœ์ง ๋ฐ˜๋ณต ์ตœ์†Œํ™” / ์žฌ์‚ฌ์šฉ์„ฑ ํ™•๋Œ€ / ์ƒˆ์‚ฐ์„ฑ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์„ฑ ํ–ฅ์ƒ
→ ๋ชจ๋“ˆํ™” / ์žฌ์‚ฌ์šฉ์„ฑ / ํ™•์žฅ์„ฑ / ์ œ์–ด์˜ ์—ญํ๋ฆ„(ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ๋ฆ„ ์ œ์–ด)

  • ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ(Spring Framework)
    • JAVA ํ”Œ๋žซํผ์„ ์œ„ํ•œ ์˜คํ”ˆ ์†Œ์Šค ๊ฒฝ๋Ÿ‰ํ˜• ํ”„๋ ˆ์ž„์›Œํฌ
    • ๋™์  ์›น ์‚ฌ์ดํŠธ ๊ฐœ๋ฐœ / ์ „์ž์ •๋ถ€ ํ‘œ์ค€ ํ”„๋ ˆ์ž„์›Œํฌ
  • ์ „์ž์ •๋ถ€ ํ”„๋ ˆ์ž„์›Œํฌ
    • ์šฐ๋ฆฌ๋‚˜๋ผ ๊ณต๊ณต๋ถ€๋ฌธ ์ •๋ณดํ™” ์‚ฌ์—… ์‹œ ํšจ์œจ์ ์ธ ์ •๋ณด ์‹œ์Šคํ…œ ๊ตฌ์ถœ ์ง€์› ์œ„ํ•ด ํ•„์š”ํ•œ ๊ธฐ๋Šฅ/์•„ํ‚คํ…์ฒ˜๋ฅผ ์ œ๊ณต
  • ๋‹ท๋„ท ํ”„๋ ˆ์ž„์›Œํฌ(.NET Framework)
    • MS์—์„œ ๊ฐœ๋ฐœํ•œ Windows ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ
    • ๊ณตํ†ต ์–ธ์–ด ๋Ÿฐํƒ€์ž„(CLR)์ด๋ผ๋Š” ๊ฐ€์ƒ ๋จธ์‹  ์ƒ์—์„œ ์ž‘๋™

โ€ป API(Application Programming Interface)
- ์†Œํ”„ํŠธ์›จ์–ด ๊ฐ„ ์ธํ„ฐํŽ˜์ด์Šค (์„œ๋กœ ๋‹ค๋ฅธ ์†Œํ”„ํŠธ์›จ์–ด/์„œ๋น„์Šค ๊ฐ„ ์ƒํ˜ธ ์ž‘์šฉ ์šฉ์ด)
- ์šด์˜์ฒด์ œ ๋ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๊ธฐ๋Šฅ์„ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ตฌํ˜„
→ ๊ฐœ๋ฐœ ๋น„์šฉ ์ €๊ฐ / ์ค‘๋ณต ์ž‘์—… ์ตœ์†Œํ™” / ์œ ์ง€ ๊ด€๋ฆฌ ์šฉ์ด / ๋น„์ฆˆ๋‹ˆ์Šค ํ™•์žฅ

โ–บ ํŒฌ์ธ(Fan-in): ์ž์‹ ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“ˆ ์ˆ˜ → ํŒฌ์ธ์ด ๋†’์œผ๋ฉด ์žฌ์‚ฌ์šฉ ์ธก๋ฉด ์„ค๊ณ„ ์šฐ์ˆ˜ but, ๋‹จ์ผ ์žฅ์• ์  ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ ๋†’์•„ ์ง‘์ค‘์ ์ธ ๊ด€๋ฆฌ/ํ…Œ์ŠคํŠธ ํ•„์š”

โ–บ ํŒฌ์•„์›ƒ(Fan-out): ์ž์‹ ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“ˆ์˜ ์ˆ˜ → ๋ถˆํ•„์š”ํ•œ ํ˜ธ์ถœ ๊ฐ€๋Šฅ์„ฑ (๋‹จ์ˆœํ™” ํ•„์š”)


โ–  ์‘์ง‘๋„(Cohesion)

- ๊ฐœ๋ณ„ ๋ชจ๋“ˆ์ด ๋…๋ฆฝ์ ์œผ๋กœ ๊ธฐ๋Šฅ์œผ๋กœ ์ •์˜๋˜์–ด ์žˆ๋Š” ์ •๋„ / ์‘์ง‘๋„ โ–ฒ → ํ’ˆ์งˆ โ–ฒ

  • ๊ธฐ๋Šฅ์ (Function): ๋ชจ๋“ˆ ๋‚ด๋ถ€์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ ์š”์†Œ๊ฐ€ ๋‹จ์ผ ๋ฌธ์ œ์™€ ์—ฐ๊ด€๋˜์–ด ์ˆ˜ํ–‰
  • ์ˆœ์ฐจ์ (Sequential): ๋ชจ๋“ˆ ๋‚ด ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์Œ ํ™œ๋™์˜ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋กœ ์‚ฌ์šฉ
  • ํ†ต์‹ ์ ใƒป๊ตํ™˜์ (Commuication): ๋™์ผํ•œ ์ž…/์ถœ๋ ฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋กœ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰
  • ์ ˆ์ฐจ์ (Procedural): ๋ชจ๋“ˆ ๋‚ด ๊ตฌ์„ฑ ์š”์†Œ๋“ค์ด ๋‹ค์ˆ˜ ๊ด€๋ จ ๊ธฐ๋Šฅ์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ˆ˜ํ–‰
  • ์‹œ๊ฐ„์ (Temporal): ํŠน์ • ์‹œ๊ฐ„ ๋‚ด ์ฒ˜๋ฆฌ๋˜๋Š” ๊ธฐ๋Šฅ์„ ๋ชจ์•„ ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ๋กœ ์ž‘์„ฑ
  • ๋…ผ๋ฆฌ์ (Logical): ์œ ์‚ฌํ•œ ์„ฑ๊ฒฉ์˜ ์ฒ˜๋ฆฌ ์š”์†Œ๋“ค๋กœ ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ์ด ํ˜•์„ฑ
  • ์šฐ์—ฐ์ (Coincidental): ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์ด ์„œ๋กœ ๊ด€๋ จ์—†๋Š” ์š”์†Œ๋กœ๋งŒ ๊ตฌ์„ฑ

(๋†’์€ ์‘์ง‘๋„) ๊ธฐ๋Šฅ์  โ–บ ์ˆœ์ฐจ์  โ–บ ํ†ต์‹ ์ ใƒป๊ตํ™˜์   โ–บ ์ ˆ์ฐจ์  โ–บ ์‹œ๊ฐ„์  โ–บ ๋…ผ๋ฆฌ์  โ–บ ์šฐ์—ฐ์  (๋‚ฎ์€ ์‘์ง‘๋„)

โ–  ๊ฒฐํ•ฉ๋„(Coupling)

- ๊ฐœ๋ณ„ ๋ชจ๋“ˆ ๊ฐ„ ์ƒํ˜ธ ์˜์กดํ•˜๋Š” ์ •๋„ / ๊ฒฐํ•ฉ๋„ โ–ผ → ํ’ˆ์งˆ โ–ฒ

  • ๋‚ด์šฉ(Content): ํ•œ ๋ชจ๋“ˆ์ด ๋‹ค๋ฅธ ๋ชจ๋“ˆ์˜ ๋‚ด๋ถ€ ๊ธฐ๋Šฅ ๋ฐ ์ž๋ฃŒ๋ฅผ ์ง์ ‘ ์ฐธ์กฐ/์ˆ˜์ •
  • ๊ณตํ†ต/๊ณต์œ (Common): ๊ณต์œ ๋˜๋Š” ๊ณตํ†ต ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์ด ์‚ฌ์šฉ(์ „์—ญ ๋ณ€์ˆ˜ ์ฐธ์กฐ)
  • ์™ธ๋ถ€(External): ํ•œ ๋ชจ๋“ˆ์—์„œ ์„ ์–ธํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์™ธ๋ถ€์˜ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ์ฐธ์กฐ
  • ์ œ์–ด(Control): ํ•œ ๋ชจ๋“ˆ์ด ๋‹ค๋ฅธ ๋ชจ๋“ˆ์˜ ์ƒ์„ธํ•œ ์ฒ˜๋ฆฌ ์ ˆ์ฐจ๋ฅผ ์•Œ๊ณ  ์žˆ์–ด ์ด๋ฅผ ํ†ต์ œํ•˜๋Š” ๊ฒฝ์šฐ๋‚˜ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์ด ๋‘ ๋ชจ๋“ˆ์— ๋ถ„๋ฆฌ๋˜์–ด ์„ค๊ณ„, ์ฒ˜๋ฆฌ ๋Œ€์ƒ ๊ฐ’๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์˜ ์ œ์–ด ์š”์†Œ๋„ ์ „๋‹ฌ
  • ์Šคํƒฌํ”„(Stamp): ๋‘ ๋ชจ๋“ˆ์ด ๋™์ผํ•œ ์ž๋ฃŒ ๊ตฌ์กฐ(๋ฐฐ์—ด, ์˜ค๋ธŒ์ ํŠธ)๋ฅผ ์กฐํšŒ, ์ž๋ฃŒ ๊ตฌ์กฐ ๋ฐ ํฌ๋งท ๋ณ€ํ™” ์‹œ ์กฐํšŒํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“  ๋ชจ๋“ˆ์— ์˜ํ–ฅ
  • ์ž๋ฃŒ(Data): ๋ชจ๋“ˆ ๊ฐ„์˜ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ž๋ฃŒ ์š”์†Œ๋กœ๋งŒ ๊ตฌ์„ฑ

(๋‚ฎ์€ ๊ฒฐํ•ฉ๋„) ์ž๋ฃŒ โ–บ ์Šคํƒฌํ”„ โ–บ ์ œ์–ด  โ–บ ์™ธ๋ถ€ โ–บ ๊ณตํ†ต/๊ณต์œ  โ–บ ๋‚ด์šฉ (๋†’์€ ๊ฒฐํ•ฉ๋„)

โ€ป ๋ชจ๋“ˆ์˜ ๋…๋ฆฝ์„ฑ: ๋ชจ๋“ˆ ๊ฐ„ ๊ณผ๋„ํ•œ ์ƒํ˜ธ์ž‘์šฉ์„ ๋ง‰๊ณ  ํ•˜๋‚˜์˜ ๋…๋ฆฝ์  ๊ธฐ๋Šฅ๋งŒ์„ ์ˆ˜ํ–‰ → ๋†’์€ ๋…๋ฆฝ์„ฑ: ๋†’์€ ์‘์ง‘๋„ / ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„

โ–  ๊ฐ์ฒด ์ง€ํ–ฅ(Object-oriented): ๊ฐ์ฒด์™€ ์†์„ฑ, ํด๋ž˜์Šค์™€ ๋ฉค๋ฒ„, ์ „์ฒด์™€ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ  ๋ถ„์„

๊ฐ์ฒด(Object) ๊ณ ์œ  ์‹๋ณ„์ž / ํ•˜๋‚˜์˜ ๋…๋ฆฝ๋œ ์กด์žฌ / ์ผ์ •ํ•œ ๊ธฐ์–ต์žฅ์†Œ ๋ณด์œ 
์ƒํƒœ(state) = ๊ฐ์ฒด์ž ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์กฐ๊ฑด, ์†์„ฑ ๊ฐ’์— ์˜ํ•ด ์ •์˜
ํ–‰์œ„(์—ฐ์‚ฐ, Method) = ๊ฐ์ฒด๊ฐ€ ๋ฐ˜์‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์‹œ์ง€ ์ง‘ํ•ฉ
ํด๋ž˜์Šค(Class) ๊ณตํ†ต ์†์„ฑ๊ณผ ์—ฐ์‚ฐ(ํ–‰์œ„)์„ ๊ฐ–๋Š” ๊ฐ์ฒด์˜ ์ง‘ํ•ฉ / ๋ฐ์ดํ„ฐ ์ถ”์ƒํ™” ๋‹จ์œ„
โ€ป ์ธ์Šคํ„ด์Šค(Instance): ํด๋ž˜์Šค์— ์†ํ•œ ๊ฐ๊ฐ์˜ ๊ฐ์ฒด
โ€ป Operation: ํด๋ž˜์Šค์˜ ๋™์ž‘ / ๊ฐ์ฒด์— ๋Œ€ํ•ด ์ ์šฉ๋  ๋ฉ”์„œ๋“œ ์ •์˜
์บก์Šํ™”(Encapsulation) ๋ฐ์ดํ„ฐ์™€ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์Œ
์„ธ๋ถ€ ๋‚ด์šฉ ์€ํ(์ •๋ณด ์€๋‹‰) → ์™ธ๋ถ€ ์ ‘๊ทผ ์ œํ•œ
๊ฒฐํ•ฉ๋„ ๋‚ฎ์Œ / ์žฌ์‚ฌ์šฉ์„ฑ ์šฉ์ด / ์ธํ„ฐํŽ˜์ด์Šค ๋‹จ์ˆœ / ์˜ค๋ฅ˜ ํŒŒ๊ธ‰ํšจ๊ณผ ๋‚ฎ์Œ
์ƒ์†(Inheritance) ์ƒ์œ„ ํด๋ž˜์Šค์˜ ์†์„ฑ๊ณผ ์—ฐ์‚ฐ์„ ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ๋ฌผ๋ ค๋ฐ›๋Š” ๊ฒƒ
โ€ป ๋‹ค์ค‘ ์ƒ์†: ๋‹จ์ผ ํด๋ž˜์Šค๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ์˜ ์ƒ์œ„ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ƒ์†
๋‹คํ˜•์„ฑ(Polymorphism) ํ•˜๋‚˜์˜ ๋ฉ”์‹œ์ง€์— ๊ฐ ๊ฐ์ฒด ๋ณ„ ๊ณ ์œ  ํŠน์„ฑ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ํ˜•ํƒœ์˜ ์‘๋‹ต

- ์˜ค๋ฒ„๋ผ์ด๋”ฉ(Overriding): ์ƒ์œ„ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ƒ์†๋ฐ›์€ ๋ฉ”์„œ๋“œ๋ฅผ ํ•˜์œ„ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜ → ๋‹จ, ๋ฉ”์„œ๋“œ ์ด๋ฆ„ / ๋งค๊ฐœ๋ณ€์ˆ˜ / ๋ฐ˜ํ™˜ ํƒ€์ž…์€ ๋™์ผํ•ด์•ผ ํ•จ
- ์˜ค๋ฒ„๋กœ๋”ฉ(Overloading): ๋ฉ”์„œ๋“œ ์ด๋ฆ„์€ ๋™์ผํ•˜๋‚˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐœ์ˆ˜ ๋˜๋Š” ํƒ€์ž…์„ ๋‹ค๋ฅด๊ฒŒ ์ง€์ •

โ€ป ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„ 5๋Œ€ ์›์น™(SOLID)
- ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP, Sigle Responsibility Principle) → ๋ชจ๋“  ํด๋ž˜์Šค/๊ฐ์ฒด๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ / ์™„์ „ํ•œ ์บก์Šํ™”
- ๊ฐœ๋ฐœ ํŽ˜์‡„์˜ ์›์น™(OCP, Open Closed Principle) → ํ™•์žฅ์—๋Š” Openํ•˜๊ณ , ์ˆ˜์ •์—๋Š” Close
- ๋ฆฌ์Šค์ฝ”ํ”„ ๊ต์ฒด ์›์น™(LSP, Liskov Substitution Principle) → ์ƒ์œ„ ํด๋ž˜์Šค์˜ ํ–‰๋™ ๊ทœ์•ฝ์„ ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ์œ„๋ฐ˜ํ•˜๋ฉด ์•ˆ๋จ
- ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™(ISP, Interface Segregation Principle) → ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋น„์‚ฌ์šฉ ๋ฉ”์„œ๋“œ์— ์˜์กดํ•˜์ง€ ์•Š์•„์•ผ ํ•จ
- ์˜์กด์„ฑ ์—ญ์ „ ์›์น™(DIP, Dependency Inversion Principle) → ์˜์กด ๊ด€๊ณ„ ์ˆ˜๋ฆฝ ์‹œ ๋ณ€ํ™”ํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒƒ(์ถ”์ƒ์„ฑ์ด ๋†’์€ ์ƒ์œ„ ํด๋ž˜์Šค)์— ์˜์กดํ•ด์•ผ ํ•จ

โ–  ๋””์ž์ธ ํŒจํ„ด: GoF(Gang of Four) ์ฒ˜์Œ ์ œ์•ˆํ•˜์—ฌ ๊ตฌ์ œํ™”

- ์„œ๋ธŒ์‹œ์Šคํ…œ์— ์†ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋“ค๊ณผ ๊ทธ ๊ด€๊ณ„๋ฅผ ์„ค๊ณ„ํ•˜๊ธฐ ์œ„ํ•œ ์ฐธ์กฐ ๋ชจ๋ธ
- ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์„ค๊ณ„ ์‹œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ฐ˜๋ณต์  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

[ ์ƒ์„ฑ ํŒจํ„ด ]

  • Abstract Factory: ๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค์— ์˜์กดํ•˜์ง€ ์•Š๊ณ , ์„œ๋กœ ์—ฐ๊ด€๋˜๊ฑฐ๋‚˜ ์˜์กด์ ์ธ ๊ฐ์ฒด๋“ค์ด ์กฐํ•ฉ๋œ ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ณต
  • Builder: ๊ฐ์ฒด ์ƒ์„ฑ ๋‹จ๊ณ„๋ฅผ ์บก์Šํ™”/๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์กฐ๋ฆฝํ•˜์—ฌ ์ƒ์„ฑ → ๋™์ผํ•œ ๊ฐ์ฒด ์ƒ์„ฑ ์ ˆ์ฐจ์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ํ‘œํ˜„ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณต
  • Factory Method: ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ๊ฐ์ฒด ์ƒ์„ฑ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•˜์ง€๋งŒ, ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ํด๋ž˜์Šค๋Š” ์„œ๋ธŒ ํด๋ž˜์Šค์—์„œ ๊ฒฐ์ •ํ•˜๋„๋ก ๋ถ„๋ฆฌ
  • Prototype: ์›๋ณธ/์›ํ˜• ๊ฐ์ฒด๋ฅผ ๋ณต์ œํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐ์ฒด ์ƒ์„ฑ
  • Singleton: ํด๋ž˜์Šค์—์„œ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋งŒ ์ƒ์„ฑ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์–ด๋””์„œ๋“  ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์ฐธ์กฐ๋Š” ๋ถˆ๊ฐ€

[ ๊ตฌ์กฐ ํŒจํ„ด ]

  • Adaptor: ๋น„ํ˜ธํ™˜ ์ธํ„ฐํŽ˜์ด์Šค์— ํ˜ธํ™˜์„ฑ ๋ถ€์—ฌํ•˜๋„๋ก ๋ณ€ํ™˜
  • Bridge: ๊ตฌํ˜„๋ถ€์—์„œ ์ถ”์ƒ์ธต์„ ๋ถ„๋ฆฌ ํ›„ ๊ฐ€๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๋ณ€ํ˜•/ํ™•์žฅ ๊ฐ€๋Šฅ
  • Composite: ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๋ถ€๋ถ„/์ „์ฒด ๊ณ„์ธต ํ‘œํ˜„, ๋ณตํ•ฉ/๋‹จ์ผ ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถ„์—†์ด ์‚ฌ์šฉ
  • Decorator: ์ƒ์† ์‚ฌ์šฉ์—†์ด ๊ฐ์ฒด ๊ฐ„ ๊ฒฐํ•ฉ์„ ํ†ตํ•ด ๊ฐ์ฒด ๊ธฐ๋Šฅ์„ ๋™์ ์œผ๋กœ ์ถ”๊ฐ€/ํ™•์žฅ
  • Facade: ์ƒ์œ„์— ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์„ฑํ•˜์—ฌ ์„œ๋ธŒํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์„ ๋ณต์žกํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜์ง€ ์•Š๊ณ  ๋‹จ์ˆœํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ตฌํ˜„
  • Flyweight: ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณต์œ ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ(ํด๋ž˜์Šค ๊ฒฝ๋Ÿ‰ํ™”)
  • Proxy: ์ ‘๊ทผ์ด ํž˜๋“  ๊ฐ์ฒด๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์—ญํ• (๋Œ€๋ฆฌ ๊ฐ์ฒด ์ˆ˜ํ–‰)

[ ํ–‰์œ„ ํŒจํ„ด ] 

  • Chain of Responsibility: ์ฒ˜๋ฆฌ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๊ฐ€ ๋‘˜ ์ด์ƒ ์กด์žฌํ•˜์—ฌ ํ•œ ๊ฐ์ฒด ๋‚ด ์ฒ˜๋ฆฌ ๋ถˆ๊ฐ€ ์‹œ ๋‹ค์Œ ๊ฐ์ฒด๋กœ ์ด๊ด€
  • Comman: ์š”์ฒญ ๋ช…๋ น์–ด๋“ค์„ ์ถ”์ƒ/๊ตฌ์ฒด ํด๋ž˜์Šค๋กœ ๋ถ„๋ฆฌ ํ›„ ๋‹จ์ˆœํ™”/์บก์Šํ™”
  • Interpreter: ์–ธ์–ด์— ๋ฌธ๋ฒ• ํ‘œํ˜„ ์ •์˜
  • Iterator: ์ ‘๊ทผ์ด ๋นˆ๋ฒˆํ•œ ๊ฐํ…Œ์— ๋™์ผ ์ธํ„ฐํŽ˜์ด์Šค ์‚ฌ์šฉ
  • Mediator: ๊ฐ์ฒด๋“ค๊ฐ„ ๋ณต์žกํ•œ ์ƒํ˜ธ์ž‘์šฉ์„ ์บก์Šํ™”ํ•˜์—ฌ ๊ฐ์ฒด๋กœ ์ •์˜ ํ›„ ์ค‘์žฌ
  • Memento: ๊ฐ์ฒด๋ฅผ ์ด์ „์˜ ํŠน์ • ์‹œ์ ์˜ ์ƒํƒœ๋กœ ์ €์žฅํ•˜๊ณ  ๋ณต์›(์บก์Šํ™” ์œ ์ง€)
  • Observer: ํ•œ ๊ฐ์ฒด ์ƒํƒœ ๋ณ€ํ™” ์‹œ ์ƒ์†๋˜์–ด ์žˆ๋Š” ๊ฐ์ฒด๋“ค์— ๋ณ€ํ™” ์ „๋‹ฌ
  • State: ๊ฐ์ฒด์˜ ์ƒํƒœ์— ๋”ฐ๋ผ ๋™์ผํ•œ ๋™์ž‘์„ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ
  • Strategy: ๋™์ผ ๊ณ„์—ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ์บก์Šํ™”ํ•˜์—ฌ ์ƒํ˜ธ ๊ตํ™˜
  • Template Method: ์—ฌ๋Ÿฌ ํด๋ž˜์Šค์—์„œ ๊ณตํ†ต ์‚ฌ์šฉ ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ์ •์˜ํ•˜๊ณ , ํ•˜์œ„ ํด๋ž˜์Šค๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผํ•˜๋Š” ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๊ฐœ๋ณ„ ๊ตฌํ˜„
  • Visitor: ๊ฐ ํด๋ž˜์Šค ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ๋ถ€ํ„ฐ ์ฒ˜๋ฆฌ/์—ฐ์‚ฐ ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ณ„๋„์˜ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ , ํ•ด๋‹น ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ๊ฐ€ ๊ฐ ํด๋ž˜์Šค๋ฅผ ๋Œ์•„๋‹ค๋‹ˆ๋ฉฐ ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ → ๊ฐ์ฒด ๊ตฌ์กฐ ๋ณ€๊ฒฝX / ์ƒˆ๋กœ์šด ์—ฐ์‚ฐ ๊ธฐ๋Šฅ๋งŒ ์ถ”๊ฐ€

 

โ‘ค ์†Œํ”„ํŠธ์›จ์–ด ํ…Œ์ŠคํŠธ

โ–  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ…Œ์ŠคํŠธ ๊ธฐ๋ณธ ์›๋ฆฌ

- ํ…Œ์ŠคํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฒฐํ•จ์ด ์กด์žฌํ•จ์„ ๋ฐํžˆ๋Š” ๊ฒƒ (๋ฌด๊ฒฐํ•จ์„ ์ฆ๋ช…ํ•  ์ˆ˜๋Š” ์—†์Œ) → ์™„๋ฒฝํ•œ ํ…Œ์ŠคํŠธ๋Š” ๊ทผ์›์ ์œผ๋กœ ๋ถˆ๊ฐ€๋Šฅ (๋ฌดํ•œ ๊ฒฝ๋กœ, ๋ฌดํ•œ ์ž…๋ ฅ ๋ถˆ๊ฐ€)
- ๊ฒฐํ•จ ์ง‘์ค‘: ํŒŒ๋ ˆํ† (Pareto) ๋ฒ•์น™, 20%์˜ ๋ชจ๋“ˆ์—์„œ ์ „์ฒด ๊ฒฐํ•จ 80%  ๋ฐœ์ƒ
- ์‚ด์ถฉ์ œ ํŒจ๋Ÿฌ๋…์Šค: ๋™์ผํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ์˜ํ•œ ๋ฐ˜๋ณต ํ…Œ์ŠคํŠธ๋Š” ์ƒˆ๋กœ์šด ๋ฒ„๊ทธ ๋ฐœ๊ฒฌ X
- ์˜ค๋ฅ˜-๋ถ€์žฌ์˜ ๊ถค๋ณ€: ๊ฒฐํ•จ์ด ์—†๋‹ค ํ•ด๋„ ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์‚ฌํ•ญ ๋ฏธ์ถฉ์กฑ ์‹œ ํ’ˆ์งˆ ์ €ํ•˜
- Brooks์˜ ๋ฒ•์น™: ์ง€์—ฐ๋˜๋Š” ํ”„๋กœ์ ํŠธ์— ์ธ๋ ฅ ์ถ”๊ฐ€ ํˆฌ์ž… ์‹œ ๋” ์ง€์—ฐ

โ–  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ…Œ์ŠคํŠธ ๋ถ„๋ฅ˜

โ‘  ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์—ฌ๋ถ€

  • ์ •์  ํ…Œ์ŠคํŠธ: ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰X / ๋ช…์„ธ์„œ, ์†Œ์Šค ์ฝ”๋“œ๋งŒ ๋ถ„์„
    • ex. ๋™๋ฃŒ ๊ฒ€ํ† , ์›Œํฌ ์Šค๋ฃจ, ์ธ์ŠคํŽ™์…˜, ์ฝ”๋“œ ๊ฒ€์‚ฌ
  • ๋™์  ํ…Œ์ŠคํŠธ: ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ํ›„ ์˜ค๋ฅ˜ ๊ฒ€์‚ฌ
    • ex. ํ™”์ดํŠธ/๋ธ”๋ž™๋ฐ•์Šค ํ…Œ์ŠคํŠธ

โ‘ก ํ…Œ์ŠคํŠธ ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ

  • ๋ช…์„ธ ๊ธฐ๋ฐ˜: ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์‚ฌํ•ญ์— ๋Œ€ํ•ด ๋ช…์„ธ๋ฅผ ๋น ์ง์—†์ด ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ๊ตฌํ˜„ํ•˜๋Š”์ง€ ํ™•์ธ
    • ex. ๋™๋“ฑ ๋ถ„ํ•  / ๊ฒฝ๊ณ„๊ฐ’ ๋ถ„์„ (๋ธ”๋ž™๋ฐ•์Šค)
  • ๊ตฌ์กฐ ๊ธฐ๋ฐ˜: SW ๋‚ด๋ถ€ ๋…ผ๋ฆฌ ํ๋ฆ„์— ๋”ฐ๋ผ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ/ํ™•์ธ
    • ex. ๊ตฌ๋ฌธ ๊ธฐ๋ฐ˜ / ๊ฒฐ์ • ๊ธฐ๋ฐ˜ / ์กฐ๊ฑด ๊ธฐ๋ฐ˜ (ํ™”์ดํŠธ๋ฐ•์Šค)
  • ๊ฒฝํ—˜ ๊ธฐ๋ฐ˜: ํ…Œ์ŠคํŠธ์˜ ๊ฒฝํ—˜์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ˆ˜ํ–‰
    • ex. ์—๋Ÿฌ ์ถ”์ •, ์ฒดํฌ๋ฆฌ์ŠคํŠธ, ํƒ์ƒ‰์  ํ…Œ์ŠคํŒ…

โ‘ข ๋ชฉ์  ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ

  • ํšŒ๋ณต(Recovery): ์‹œ์Šคํ…œ์— ์ธ์œ„์  ๊ฒฐํ•จ ๋ถ€์—ฌ ํ›„ ์ •์ƒ์œผ๋กœ ํšŒ๋ณต๋˜๋Š” ๊ณผ์ • ํ™•์ธ
  • ์•ˆ์ „(Security): ์™ธ๋ถ€ ๋ถˆ๋ฒ• ์นจ์ž…์œผ๋กœ๋ถ€ํ„ฐ ์‹œ์Šคํ…œ์„ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธ
  • ๊ฐ•๋„(Stress): ๊ณผ๋ถ€ํ•˜ ์‹œ SW ์ •์ƒ ๊ตฌ๋™ ์—ฌ๋ถ€ ํ™•์ธ
  • ์„ฑ๋Šฅ(Performance): ์‹ค์‹œ๊ฐ„ ์„ฑ๋Šฅ ๋ฐ ์ „์ฒด์ ์ธ ํšจ์œจ์„ฑ ์ง„๋‹จ(์‘๋‹ต ์‹œ๊ฐ„, ์—…๋ฌด ์ฒ˜๋ฆฌ๋Ÿ‰)
  • ๊ตฌ์กฐ(Structure): SW ๋‚ด๋ถ€ ๋…ผ๋ฆฌ์  ๊ฒฝ๋กœ ๋ฐ ์†Œ์Šค ์ฝ”๋“œ ๋ณต์žก๋„ ํ‰๊ฐ€
  • ํšŒ๊ท€(Regression): SW ๋‚ด ๋ณ€๊ฒฝ ๋˜๋Š” ์ˆ˜์ •๋œ ์ฝ”๋“œ์— ์ƒˆ๋กœ์šด ๊ฒฐํ•จ์ด ์—†์Œ์„ ํ™•์ธ
  • ๋ณ‘ํ–‰(Parallel): ๋ณ€๊ฒฝ ๋ฐ ๊ธฐ์กด SW์— ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ํ›„ ๊ฒฐ๊ณผ ๋น„๊ต

โ‘ฃ ์‹œ๊ฐ(๊ด€์ ) ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ

  • ๊ฒ€์ฆ(Verification): ๊ฐœ๋ฐœ์ž์˜ ์‹œ๊ฐ์—์„œ ์ œํ’ˆ์˜ ์ƒ์‚ฐ ๊ณผ์ • ํ…Œ์ŠคํŠธ
    • ex. ๋‹จ์œ„/ํ†ตํ•ฉ/์‹œ์Šคํ…œ ํ…Œ์ŠคํŠธ
  • ํ™•์ธ(Validation): ์‚ฌ์šฉ์ž์˜ ์‹œ๊ฐ์—์„œ ์ƒ์‚ฐ๋œ ์ œํ’ˆ์˜ ๊ฒฐ๊ณผ ํ…Œ์ŠคํŠธ
    • ex. ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ(์•ŒํŒŒ / ๋ฒ ํƒ€)

โ–  ํ™”์ดํŠธ๋ฐ•์Šค ํ…Œ์ŠคํŠธ (White Box Test)

- ๋ชจ๋“ˆ ์•ˆ์˜ ๋‚ด์šฉ(์ž‘๋™) ์ง์ ‘ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‚ด๋ถ€์˜ ๋…ผ๋ฆฌ์ ์ธ ๋ชจ๋“  ๊ฒฝ๋กœ๋ฅผ ํ…Œ์ŠคํŠธ
- ์†Œ์Šค ์ฝ”๋“œ์˜ ๋ชจ๋“  ๋ฌธ์žฅ์„ ํ•œ ๋ฒˆ ์ด์ƒ ์ˆ˜ํ–‰ / ๋…ผ๋ฆฌ์  ๊ฒฝ๋กœ ์ ๊ฒ€ (์„ ํƒ, ๋ฐ˜๋ณต ์ˆ˜ํ–‰)
- ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•ด ๊ฒ€์ฆ ๊ธฐ์ค€ ์ปค๋ฒ„๋ฆฌ์ง€(Coverage) ์ •ํ•จ

[ ํ™”์ดํŠธ๋ฐ•์Šค ํ…Œ์ŠคํŠธ ๊ฒ€์ฆ ๊ธฐ์ค€ ]

  • ๊ตฌ๋ฌธ ์ปค๋ฒ„๋ฆฌ์ง€(Statement Coverage): ํ”„๋กœ๊ทธ๋žจ ๋‚ด ๋ชจ๋“  ๋ช…๋ น๋ฌธ์„ ์ ์–ด๋„ ํ•œ ๋ฒˆ ์ˆ˜ํ–‰
  • ๊ฒฐ์ •(๋ถ„๊ธฐ) ์ปค๋ฒ„๋ฆฌ์ง€(Branch Coverage): ํ”„๋กœ๊ทธ๋žจ ๋‚ด ์ „์ฒด ๊ฒฐ์ •๋ฌธ์ด ์ ์–ด๋„ ํ•œ ๋ฒˆ์€ ์ฐธ/๊ฑฐ์ง“ ๊ฒฐ๊ณผ ์ˆ˜ํ–‰
  • ์กฐ๊ฑด ์ปค๋ฒ„๋ฆฌ์ง€(Condition Coverage): ๊ฒฐ์ • ๋ช…๋ น๋ฌธ ๋‚ด์˜ ๊ฐ ๊ฐœ๋ณ„ ์กฐ๊ฑด์‹์ด ์ ์–ด๋„ ํ•œ ๋ฒˆ์€ ์ฐธ/๊ฑฐ์ง“ ๊ฒฐ๊ณผ ์ˆ˜ํ–‰
  • ์กฐ๊ฑด/๊ฒฐ์ • ์ปค๋ฒ„๋ฆฌ์ง€(Condition/Decision): ์ „์ฒด ์กฐ๊ฑด์‹๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ฐœ๋ณ„ ์กฐ๊ฑด์‹๋„ ์ฐธ ํ•œ ๋ฒˆ ์ด์ƒ, ๊ฑฐ์ง“ ํ•œ ๋ฒˆ ์ด์ƒ ๊ฒฐ๊ณผ ์ˆ˜ํ–‰
  • ๋ณ€๊ฒฝ ์กฐ๊ฑด/๊ฒฐ์ • ์ปค๋ฒ„๋ฆฌ์ง€(MC/DC): Modified Coverage/Decision Coverage, ๊ฐ ๊ฐœ๋ณ„์กฐ๊ฑด์‹์ด ๋…๋ฆฝ์ ์œผ๋กœ ์ „์ฒด ์กฐ๊ฑด์‹์˜ ๊ฒฐ๊ณผ์— ์˜ํ–ฅ
  • ๋‹ค์ค‘ ์กฐ๊ฑด ์ปค๋ฒ„๋ฆฌ์ง€(Multiple Condition): ๊ฒฐ์ • ํฌ์ธํŠธ ๋‚ด ๋ชจ๋“  ๊ฐœ๋ณ„์กฐ๊ฑด์‹์˜ ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ๋…ผ๋ฆฌ์  ์กฐํ•ฉ์„ ๊ณ ๋ คํ•˜์—ฌ 100% ์ปค๋ฒ„๋ฆฌ์ง€ ๋ณด์žฅ 

[ ํ™”์ดํŠธ๋ฐ•์Šค ํ…Œ์ŠคํŠธ ์ข…๋ฅ˜ ]

  • ๊ธฐ์ดˆ ๊ฒฝ๋กœ ๊ฒ€์‚ฌ(Base Path Testing)
    • ๋Œ€ํ‘œ์  ํ™”์ดํŠธ๋ฐ•์Šค ํ…Œ์ŠคํŠธ ๊ธฐ๋ฒ• (๋™์  ํ…Œ์ŠคํŠธ)
    • ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์„ค๊ณ„์ž๊ฐ€ ์ ˆ์ฐจ์  ์„ค๊ณ„์˜ ๋…ผ๋ฆฌ์  ๋ณต์žก์„ฑ์„ ์ธก์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ…Œ์ŠคํŠธ ๊ธฐ๋ฒ•
    • ์ธก์ • ๊ฒฐ๊ณผ๋Š” ์‹คํ–‰ ๊ฒฝ๋กœ์˜ ๊ธฐ์ดˆ๋ฅผ ์ •์˜ํ•˜๋Š” ์ง€์นจ์œผ๋กœ ์‚ฌ์šฉ
  • ์ œ์–ด ๊ตฌ์กฐ ๊ฒ€์‚ฌ(Control Structure Testing)
    • ์กฐ๊ฑด ๊ฒ€์‚ฌ: ํ”„๋กœ๊ทธ๋žจ ๋ชจ๋“ˆ ๋‚ด ๋…ผ๋ฆฌ์  ์กฐ๊ฑด ํ…Œ์ŠคํŠธ
    • ๋ฃจํ”„ ๊ฒ€์‚ฌ: ํ”„๋กœ๊ทธ๋žจ ๋ฐ˜๋ณต(Loop) ๊ตฌ์กฐ ํ…Œ์ŠคํŠธ
    • ์ž๋ฃŒ ํ๋ฆ„ ๊ฒ€์‚ฌ: ๋ณ€์ˆ˜์˜ ์ •์˜์™€ ๋ณ€์ˆ˜ ์‚ฌ์šฉ์˜ ์œ„์น˜ ํ…Œ์ŠคํŠธ

โ–  ๋ธ”๋ž™๋ฐ•์Šค ํ…Œ์ŠคํŠธ (Black Box Test)

- ๋ชจ๋“ˆ ๋‚ด๋ถ€์˜ ๋‚ด์šฉ ์•Œ ์ˆ˜ ์—†์Œ / ์†Œํ”„ํŠธ์›จ์–ด ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์‹ค์‹œ๋˜๋Š” ํ…Œ์ŠคํŠธ
- SW ๊ฐ ๊ธฐ๋Šฅ์ด ์™„์ „ํžˆ ์ž‘๋™๋˜๋Š” ๊ฒƒ์„ ์ž…์ฆํ•˜๋Š” ํ…Œ์ŠคํŠธ๋กœ '๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ' ๋ผ๊ณ  ํ•จ

[ ๋ธ”๋ž™๋ฐ•์Šค ํ…Œ์ŠคํŠธ ์ข…๋ฅ˜ ]

  • ๋™์น˜ ๋ถ„ํ•  ๊ฒ€์‚ฌ(Equivalence Partition): ํ”„๋กœ๊ทธ๋žจ ์ž…๋ ฅ ์กฐ๊ฑด์— ํƒ€๋‹นํ•œ ์ž…๋ ฅ ์ž๋ฃŒ์™€ ํƒ€๋‹นํ•˜์ง€ ์•Š์€ ์ž…๋ ฅ ์ž๋ฃŒ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ท ๋“ฑํ•˜๊ฒŒ ์ง„ํ–‰
  • ๊ฒฝ๊ณ„๊ฐ’ ๋ถ„์„(Boundary Value): ์ž…๋ ฅ ์กฐ๊ฑด์˜ ๊ฒฝ๊ณ„๊ฐ’์„ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ์„ ์ •(ex. ๋ฒ”์œ„ ๊ตฌ๊ฐ„์˜ ์–‘๋: ~์ด์ƒ/์ดํ•˜/์ดˆ๊ณผ/๋ฏธ๋งŒ)
  • ์›์ธ-ํšจ๊ณผ ๊ทธ๋ž˜ํ”„ ๊ฒ€์‚ฌ(Cause-Effect Graphing): ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ๊ด€๊ณ„์™€ ์ถœ๋ ฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์ƒํ™ฉ์„ ์ฒด๊ณ„์ ์œผ๋กœ ๋ถ„์„ ํ›„ ํšจ์šฉ์„ฑ์ด ๋†’์€ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์„ ์ •
  • ์˜ค๋ฅ˜ ์˜ˆ์ธก ๊ฒ€์‚ฌ(Error Guessing): ๊ณผ๊ฑฐ์˜ ๊ฒฝํ—˜์ด๋‚˜ ํ™•์ธ์ž์˜ ๊ฐ๊ฐ์œผ๋กœ ํ…Œ์ŠคํŠธ ์ง„ํ–‰
  • ๋น„๊ต ๊ฒ€์‚ฌ(Comparison): ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ ํ”„๋กœ๊ทธ๋žจ์— ๋™์ผํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์ถœ๋ ฅ๋˜๋Š”์ง€ ํ™•์ธ

โ–  ์š”๊ตฌ์‚ฌํ•ญ ๊ฒ€์ฆ(Requirements Verification)

- ์‹ค์ œ๋กœ ๊ณ ๊ฐ์ด ์›ํ•˜๋Š” ์‹œ์Šคํ…œ์„ ์ œ๋Œ€๋กœ ์ •์˜ํ–ˆ๋Š”์ง€ ์ ๊ฒ€ํ•˜๋Š” ๊ณผ์ •
- ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ ์™„๋ฃŒ ํ›„ ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ ๋ง‰๋Œ€ํ•œ ์žฌ์ž‘์—… ๋น„์šฉ ๋ฐœ์ƒํ•˜๊ธฐ์— ๊ฒ€์ฆ ์ค‘์š” (์‹ค์ œ ์š”๊ตฌ์‚ฌํ•ญ ๋ฐ˜์˜ ์—ฌ๋ถ€ / ๋ฌธ์„œ ์ƒ ์š”๊ตฌ์‚ฌํ•ญ์ด ์„œ๋กœ ์ƒ์ถฉ๋˜์ง€ ์•Š๋Š”์ง€ ์ ๊ฒ€)
โ‘  ๋™๋ฃŒ ๊ฒ€ํ† (Peer review): ์ž‘์„ฑ์ž๊ฐ€ ๋‚ด์šฉ ์„ค๋ช… ํ›„ ๋™๋ฃŒ๋“ค์ด ๊ฒฐํ•จ ๊ฒ€ํ† 
โ‘ก ์›Œํฌ ์Šค๋ฃจ(Walk through): ์š”๊ตฌ์‚ฌํ•ญ ๋ช…์„ธ์„œ ๋ฏธ๋ฆฌ ๋ฐฐํฌ ํ›„ ์งง์€ ๊ฒ€ํ†  ํšŒ์˜ ์ง„ํ–‰
โ‘ข ์ธ์ŠคํŽ™์…˜(Inspection): ์ž‘์„ฑ์ž ์ œ์™ธํ•œ ๋‹ค๋ฅธ ์ „๋ฌธ๊ฐ€๋“ค์ด ๊ฒฐํ•จ ๊ฒ€ํ† 

โ€ป ๊ฒ€์ฆ ์ฒดํฌ๋ฆฌ์ŠคํŠธ: ๊ธฐ๋Šฅ์„ฑ(Functionality) / ์™„์ „์„ฑ(Completeness) / ์ผ๊ด€์„ฑ(Consistency) / ๋ช…ํ™•์„ฑ(Unambiguity) / ๊ฒ€์ฆ ๊ฐ€๋Šฅ์„ฑ(Verifiability) / ์ถ”์  ๊ฐ€๋Šฅ์„ฑ(Traceability) / ๋ณ€๊ฒฝ ์šฉ์ด์„ฑ(Easily Changeable)

โ–  ๊ฐœ๋ฐœ๋‹จ๊ณ„์— ๋”ฐ๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ…Œ์ŠคํŠธ

์†Œํ”„ํŠธ์›จ์–ด ์ƒ๋ช…์ฃผ๊ธฐ (V-๋ชจ๋ธ)

โ‘  ๋‹จ์œ„ ํ…Œ์ŠคํŠธ(Unit test): ์ตœ์†Œ ๋‹จ์œ„(๋ชจ๋“ˆ - ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ด๋ฃจ๋Š” ๊ธฐ๋ณธ ๋‹จ์œ„(๋…๋ฆฝ์  ๊ธฐ๋Šฅ)/์ปดํฌ๋„ŒํŠธ) ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ, ์ฃผ๋กœ ๊ตฌ์กฐ ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ ์ง„ํ–‰ / ๊ธฐ๋Šฅ์„ฑ ํ…Œ์ŠคํŠธ ์ตœ์šฐ์„ 

โ‘ก ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ(Integration test): ์ธํ„ฐํŽ˜์ด์Šค ๊ฐ„ ์‹œ์Šคํ…œ์ด ์ •์ƒ ์‹คํ–‰๋˜๋Š”์ง€ ํ™•์ธ
- ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํ›„ ๋ชจ๋“ˆ์„ ํ†ตํ•ฉํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜ ๋ฐ ๊ฒฐํ•จ์„ ์ฐพ๋Š” ํ…Œ์ŠคํŠธ ๊ธฐ๋ฒ•

  • ํ•˜ํ•ญ์‹(Top-down)
    • ์ƒ์œ„ ๋ชจ๋“ˆ์—์„œ ํ•˜์œ„ ๋ชจ๋“ˆ ๋ฐฉํ–ฅ์œผ๋กœ ํ†ตํ•ฉ
    • ๊นŠ์ด ์šฐ์„ (Depth first) ํ†ตํ•ฉ๋ฒ• / ๋„“์ด ์šฐ์„ (Breadth first) ํ†ตํ•ฉ๋ฒ•
    • ์ดˆ๊ธฐ๋ถ€ํ„ฐ ์‚ฌ์šฉ์ž์—๊ฒŒ ์‹œ์Šคํ…œ ๊ตฌ์กฐ ๋ณด์—ฌ์คŒ
    • ์Šคํ…(Stub): ๋ชจ๋“ˆ์˜ ๊ธฐ๋Šฅ์„ ๋‹จ์ˆœํžˆ ์ˆ˜ํ–‰ํ•˜๋Š” ๋„๊ตฌ(์‹œํ—˜์šฉ ๋ชจ๋“ˆ)
  • ์ƒํ–ฅ์‹(Bottom-up)
    • ํ•˜์œ„ ๋ชจ๋“ˆ์—์„œ ์ƒ์œ„ ๋ชจ๋“ˆ ๋ฐฉํ–ฅ์œผ๋กœ ํ†ตํ•ฉ
    • ํ•˜๋‚˜์˜ ์ฃผ์š” ์ œ์–ด ๋ชจ๋“ˆ๊ณผ ๊ด€๋ จ๋œ ์ข…์† ๋ชจ๋“ˆ์˜ ๊ทธ๋ฃน์ธ ํด๋Ÿฌ์Šคํ„ฐ(Cluster)์™€ ๋“œ๋ผ์ด๋ฒ„(Driver) ์‚ฌ์šฉ

โ‘ข ์‹œ์Šคํ…œ ํ…Œ์ŠคํŠธ(System test): ๊ฐœ๋ฐœ๋œ SW์˜ ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ ๋‚ด ์ž‘์šฉ์—ฌ๋ถ€ ์ ๊ฒ€, ์‹ค์ œ ์‚ฌ์šฉ ํ™˜๊ฒฝ๊ณผ ์œ ์‚ฌํ•œ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ โ–บ ๊ธฐ๋Šฅ์ (๋ธ”๋ž™๋ฐ•์Šค) ๋ฐ ๋น„๊ธฐ๋Šฅ์ (ํ™”์ดํŠธ๋ฐ•์Šค) ํ…Œ์ŠคํŠธ ๊ตฌ๋ถ„

โ‘ฃ ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ(Acceptance test): ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์‚ฌํ•ญ ์ถฉ์กฑ ์—ฌ๋ถ€ ํ™•์ธ
- ์•ŒํŒŒ ํ…Œ์ŠคํŠธ: ํ†ต์ œ๋œ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐœ๋ฐœ์ž์™€ ํ•จ๊ป˜ ํ™•์ธ
- ๋ฒ ํƒ€ ํ…Œ์ŠคํŠธ: ํ†ต์ œ๋˜์ง€ ์•Š์€ ํ™˜๊ฒฝ์—์„œ ๊ฐœ๋ฐœ์ž ์—†์ด ์—ฌ๋Ÿฌ ๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒ€์ฆ

โ–  ํ…Œ์ŠคํŠธ ๊ด€๋ จ ๊ธฐํƒ€ ์šฉ์–ด

1) ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค: ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ ์šฉ/๋™์ž‘ ์ˆœ์„œ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๋ฌถ์€ ์ง‘ํ•ฉ

2) ํ…Œ์ŠคํŠธ ์˜ค๋ผํด: ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ์˜ ์ฐธ/๊ฑฐ์ง“ ํŒ๋‹จ์„ ์œ„ํ•ด ์‚ฌ์ „์— ์ •์˜๋œ ์ฐธ ๊ฐ’์„ ๋Œ€์ž…

  • ์ฐธ ์˜ค๋ผํด(True): ๋ชจ๋“  ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ž…๋ ฅ๊ฐ’์— ๊ธฐ๋Œ€ ๊ฒฐ๊ณผ ์ œ๊ณต
  • ์ƒ˜ํ”Œ๋ง ์˜ค๋ผํด(Sampling): ํŠน์ • ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž…๋ ฅ๊ฐ’์— ๊ธฐ๋Œ€ ๊ฒฐ๊ณผ ์ œ๊ณต
  • ์ถ”์ • ์˜ค๋ผํด(Heuristic): ํŠน์ • ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž…๋ ฅ๊ฐ’์— ๊ธฐ๋Œ€ ๊ฒฐ๊ณผ ์ œ๊ณต + ๋‚˜๋จธ์ง€ ์ž…๋ ฅ๊ฐ’์— ๋Œ€ํ•ด์„  ์ถ”์ • ๊ฒฐ๊ณผ ์ œ๊ณต
  • ์ผ๊ด€์„ฑ ์˜ค๋ผํด(Consistent): ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ˆ˜ํ–‰ ์ „/ํ›„์˜ ๊ฒฐ๊ณผ๊ฐ’ ๋™์ผ ์—ฌ๋ถ€ ํ™•์ธ

โ–  ํ…Œ์ŠคํŠธ ํ•˜๋„ค์Šค(Test harness)

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

 

โ‘ฅ ์†Œํ”„ํŠธ์›จ์–ด ์œ ์ง€ ๋ณด์ˆ˜

โ–  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ ๊ฐœ์„ 

- ์„ฑ๋Šฅ ๋ถ„์„ ์ง€ํ‘œ: ์ฒ˜๋ฆฌ๋Ÿ‰ / ์‘๋‹ต ์‹œ๊ฐ„ / ๊ฒฝ๊ณผ ์‹œ๊ฐ„ / ์ž์› ์‚ฌ์šฉ๋ฅ 
- ์†Œ์Šค์ฝ”๋“œ ์ตœ์ ํ™”๋ฅผ ํ†ตํ•œ ์ฝ”๋“œ ์Šค๋ฉœ ์ œ๊ฑฐ ํ›„ ํ’ˆ์งˆ ๊ฐœ์„ 

โ€ป ์ฝ”๋“œ ์Šค๋ฉœ (Code Smell): ์†Œ์Šค์ฝ”๋“œ ๋‚ด ์กด์žฌํ•˜๋Š” ์ž ์žฌ์  ๋ฌธ์ œ์ 
ex. ์ค‘๋ณต ์ฝ”๋“œ / ๊ธด ๋ฉ”์„œ๋“œ / ํฐ ํด๋ž˜์Šค / ํด๋ž˜์Šค ๋™์‹œ ์ˆ˜์ •
→ ์ŠคํŒŒ๊ฒŒํ‹ฐ ์ฝ”๋“œ: ์†Œ์Šค์ฝ”๋“œ ๋กœ์ง์ด ๋ณต์žกํ•˜๊ฒŒ ์–ฝํ˜€์žˆ๋Š” ๊ตฌ์กฐ
→ ์™ธ๊ณ„์ธ ์ฝ”๋“œ: ์˜ค๋ž˜๋˜์–ด ์œ ์ง€๋ณด์ˆ˜ ์ž‘์—…์ด ์–ด๋ ค์šด ์ฝ”๋“œ

โ–ถ๏ธŽ ํด๋ฆฐ ์ฝ”๋“œ ์ž‘์„ฑ ์›์น™: ๊ฐ€๋…์„ฑ / ๋‹จ์ˆœ์„ฑ / ์˜์กด์„ฑ ๋ฐฐ์ œ / ์ค‘๋ณต์„ฑ ์ตœ์†Œํ™” / ์ถ”์ƒํ™”

โ–ถ๏ธŽ ์†Œ์Šค ์ฝ”๋“œ ํ’ˆ์งˆ ๋ถ„์„ ๋„๊ตฌ

  • ์ •์  ๋ถ„์„ ๋„๊ตฌ: ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์—†์ด ์ฝ”๋”ฉ ํ‘œ์ค€/์Šคํƒ€์ผ/๊ฒฐํ•จ ๋“ฑ์„ ๋ถ„์„ → PMD, Checkstyle, SonarQube, Cppcheck, Ccm, Cobertura
  • ๋™์  ๋ถ„์„ ๋„๊ตฌ: ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ํ•˜์—ฌ ์ฝ”๋“œ ๋‚ด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฐ ์Šค๋ ˆ๋“œ ๊ฒฐํ•จ ๋ฐœ๊ฒฌ → Avalanche, Valgrind, Valance

โ–  ์†Œํ”„ํŠธ์›จ์–ด ํ˜•์ƒ ๊ด€๋ฆฌ (SCM: Software Configuration Management)

- ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ SW ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ผ๋ จ์˜ ํ™œ๋™ / ๊ฐœ๋ฐœ ์ „์ฒด ๋‹จ๊ณ„ ์ ์šฉ
- ์ค‘์š”์„ฑ: ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ถ”์ /ํ†ต์ œ, ๋ฌด์ ˆ์ œํ•œ ๋ณ€๊ฒฝ ๋ฐฉ์ง€, ๊ฐœ๋ฐœ ์ง„ํ–‰ ์ด๋ ฅ ํ™•์ธ
- ํ˜•์ƒ ๊ด€๋ฆฌ ์—ญํ• : ๋ฐฐํฌ๋ณธ ๊ด€๋ฆฌ ์šฉ์ด / ๋ถˆํ•„์š”ํ•œ ์†Œ์Šค ์ˆ˜์ • ์ œํ•œ / ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž ๋™์‹œ ๊ฐœ๋ฐœ

  • ํ˜•์ƒ ์‹๋ณ„: ๊ด€๋ฆฌ ๋Œ€์ƒ์— ์ด๋ฆ„/๋ฒˆํ˜ธ ๋ถ€์—ฌ ํ›„ ๊ณ„์ธต ๊ตฌ์กฐ๋กœ ๊ตฌ๋ถ„ → ์ˆ˜์ •/์ถ”์  ์šฉ์ด
  • ํ˜•์ƒ ํ†ต์ œ: ์‹๋ณ„๋œ ํ˜•์ƒ ํ•ญ๋ชฉ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์š”๊ตฌ ๊ฒ€ํ†  (๊ธฐ์ค€์„  ๋ฐ˜์˜๋  ์ˆ˜ ์žˆ๊ฒŒ)
  • ํ˜•์ƒ ๊ฐ์‚ฌ: ๊ธฐ์ค€์„ (Base line)์˜ ๋ฌด๊ฒฐ์„ฑ ํ‰๊ฐ€ ์œ„ํ•ด ํ™•์ธ/๊ฒ€์ฆ/๊ฒ€์—ด ๊ณผ์ • ์ง„ํ–‰
  • ํ˜•์ƒ ๊ธฐ๋ก: ํ˜•์ƒ ์‹๋ณ„/ํ†ต์ œ/๊ฐ์‚ฌ ์ž‘์—… ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ก/๊ด€๋ฆฌํ•˜๊ณ  ๋ณด๊ณ ์„œ ์ž‘์„ฑ

โ€ป ์ œํ’ˆ SW์˜ ํ˜•์ƒ ๊ด€๋ฆฌ ์—ญํ• : ๋ฐฐํฌ๋ณธ ๊ด€๋ฆฌ ์œ ์šฉ / ์†Œ์Šค ์ˆ˜์ • ์ œํ•œ / ๋™์ผ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž ์ฐธ์—ฌ ํ›„ ๋™์‹œ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ

โ–  ์†Œํ”„ํŠธ์›จ์–ด ๋ฒ„์ „ ๊ด€๋ฆฌ ๋„๊ตฌ

๊ณต์œ  ํด๋” ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ๋ถ„์‚ฐ ์ €์žฅ์†Œ
๊ณต์œ  ํด๋”์— ๋ณต์‚ฌ ์„œ๋ฒ„์—์„œ ๋ฒ„์ „ ์ผ๊ด„ ๊ด€๋ฆฌ ์›๊ฒฉ → ์ง€์—ญ ์ €์žฅ์†Œ
RCS, SCCS, PVCS, QVCS CVS, SVN, CVSNT, SMBC Git, GNU arch, DCVS, Bitkeeper, Bazaar

โ€ป ํ˜•์ƒ๊ด€๋ฆฌ ๋„๊ตฌ
- CVS: ์„œ๋ฒ„/ํด๋ผ์ด์–ธํŠธ ๊ตฌ์„ฑ, ๋‹ค์ˆ˜์˜ ์ธ์›์ด ๋™์‹œ ๋ฒ„์ „ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
- SVN(Subversion): CVS ๊ฐœ์„  ํˆด / ๋ชจ๋“  ๊ฐœ๋ฐœ์€ trunk ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์ˆ˜ํ–‰ / Commit ์ˆ˜ํ–‰ ์‹œ revision 1์”ฉ ์ฆ๊ฐ€
- Git: ์„œ๋ฒ„(์›๊ฒฉ) ์ €์žฅ์†Œ์™€ ๊ฐœ๋ฐœ์ž(์ง€์—ญ) ์ €์žฅ์†Œ๊ฐ€ ๋…๋ฆฝ์  → Commit ์‹ค์ˆ˜ ๋ฐœ์ƒํ•ด๋„ ์„œ๋ฒ„์— ์˜ํ–ฅ ์—†์Œ(๋ถ„์‚ฐ๋œ P2P ๋ชจ๋ธ)

โ–  ISO 12207 - ์†Œํ”„ํŠธ์›จ์–ด ๊ด€๋ จ ์ƒ๋ช…์ฃผ๊ธฐ

  • ๊ธฐ๋ณธ ์ƒ๋ช…์ฃผ๊ธฐ: ํš๋“, ๊ณต๊ธ‰, ๊ฐœ๋ฐœ, ์šด์˜, ์œ ์ง€๋ณด์ˆ˜ ํ”„๋กœ์„ธ์Šค
  • ์ง€์› ์ƒ๋ช…์ฃผ๊ธฐ: ๋ฌธ์„œํ™”, ํ˜•์ƒ๊ด€๋ฆฌ, ํ’ˆ์งˆ๋ณด์ฆ, ๊ฒ€์ฆ, ํ™•์ธ, ํ•ฉ๋™๊ฒ€ํ† , ๊ฐ์‚ฌ
  • ์กฐ์ง ์ƒ๋ช…์ฃผ๊ธฐ: ๊ด€๋ฆฌ, ๊ธฐ๋ฐ˜๊ตฌ์กฐ, ๊ฐœ์„ , ๊ต์œกํ›ˆ๋ จ

โ–  CMMI(Capability Maturity Model Integration): SW ๊ฐœ๋ฐœ ์กฐ์ง์˜ ์—…๋ฌด ๋Šฅ๋ ฅ ํ‰๊ฐ€ ๋ชจ๋ธ

1) ์ดˆ๊ธฐ: ํ”„๋กœ์„ธ์ŠคX - ์ž‘์—…์ž ๋Šฅ๋ ฅ์— ๋”ฐ๋ผ ์„ฑ๊ณต ์—ฌ๋ถ€ ๊ฒฐ์ •

2) ๊ด€๋ฆฌ: ๊ทœ์น™ํ™” ํ”„๋กœ์„ธ์Šค - ํŠน์ •ํ•œ ํ”„๋กœ์ ํŠธ ๋‚ด์˜ ํ”„๋กœ์ ํŠธ ์ •์˜/์ˆ˜ํ–‰

3) ์ •์˜: ํ‘œ์ค€ํ™” ํ”„๋กœ์„ธ์Šค - ์กฐ์ง์˜ ํ‘œ์ค€ ํ”„๋กœ์„ธ์Šค ํ™œ์šฉ ์—…๋ฌด ์ˆ˜ํ–‰

4) ์ •๋Ÿ‰์  ๊ด€๋ฆฌ: ์˜ˆ์ธก ๊ฐ€๋Šฅ ํ”„๋กœ์„ธ์Šค - ํ”„๋กœ์ ํŠธ ์ •๋Ÿ‰์  ๊ด€๋ฆฌ/ํ†ต์ œ

5) ์ตœ์ ํ™”: ์ง€์† ๊ฐœ์„ฑ ํ”„๋กœ์„ธ์Šค - ํ”„๋กœ์„ธ์Šค ์—ญ๋Ÿ‰ ํ–ฅ์ƒ ์œ„ํ•œ ์ง€์†์ ์ธ ๊ฐœ์„