• toc {:toc}

Software Engineering

  • ๋””์ž์ธ, ์ƒ์‚ฐ, ์œ ์ง€๋ณด์ˆ˜์— ๋Œ€ํ•ด ์ •ํ•ด์ง„, ์‹œ์Šคํ…œํ™”๋œ ์ ‘๊ทผ ๋ฐฉ์‹์ด ์กด์žฌํ•œ๋‹ค.
  • ์ •ํ•ด์ง„ ์‹œ๊ฐ„, ๋น„์šฉ ๋‚ด์— ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑ
  • ํฌ๊ธฐ์™€ ๋ณต์žก๋„๋ฅผ ๋‹ค๋ฃจ๋Š”๋ฐ ๋„์›€์ด ๋˜๋Š” ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ex) OS, editors, compilers, debugging, โ€ฆ

Good Software

  • Algorithm

    • ์œ ํ•œํ•œ ์‹œ๊ฐ„์•ˆ์— ์ฃผ์–ด์ง„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ•ด๊ฒฐ์ฑ…์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋…ผ๋ฆฌ์  ๋‹จ๊ณ„๋ฅผ ๋งํ•œ๋‹ค.
  • ์ข‹์€ ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋ชฉํ‘œ

  1. ์ž‘๋™ํ•œ๋‹ค.
  2. ๋งŽ์€ ์‹œ๊ฐ„๊ณผ ๋…ธ๋ ฅ์ด ๋“ค์ง€ ์•Š์•„๋„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  3. ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.
  4. ์‹œ๊ฐ„๊ณผ ๋น„์šฉ ์•ˆ์— ์™„์„ฑ๋œ๋‹ค.
  • ํ”„๋กœ๊ทธ๋žจ ๋ช…์‹œ

    • ํ”„๋กœ๊ทธ๋žจ์ด ๋ฌด์—‡์„ ํ•ด์•ผํ•˜๋Š”์ง€ ๋ฌธ์„œํ™”๋œ๋‹ค.
    • ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€๋Š” ๋‹ค๋ฃจ์ง€ ์•Š๋Š”๋‹ค.
  • ์ถ”์ƒํ™”

  • ์‹œ์Šคํ…œ ์‚ฌ์šฉ์ž ๊ด€์ ์—์„œ ํ•„์ˆ˜์ ์ธ ์‚ฌํ•ญ๋งŒ ํฌํ•จํ•œ๋‹ค.

  • Information Hiding

  • High-level vs Low-level

  • Stepwise Refinement ๋‹จ๊ณ„๋ณ„ ์ ‘๊ทผ ๋ฐฉ์‹.

    • Top-down (ํฐ๋ฌธ์ œ โ†’ ์„ธ๋ถ„ํ™”)
    • Bottom-up (์ž‘์€๋ฌธ์ œ๋“ค์„ ์„œ๋กœ ์—ฎ์–ด๊ฐ€๋ฉด์„œ)
    • Functional decomposition (ํ•จ์ˆ˜ ๋ถ„ํ•ด)
    • Round-trip gestalt design

Procedural vs Object-oriented

  • ์ ˆ์ฐจ ์ง€ํ–ฅ์  : ๋™์‚ฌ, ํ•จ์ˆ˜๋ฅผ ์ค‘์š”์‹œํ•œ๋‹ค. ๋™์‚ฌ๋ฅผ ๋จผ์ € ๋งŒ๋“ค๊ณ  ๋ช…์‚ฌ๋ฅผ ๋งŒ๋“ ๋‹ค.

  • ๊ฐ์ฒด ์ง€ํ–ฅ์  : ๋ช…์‚ฌ, ํ•จ์ˆ˜๋ฅผ ํ–‰ํ•˜๋Š” ์ฃผ์ฒด๋ฅผ ์ค‘์š”์‹œํ•œ๋‹ค. ๋ช…์‚ฌ๋ฅผ ๋งŒ๋“ค๊ณ  ๋ช…์‚ฌ๊ฐ€ ํ–‰ํ•  ๋™์‚ฌ๋ฅผ ๋งŒ๋“ ๋‹ค.

  • Module์„ ๋งŒ๋“œ๋Š” ๋‘ ๊ฐ€์ง€ ์ ‘๊ทผ ๋ฐฉ์‹

  • Functional decomposition

    • ํ•จ์ˆ˜ ๋ชจ๋“ˆ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„ ๋•Œ๊นŒ์ง€ ๋ฌธ์ œ๋ฅผ ๋” ์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ์†Œ์ฃผ์ œ๋กœ ๋‚˜๋ˆˆ๋‹ค.
    • ๊ณผ์ •์— ์ง‘์ค‘ํ•œ๋‹ค.
    • ์ ˆ์ฐจ ์ง€ํ–ฅ์ ์ด๋ฉฐ ์ˆœ์„œ์— ๋ฏผ๊ฐํ•˜๊ณ , ์„œ๋กœ ๊ฐ•ํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค.
    • ์œ ์ง€ ๋ณด์ˆ˜ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.
  • Object-oriented design

    • ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์— ํ•จ๊ป˜ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์™€ ๋™์ž‘์œผ๋กœ ๊ตฌ์„ฑ๋œ ๋‹ค์–‘ํ•œ ๊ฐ์ฒด๋กœ ๋‚˜๋ˆˆ๋‹ค.
    • ๋ฐ์ดํ„ฐ ๊ฐ์ฒด์— ์ง‘์ค‘ํ•œ๋‹ค.
    • ์บก์Аํ™”, ์ƒ์† ๋“ฑ ๊ณ ๋ ค ์š”์†Œ๊ฐ€ ๋งŽ์•„ ์ฒ˜์Œ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๊ธฐ ์–ด๋ ต๋‹ค.
    • ์ ˆ์ฐจ ์ง€ํ–ฅ์  ๋ฐฉ์‹์— ๋น„ํ•ด ํฌ๊ธฐ๊ฐ€ ํฌ๊ธฐ ๋•Œ๋ฌธ์— ๋‚ฎ์€ ์ˆ˜ํ–‰๋Šฅ๋ ฅ์„ ๋‚ธ๋‹ค.
    • ๋ชจ๋“  ํด๋ž˜์Šค๋ฅผ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ ์ธก๋ฉด์—์„œ๋Š” ๋น„ํšจ์œจ์ ์ด๋‹ค.
  • Test Case

    • ์ž…๋ ฅ์„ ๊ฒฐ์ •ํ•œ๋‹ค.
    • ํ”„๋กœ๊ทธ๋žจ์˜ ์˜ˆ์ƒ ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.
    • ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๊ด€์ฐฐํ•œ๋‹ค.
    • ์˜ˆ์ƒ ๊ฒฐ๊ณผ์™€ ์‹ค์ œ ๊ฒฐ๊ณผ๋ฅผ ๋น„๊ตํ•˜๊ณ  ์ˆ˜์ •ํ•œ๋‹ค.
  • Verification vs Validation

  • Verification - ๊ฐœ๋ฐœ์ž์˜ ๊ด€์ ์—์„œ ๊ณผ์ •๊ณผ ์ ˆ์ฐจ, ๋กœ์ง์ด ์˜ฌ๋ฐ”๋ฅธ์ง€๋ฅผ ํŒ๋‹จํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

  • Validation - ์‚ฌ์šฉ์ž์˜ ์ž…์žฅ์—์„œ ์ถœ๋ ฅ์ด ์˜ฌ๋ฐ”๋ฅธ์ง€, ์ž‘๋™์ด ์ž˜ ๋˜๋Š”์ง€๋ฅผ ํŒ๋‹จํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

Error

  • ์—๋Ÿฌ ๊ฒ€์ถœ์ด ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“œ๋Š” ๊ณผ์ • ์ค‘ ๋Šฆ๊ฒŒ ๋‚˜์˜ฌ ์ˆ˜๋ก ์ˆ˜์ •ํ•˜๋Š” ๋น„์šฉ์ด ์ฆ๊ฐ€ํ•œ๋‹ค.

  • Controlling Errors

  • Robustness : ์—๋Ÿฌ๋กœ๋ถ€ํ„ฐ ํ”„๋กœ๊ทธ๋žจ์ด ํšŒ๋ณตํ•˜๋Š” ๋Šฅ๋ ฅ. ์ž‘๋™ ํ™˜๊ฒฝ์—์„œ ์ž‘๋™์„ ์ง€์†ํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ

  • Preconditions : Postconditions๊ฐ€ ๋ณด์žฅ๋˜๊ธฐ ์œ„ํ•ด ์ž‘๋™์— ๋“ค์–ด๊ฐ€์•ผ ํ•˜๋Š” ๊ฐ€์ •

  • Postconditions : Preconditions๊ฐ€ ์ฐธ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋ฉด์„œ ํ•จ์ˆ˜์˜ ์˜ˆ์ƒ๋˜๋Š” ์ถœ๋ ฅ์„ ์„œ์ˆ ํ•œ ๊ตฌ๋ฌธ