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

์ถœ์ œ ๋นˆ๋„: ์ƒ
๋นˆ์ถœ ํƒœ๊ทธ: ํด๋ฆฐ ์ฝ”๋“œ, ์ฝ”๋“œ ๋ถ„์„ ๋„๊ตฌ, ์†Œํ”„ํŠธ์›จ์–ด ํ’ˆ์งˆ ํ‰๊ฐ€ ํ•ญ๋ชฉ, ์ •ํ˜• ๊ธฐ์ˆ  ๊ฒ€ํ† 

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ ์ธก์ •

  • ์ฒ˜๋ฆฌ๋Ÿ‰, ์‘๋‹ต์‹œ๊ฐ„, ๊ฒฝ๊ณผ ์‹œ๊ฐ„, ์ž์› ์‚ฌ์šฉ๋ฅ 
  • ์‹œ์Šคํ…œ ํ”Œ๋žซํผ๊ณผ ์œ ์‚ฌํ•จ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ ๋ถ„์„ ๋„๊ตฌ

๋„๊ตฌ ์ข…๋ฅ˜

  • ์„ฑ๋Šฅ/๋ถ€ํ•˜/์ŠคํŠธ๋ ˆ์Šค ์ ๊ฒ€ ๋„๊ตฌ: ์„ฑ๋Šฅ ์ธก์ •
  • ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ: ์•ˆ์ •์  ์šด์˜์„ ์ง€์›ํ•จ

์ฃผ์š” ๋„๊ตฌ

  • ์„ฑ๋Šฅ ์ ๊ฒ€(์˜คํ”ˆ ์†Œ์Šค): JMeter, LoadUI, OpenSTA
  • ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ: Scouter, Zabbix

์„ฑ๋Šฅ ์ €ํ•˜ ์›์ธ ๋ถ„์„

DB ๊ด€๋ จ ์„ฑ๋Šฅ ์ €ํ•˜

  • DB Lock: ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ ๊ณผ๋„ํ•œ ์—…๋ฐ์ดํŠธ
  • DB Fetch: ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ ์š”์ฒญ, ๋ถˆํ•„์š”ํ•œ ํ™•์ •์ด ์ž์ฃผ ๋ฐœ์ƒ

๋‚ด๋ถ€ ๋กœ์ง ์„ฑ๋Šฅ ์ €ํ•˜

  • ์ธํ„ฐ๋„ท ์ ‘์† ๋ถˆ๋Ÿ‰
  • ๋Œ€๋Ÿ‰, ํฐ ์šฉ๋Ÿ‰์˜ ํŒŒ์ผ ์—…/๋‹ค์šด๋กœ๋“œ
  • ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋กœ์ง๊ณผ ์‹ค์ œ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ

์™ธ๋ถ€ ์š”์ธ

  • ํƒ€์ž„์•„์›ƒ ๋ฐœ์ƒ(ํ˜ธ์ถœ์ด ์ทจ์†Œ, ๋ฉˆ์ถค)
  • ์ž˜๋ชป๋œ ํ™˜๊ฒฝ ์„ค์ •
    • ์Šค๋ ˆ๋“œํ’€์ด๋‚˜ ํž™ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ๋„ˆ๋ฌด ์ž‘๊ฒŒ ์„ค์ •
    • ๋„คํŠธ์›Œํฌ ๊ด€๋ จ ์žฅ๋น„ ๊ฐ„ ๋ฐ์ดํ„ฐ ์ „์†ก ์‹คํŒจ ๋˜๋Š” ์ „์†ก ์ง€์—ฐ

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

Bad Code vs Clean Code

Bad Code

  • ์ •์ œ๋˜์ง€ ์•Š๊ณ  ์–ฝํžŒ ์ŠคํŒŒ๊ฒŒํ‹ฐ ์ฝ”๋“œ
  • ๋ณต์žก๋„ ์ฆ๊ฐ€
  • ์˜ค๋ฅ˜ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ ๋†’์Œ

Clean Code

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

์ตœ์ ํ™” ๊ธฐ๋ฒ•

  • ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ = ์‘์ง‘๋„ ๋†’์ด๊ธฐ
  • ํด๋ž˜์Šค๊ฐ„ ์˜์กด์„ฑ ์ตœ์†Œํ™” = ๊ฒฐํ•ฉ๋„ ์•ฝํ•˜๊ฒŒ ํ•˜๊ธฐ
  • ์˜ฌ๋ฐ”๋ฅธ ์ฝ”๋”ฉ ์Šคํƒ€์ผ = ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ๋†’์ด๊ธฐ
  • ๊ธฐ์–ตํ•˜๊ธฐ ์‰ฝ๊ณ  ๋ฐœ์Œ์ด ์‰ฌ์šด ์šฉ์–ด๋กœ ์ด๋ฆ„ ์ •์˜
  • ์ ์ ˆํ•œ ์ฃผ์„๋ฌธ์œผ๋กœ ๋ณด์ถฉ

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

๋ถ„์„ ๋ฐฉ๋ฒ•

  • ์ธ์ŠคํŽ™์…˜
  • ์ •์  ๋ถ„์„
  • ๋™์  ๋ถ„์„
  • ์ฆ๋ช…
  • ๋ฆฌํŒฉํ† ๋ง

์„ธ๋ถ€ ์„ค๋ช…

  • ์ฝ”๋“œ ์ธ์ŠคํŽ™์…˜: ์ฝ”๋“œ์— ์กด์žฌํ•˜๋Š” ๊ฒฐํ•จ์„ ํ™•์ธ
  • ์ฆ๋ช…: ํ’ˆ์งˆ์ด ์•„์ฃผ ์ค‘์š”ํ•œ ๊ฒฝ์šฐ ํ™œ์šฉ (๋ฏธ์…˜ ํฌ๋ฆฌํ‹ฐ์ปฌํ•œ ์—…๋ฌด)
  • ๋ฆฌํŒฉํ† ๋ง(Refactoring): ์ฝ”๋“œ์˜ ๊ธฐ๋Šฅ ๋ณ€๊ฒฝ ์—†์ด ๊ตฌ์กฐ๋ฅผ ๊ฐœ์„ ํ•ด์„œ ์•ˆ์ •์„ฑ๊ณผ ๊ฐ€๋…์„ฑ ํ™•๋ณด

์†Œ์Šค์ฝ”๋“œ ์ •์ /๋™์  ๋ถ„์„ ๋„๊ตฌ

์ •์  ๋ถ„์„ ๋„๊ตฌ

  • ์‹คํ–‰ ์—†์ด ์ฝ”๋“œ ์ž์ฒด๋งŒ์œผ๋กœ ํ’ˆ์งˆ ๋ถ„์„
  • ๋„๊ตฌ ์ข…๋ฅ˜
    • PMD: Java ๋ฐ ๋‹ค๋ฅธ ์†Œ์Šค์ฝ”๋“œ ๋ฒ„๊ทธ, ๋ฐ๋“œ์ฝ”๋“œ ๋ถ„์„
    • Cppcheck: C/C++ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜, ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๋ถ„์„
    • SonarQube: ์†Œ์Šค์ฝ”๋“œ ํ†ตํ•ฉ ํ”Œ๋žซํผ ํ”Œ๋Ÿฌ๊ทธ์ธ ํ™•์žฅ
    • Checkstyle: Java ์ฝ”๋“œ ์ฝ”๋”ฉ ํ‘œ์ค€ ์ค€์ˆ˜ ๊ฒ€์‚ฌ๋„๊ตฌ

๋™์  ๋ถ„์„ ๋„๊ตฌ

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•ด์„œ ํ’ˆ์งˆ ๋ถ„์„
  • ๋„๊ตฌ ์ข…๋ฅ˜
    • Avalanche: Valgrind ํ”„๋ ˆ์ž„์›Œํฌ ๋ฐ STP ๊ธฐ๋ฐ˜ ์ทจ์•ฝ์  ๋ถ„์„
    • Valgrind: ์ž๋™ํ™”๋œ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ์Šค๋ ˆ๋“œ ๊ฒฐํ•จ ๋ฐœ๊ฒฌ, ๋ถ„์„

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

๊ฐœ์š”

  • ์ง€์†์ ์œผ๋กœ ์†Œํ”„ํŠธ์›จ์–ด ๊ธฐ๋Šฅ์„ ๊ฐœ์„ ํ•˜๊ณ  ์˜ค๋ฅ˜๋ฅผ ์ œ๊ฑฐํ•ด์„œ ๋งŒ์กฑ๋„๋ฅผ ํ–ฅ์ƒํ•˜๋Š” ํ™œ๋™
  • ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์šด ์ฝ”๋“œ: ์™ธ๊ณ„์ธ ์ฝ”๋“œ, ์ŠคํŒŒ๊ฒŒํ‹ฐ ์ฝ”๋“œ, ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์€ ํ”„๋กœ๊ทธ๋žจ

๋ถ€์ž‘์šฉ

  • ์ฝ”๋“œ ๋ถ€์ž‘์šฉ: ์ฝ”๋“œ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ๋ฌธ์ œ
  • ๋ฐ์ดํ„ฐ ๋ถ€์ž‘์šฉ: ์ž๋ฃŒ๊ตฌ์กฐ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ๋ฌธ์ œ
  • ๋ฌธ์„œ ๋ถ€์ž‘์šฉ: ์ฝ”๋“œ, ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์„ ๋งค๋‰ด์–ผ์— ์ ์šฉํ•˜์ง€ ์•Š์•„ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ

์œ ์ง€๋ณด์ˆ˜ ์œ ํ˜•

  • ํ•˜์ž ๋ณด์ˆ˜: ๋ฒ„๊ทธ๋‚˜ ์ž ์žฌ์  ์˜ค๋ฅ˜ ์ˆ˜์ •
  • ์™„์ „ ๋ณด์ˆ˜: ๋ชจ๋“  ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ํ•ด๊ฒฐ (๊ฐ€์žฅ ๋งŽ์€ ๋น„์šฉ ์†Œ๋ชจ)
  • ์ ์‘ ๋ณด์ˆ˜: ์šด์˜ ํ™˜๊ฒฝ์˜ ๋ณ€ํ™”๋ฅผ ๋ฐ˜์˜
  • ์˜ˆ๋ฐฉ ๋ณด์ˆ˜: ์‚ฌ์šฉ์ž ์š”๊ตฌ๋ฅผ ๋ฏธ๋ฆฌ ์˜ˆ์ธกํ•ด์„œ ๋ฐ˜์˜

๋น„์šฉ ์ธก์ • ๋ฐฉ๋ฒ•

BL(Belady์™€ Lehman)

M = P + K * E^(c-d)

COCOMO(COnstructive Cost Model)

M = ACT * DE * EAF

Vessey & Webber

M = ACT * 2.4 * [KDSI]^(1.05)

์šฉ์–ด ์„ค๋ช…

  • M: ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์œ„ํ•œ ๋…ธ๋ ฅ(์ธ์›/์›”)
  • P: ์ƒ์‚ฐ์ ์ธ ํ™œ๋™์— ๋“œ๋Š” ๋น„์šฉ
  • K: ํ†ต๊ณ„๊ฐ’์—์„œ ๊ตฌํ•œ ์ƒ์ˆ˜
  • c: ๋ณต์žก๋„
  • d: ์†Œํ”„ํŠธ์›จ์–ด ์ง€์‹ ์ •๋„
  • ACT(Annual Change Traffic): ์œ ์ง€๋ณด์ˆ˜ ๋น„์œจ
  • DE(Development Effort): ์ƒ์‚ฐ์ ์ธ ํ™œ๋™์— ๋“œ๋Š” ๋น„์šฉ
  • EAF(Effort Adjust Factor): ๋…ธ๋ ฅ ์กฐ์ • ์ˆ˜์น˜
  • KDSI(Kilo Delivered Source Instruction): 1000๋ผ์ธ ๋‹จ์œ„๋กœ ๋ฌถ์€ ์ „์ฒด ๋ผ์ธ์˜ ์ˆ˜

์†Œํ”„ํŠธ์›จ์–ด ํ’ˆ์งˆ ํ‰๊ฐ€

SQA (Software Quality Assurance)

  • ์†Œํ”„ํŠธ์›จ์–ด ํ’ˆ์งˆ ๋ณด์ฆ
  • ๊ธฐ๋Šฅ๊ณผ ์‚ฌ์šฉ์ž ์š”๊ตฌ์‚ฌํ•ญ์ด ์ผ์น˜ํ•˜๋Š”์ง€๋ฅผ ํ™•์ธ

์ •ํ˜• ๊ธฐ์ˆ  ๊ฒ€ํ†  (FTR)

  • ์š”๊ตฌ์‚ฌํ•ญ ์ผ์น˜ ์—ฌ๋ถ€, ํ‘œ์ค€ ์ค€์ˆ˜ ๋ฐ ๊ฒฐํ•จ ๋ฐœ์ƒ ์—ฌ๋ถ€๋ฅผ ๊ฒ€ํ† ํ•˜๋Š” ์ •์  ๋ถ„์„ ๊ธฐ๋ฒ•
  • ์›์น™
    • ์˜์ œ๋ฅผ ์ œํ•œ
    • ๋…ผ์Ÿ๊ณผ ๋ฐ˜๋ฐ•์„ ์ œํ•œ
    • ์ฐธ๊ฐ€์ž์˜ ์ˆ˜๋ฅผ ์ œํ•œ
    • ์ œํ’ˆ์˜ ๊ฒ€ํ† ์—๋งŒ ์ง‘์ค‘
    • ํ•ด๊ฒฐ์ฑ…์ด๋‚˜ ๊ฐœ์„ ์ฑ…์— ๋Œ€ํ•ด์„œ ๋…ผํ•˜์ง€ ์•Š์Œ

์†Œํ”„ํŠธ์›จ์–ด ํ’ˆ์งˆ ๋ชฉํ‘œ ํ•ญ๋ชฉ

  1. ์ •ํ™•์„ฑ(Correctness): ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์‚ฌํ•ญ ์ถฉ์กฑ
  2. ์‹ ๋ขฐ์„ฑ(Reliability): ์ •ํ™•ํ•˜๊ณ  ์ผ๊ด€๋œ ๊ฒฐ๊ณผ๋กœ ์š”๊ตฌ๋œ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜์—†์ด ์ˆ˜ํ–‰
  3. ํšจ์œจ์„ฑ(Efficiency): ์š”๊ตฌ๋˜๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์†Œํ•œ์˜ ์ž์› ์†Œ๋ชจ
  4. ๋ฌด๊ฒฐ์„ฑ(Integrity): ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ด๋‚˜ ์ž๋ฃŒ ๋ณ€๊ฒฝ์„ ์ œ์–ด
  5. ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด์„ฑ(Maintainability): ํ’ˆ์งˆ ๊ฐœ์„ , ์˜ค๋ฅ˜ ์ˆ˜์ •์˜ ์šฉ์ดํ•จ
  6. ์‚ฌ์šฉ ์šฉ์ด์„ฑ(Usability): ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‰ฝ๊ฒŒ ์ด์šฉ
  7. ๊ฒ€์‚ฌ ์šฉ์ด์„ฑ(Testability): ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‰ฝ๊ฒŒ ์‹œํ—˜
  8. ์ด์‹์„ฑ(Portability): ๋‹ค์–‘ํ•œ ํ•˜๋“œ์›จ์–ด ํ™˜๊ฒฝ์—์„œ ์šด์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ณ€๊ฒฝ
  9. ์ƒํ˜ธ ์šด์šฉ์„ฑ(Interoperability): ๋‹ค๋ฅธ ์†Œํ”„ํŠธ์›จ์–ด์™€ ๋ฌด๋ฆฌ ์—†์ด ์ •๋ณด ๊ตํ™˜
  10. ์œ ์—ฐ์„ฑ(Flexibility): ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‰ฝ๊ฒŒ ์ˆ˜์ •
  11. ์žฌ์‚ฌ์šฉ์„ฑ(Reusability): ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋‹ค๋ฅธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ

์‹œ์Šคํ…œ ์‹ ๋ขฐ๋„ ์ธก์ •

์ฃผ์š” ์ง€ํ‘œ

  1. ํ‰๊ท  ๋ฌด์žฅ์•  ์‹œ๊ฐ„(MTBF: Mean Time Between Failure)
    • ํ‰๊ท  ์žฅ์•  ๋ฐœ์ƒ ๊ฐ„๊ฒฉ ํ‰๊ท 
    • MTBF = MTTF + MTTR
  2. ํ‰๊ท  ์žฅ์•  ์‹œ๊ฐ„(MTTF: Mean Time To Failure)
    • ์ˆ˜๋ฆฌ ๋ถˆ๊ฐ€๋Šฅ ์ œํ’ˆ์˜ ๋™์ž‘์‹œ๊ฐ„ ํ‰๊ท 
    • MTTF = ์ด ๋™์ž‘ ์‹œ๊ฐ„ / ์‚ฌ์šฉ ํšŸ์ˆ˜
  3. ํ‰๊ท  ๋ณต๊ตฌ ์‹œ๊ฐ„(MTTR: Mean Time To Repair)
    • ๊ณ ์žฅ์‹œ์ ๋ถ€ํ„ฐ ์ˆ˜๋ฆฌ์™„๋ฃŒ๊นŒ์ง€ ์ˆ˜๋ฆฌ์‹œ๊ฐ„ ํ‰๊ท 
    • MTTR = ์ด ๊ณ ์žฅ์‹œ๊ฐ„ / ์‚ฌ์šฉํšŸ์ˆ˜
  4. ๊ฐ€์šฉ์„ฑ(Availability)
    • Availability = MTTF / MTBF