728x90
๋ฐ˜์‘ํ˜•

# ์•„ํ‚คํ…์ฒ˜(Architecture)

 

- ๊ฑด๋ฌผ์˜ ๋ผˆ๋Œ€๋ฟ ์•„๋‹ˆ๋ผ ํŠน์„ฑ์„ ๊ฒฐ์ •์ง“๋Š” ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์ผ์ปซ๋Š” ๋ง(๋ชจ๋“  ๊ธฐ์ˆ  ๋ถ„์•ผ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ์ข…๋ฅ˜๋„ ๋‹ค์–‘ํ•จ)

- ๋Œ€ํ˜• ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ณต์žก์„ฑ์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ๊ฐœ๋ฐœํ•  ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ „์ฒด ๊ตฌ์กฐ๋ฅผ ๊ฐ€์žฅ ๋จผ์ € ์ƒ๊ฐ
  • ์†Œํ”„ํŠธ์›จ์–ด์˜ ๊ตฌ์กฐ๋ฅผ์ด๋ฃจ๋Š”๊ฐ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์ฐพ์Œ
  • ๊ฐ ๊ตฌ์„ฑ์š”์†Œ ๊ฐ„์˜ ๋ช…ํ™•ํ•œ ๊ด€๊ณ„๋ฅผ ์„ค์ •
  • ์ผ์ •ํ•œ ๊ทœ์น™์„ ๋”ฐ๋ฆ„    

- ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ : ์ƒ์œ„ ์ˆ˜์ค€์—์„œ ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์„ฑ์š”์†Œ๋“ค ๊ฐ„์˜ ๊ด€๊ณ„๋กœ ๊ตฌ์„ฑ๋œ ์ „์ฒด์ ์ธ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜๋Š”ํ™œ๋™...   

 

 

#  ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜์˜ ์—ญํ• 

  • ์—ฌ๋Ÿฌ ์ดํ•ด๊ด€๊ณ„์ž ๊ฐ„์˜ ๊ณตํ†ต์˜ ์˜์‚ฌ์†Œํ†ต ์ˆ˜๋‹จ(์–ด๋Š์ •๋„์˜ what๊ณผ how๊ฐ€ ๋‹ค ๋‹ด๊ฒจ์ ธ ์žˆ๋‹ค! ๊ณ ๊ฐ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋งž๊ฒŒ ๊ฐ€๊ณ  ์žˆ๋Š”์ง€..)
  • ์‹œ์Šคํ…œํ’ˆ์งˆ ์†์„ฑ์˜ ์‚ฌ์šฉ๋˜๋Š” ์–ต์ œ ๊ธฐ์ค€  (์†Œํ”„ํŠธ์›จ์–ด ํ’ˆ์งˆ ์†์„ฑ 8๊ฐ€์ง€๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์–ด๋–ค ์ •๋„์˜ ์ˆ˜์ค€์ธ์ง€, ์œ ์ง€๋ณด์ˆ˜ & ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“ค๋„๋ก ํ•จ..)
  • ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ์›์ธ ํŒŒ์•… ๋ฐ ์œ ์—ฐํ•œ ๋Œ€์ฒ˜๊ฐ€ ๊ฐ€๋Šฅ 
  • ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์„ฑ ์š”์†Œ ํ™•๋ณด ์ˆ˜๋‹จ 

# ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ์‹œ ๊ณ ๋ ค ์‚ฌํ•ญ

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

ISO/IEC 25010์˜ ํ’ˆ์งˆ ์†์„ฑ ์˜ˆ์‹œ

 

 

# ์•„ํ‚คํ…์ฒ˜ ํ’ˆ์งˆ ์†์„ฑ : ์‹œ์Šคํ…œ ํ’ˆ์งˆ ์†์„ฑ

  • ๊ฐ€์šฉ์„ฑ(Availability) : ์‹œ์Šคํ…œ์ด ์‹คํŒจ ์—†์ด ์šด์šฉ๋ ์ˆ˜ ์žˆ๋Š” ํ™•๋ฅ ๋กœ ์‹œ์Šคํ…œ์ด ์žฅ์•  ๋ฐœ์ƒ ์—†์ด ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ
  • ๋ณ€๊ฒฝ ์šฉ์ด์„ฑ(Modifiability): ์‚ฌ์šฉ์ž๊ฐ€ ์ƒˆ๋กœ์šด ์š”๊ตฌ์‚ฌํ•ญ์„ ์š”์ฒญํ–ˆ์„ ๋•Œ
  • ์„ฑ๋Šฅ(Performance) : ์‚ฌ์šฉ์ž ์š”์ฒญ๊ณผ ๊ฐ™์€ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์–ผ๋งˆ๋‚˜ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋ฅผ ๋งํ•จ
  • ๋ณด์•ˆ์„ฑ : ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ์ ‘๊ทผ์— ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ
  • ์‚ฌ์šฉ์„ฑ : ์‹œ์Šคํ…œ์„์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ƒํ™ฉ์„ ๊ทน๋ณตํ•  ์ˆ˜ ์žˆ๋„๋ก ์ด๋ฅผ ๋ฐ˜์˜ํ•ด ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ์ž‘์—…์„ ํ•ด์•ผ ํ•จ
  • ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ  : ํ…Œ์ŠคํŠธ ๋น„์šฉ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•œํ‚คํ…์ฒ˜ ์„ค๊ณ„๋ถ€ํ„ฐ ํ…Œ์ŠคํŠธ๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•จ

 

# ์•„ํ‚คํ…์ฒ˜ ํ’ˆ์งˆ์†์„ฑ : ์•„ํ‚คํ…์ฒ˜ ํ’ˆ์งˆ์†์„ฑ

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

 

# ์•„ํ‚คํ…์ฒ˜์˜ 4 + 1 ๊ด€์ (View)

- ์ดํ•ด ๊ด€๊ณ„์ž ๋ณ„๋กœ ๊ด€์ ์ด ๋‹ค๋ฆ„(QA, ๊ธฐํš์ž, ๊ฐœ๋ฐœ์ž....)

- ์‹œ์Šคํ…œ์„ ์ด๋ฃจ๋Š” ์š”์†Œ์˜ ์ง‘ํ•ฉ๊ณผ ๊ทธ๋“ค์˜ ์—ฐ๊ด€ ๊ด€๊ผ๋ฅผ ์ถ”์ƒ์ ์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ!

 

 

# UI / UX

- UI(User Interface) : ์‚ฌ์šฉ์ž์™€ ์ปดํ“จํ„ฐ ์‚ฌ์ด์—์„œ ์˜์‚ฌ์†Œํ†ต์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ง„๋งค๊ฒŒ์ฒด(ํ™”๋ฉด๊ตฌ์„ฑ์„ ์–ด๋–ป๊ฒŒ ๋ฐฐ์น˜ํ• ์ง€)

- UX(User Experience) : ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ค ์‹œ์Šคํ…œ, ์ œํ’ˆ ์„œ๋น„์Šค๋ฅผ์ง/๊ฐ„์ ‘์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋Š๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ฒŒ ๋˜๋Š” ์ด์ฒด์ ์ธ ๊ฒฝํ—˜(์–ด๋–ค ์ด์œ ๋กœ ์†Œ๋น„์ž๊ฐ€ ๋– ๋‚˜๊ฐˆ๊นŒ.. ์ด๋Ÿฐ๋Š๋‚Œ)

 

 

# ์—ฐ๊ด€ ๊ด€๊ณ„ vs ์˜์กด๊ด€๊ณ„

 

- ์—ฐ๊ด€ ๊ด€๊ณ„(Association)

 

- ์†Œ์œ  ํ•œ๋‹ค์˜ ์˜๋ฏธ (has a)  -> ๋†’์€ ๊ฒฐํ•ฉ๋„

- ๊ฒฐํ•ฉ๋„๊ฐ€ ๋†’์•„์„œ ์ž˜ ์‚ฌ์šฉ ์•ˆํ•จ..

- 1:1, 1:N, N:M ๊ด€๊ณ„๊ฐ€ ๋งŽ๋‹ค...

- 0..* => 0..n๊ณผ ๊ฐ™์€ ์˜๋ฏธ

- ์ƒ์†๋„ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ์‚ฌ์šฉํ•˜๋‹ˆ๊นŒ ์‹ค์„ ์œผ๋กœ(์—ฐ๊ด€ ๊ด€๊ณ„)ํ‘œ์‹œ

 

- ์˜์กด๊ด€๊ณ„(Dependency)

 

- ์‚ฌ์šฉ ํ•œ๋‹ค์˜ ์˜๋ฏธ (uses a) -> ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„

- ํ˜ธ์ถœ(call)ํ•œ๋‹ค์˜ ๊ด€๊ณ„

 

 

# ํด๋ž˜์Šค ํƒ€์ž…

 

- ๊ฒฝ๊ณ„ ํด๋ž˜์Šค(Boundary Class)

- ์‹œ์Šคํ…œ ์™ธ๋ถ€์˜ ์•กํ„ฐ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ํด๋ž˜์Šค

- ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ์–ดํ•˜๋Š” ์—ญํ• 

- ์‹œ์Šคํ…œ์˜ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์„ ๋‹ด๋‹น 

- Controller์˜ ์—ญํ• !!

 

์ œ์–ด ํด๋ž˜์Šค(Control Class)

- ๊ฒฝ๊ณ„ ํด๋ž˜์Šค์™€ ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค ์‚ฌ์ด์— ์ค‘๊ฐ„ ์—ญํ• 

- ์‹œ์Šคํ…œ ๋‚ด๋ถ€์—์„œ ์ปจํŠธ๋กคํ•˜๋Š” ์—ญํ•  / ์‹œ์Šคํ…œ ๊ทธ ์ž์ฒด

- ์‹œ์Šคํ…œ์˜ ์‹ค์งˆ์ ์ธ๊ธฐ๋Šฅ 

- Service์˜ ์—ญํ• !!

 

- ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค(Entity Class)

- ์‹œ์Šคํ…œ์—์„œ ์œ ์ง€ ๋ฐ ์ถ”์ ํ•ด์•ผ ํ•  ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ํด๋ž˜์Šค(DB์™€ ์—ฐ๊ฒฐ๋˜๋Š” ํด๋ž˜์Šค)

- ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ ๋ฐ˜๋ณต๋˜์–ด ๋‚˜์˜ค๋Š” ์šฉ์–ด

- ๋ช…์‚ฌ ์ถ”์ถœ๋ฒ•์„ ํ†ตํ•ด์„œ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค 

 

 


 

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

- ๊ฐœ๋ณ„ ์†Œํ”„ํŠธ์›จ์–ด ๋‹จ์œ„๋ฅผ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ๊ตฌํ˜„ํ•˜๊ณ  ์ด๋ฅผ ๋ฌธ์„œํ™”ํ•˜๋Š” ํ™œ๋™์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๊ณ ๋„ ํ•จ

 

 

# ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ดํ•ด

  • ์ฃผ์š” ์šฉ์–ด
    • ํ”„๋กœ๊ทธ๋žจ : ์ปดํ“จํ„ฐ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑํ•˜๋Š” ๋ช…๋ น์–ด๋“ค์˜ ๋ชจ์ž„
    • ํ”„๋กœ๊ทธ๋ž˜๋ฐ : ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋Š” ๊ณผ์ •
    • ํ”„๋กœ๊ทธ๋ž˜๋จธ : ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋Š” ์‚ฌ๋žŒ ๋˜๋Š” ์ž‘์—…
  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด : ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด 

 

# ๊ณ ๊ธ‰ ์–ธ์–ด์™€ ์ €๊ธ‰ ์–ธ์–ด

 

- ์ €๊ธ‰ ์–ธ์–ด : ํ•˜๋“œ์›จ์–ด ์ง€ํ–ฅ์˜ ๊ธฐ๊ณ„ ์ค‘์‹ฌ ์–ธ์–ด ex) ๊ธฐ๊ณ„์–ด, ์–ด์…ˆ๋ธ”๋ฆฌ์–ด

- ๊ณ ๊ธ‰ ์–ธ์–ด : ์‚ฌ๋žŒ์ด ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์ผ์ƒ ์–ธ์–ด์™€ ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•œ ์ธ๊ฐ„ ์ค‘์‹ฌ์˜ ์–ธ์–ด ex) C, C++, ์ž๋ฐ”, ํŒŒ์ด์ฌ...

 

 

# ๋นŒ๋“œ(Build)

- ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋…๋ฆฝ์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •(์ปดํŒŒ์ผ -> ๋งํฌ -> ํŒจํ‚ค์ง• -> ํ…Œ์ŠคํŠธ)

- ์ปดํŒŒ์ผ(Compile) : ์†Œ์Šค ํŒŒ์ผ์„ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •

- ๋งํฌ(Link) : ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐœ๋ณ„์ ์ธ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฌผ(๋ชจ๋“ˆ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ)์„ ์—ฐ๊ฒฐํ•˜์—ฌ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ์„ ๋งŒ๋“œ๋Š” ๊ณผ์ •

- ํŒจํ‚ค์ง• (Packaging) : ์ปดํŒŒ์ผ ๋ฐ ๋งํฌ๋œ ๊ฒฐ๊ณผ๋ฌผ์„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ˜•ํ…Œ๋กœ ๋ฌถ๋Š” ๊ณผ์ •(๋ฆฌ์†Œ์Šค ํŒŒ์ผ(์ด๋ฏธ์ง€, ์„ค์ • ํŒŒ์ผ ๋“ฑ)์„ ํฌํ•จํ•˜์—ฌ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ํ˜•์‹์œผ๋กœ ์••์ถ•)

- ํ…Œ์ŠคํŠธ : ๋นŒ๋“œ๋œ ๊ฒฐ๊ณผ๋ฌผ์ด ์˜๋„ํ•œ ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ๊ฒ€์ฆํ•˜๋Š” ๊ณผ์ •(์ฃผ๋กœ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰)

 

 

# ๋นŒ๋“œ ๋„๊ตฌ : Maven

- Java ๋นŒ๋“œ ๊ด€๋ฆฌ ๋„๊ตฌ

- ์‚ฌ์šฉ ๋ชฉ์ 

  1. ๋ชจ๋‘๊ฐ€ ๋™์ผํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ(๊ฐ™์€ ํด๋” ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ธฐ ์œ„ํ•ด์„œ!!)
  2. ์ •ํ˜•ํ™”๋œ ์†Œ์Šค์ฝ”๋“œ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ
  3. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ
  4. ๋‹ค๋ฅธ ๋„๊ตฌ์™€ ์‰ฝ๊ฒŒ ์—ฐ๋™ํ•˜๊ธฐ ์œ„ํ•ด์„œ

- ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

  1. ํŒ€์˜ AA(Application Architect)๊ฐ€ Maven ๊ตฌ์กฐ ์ƒ์„ฑ ๋ฐ ์˜์กด์„ฑ ๊ด€๋ฆฌ
  2. pom.xmlํŒŒ์ผ์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜์กด์„ฑ ๋ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ด€๋ฆฌ(QA์˜ ๊ฒฝ์šฐ, ํ’ˆ์งˆ ๊ด€๋ จ ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์ •)
  3. ๊ฐœ๋ฐœ ํŒ€์›์€ ์ •ํ•ด์ง„ ํŒจํ‚ค์ง€์—์„œ ์†Œ์Šค์ฝ”๋“œ ๊ฐœ๋ฐœ 

# ๋ผ์ดํ”„์‚ฌ์ดํด๊ณผ ๋‹จ๊ณ„

  1. ๋ผ์ดํ”„์‚ฌ์ดํด
    1. clean : ์ด์ „ ๋นŒ๋“œ์—์„œ ์ƒ์„ฑ๋œ ์‚ฐ์ถœ๋ฌผ์„ ์‚ญ์ œํ•˜๋Š” ๊ธฐ๋Šฅ
    2. default : ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ/๋ฐฐํฌ์™€ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ
    3. site : ํ”„๋กœ์ ํŠธ์˜ ์‚ฌ์ดํŠธ ๋ฌธ์„œ ์ƒ์„ฑ๊ณผ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ
  2. default ์˜ ๋‹จ๊ณ„
    1. validate : ์ •์ƒ์ ์€ ํ”„๋กœ์ ํŠธ์ด๊ณ  ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๊ฐ€ ์ค€๋น„๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
    2. compile : ํ”„๋กœ์ ํŠธ์˜ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผ
    3. test : ์ปดํŒŒ์ผํ•œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ด์šฉํ•ด ํ…Œ์ŠคํŠธ
    4. package : JAR์™€ ๊ฐ™์ด ์ง€์ •๋œ ํฌ๋งท์œผ๋กœ ํŒจํ‚ค์ง•
    5. verify : ํŒจํ‚ค์ง€๊ฐ€ ํ’ˆ์งˆ ์ˆ˜์ค€์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ๊ฒ€์ฆ
    6. install : ํŒจํ‚ค์ง€๋ฅผ ๋กœ์ปฌ ์ €์žฅ์†Œ์— ์„ค์น˜
    7. deploy : ์ตœ์ข… ํŒจํ‚ค์ง€๋ฅผ ์›๊ฒฉ ์ €์žฅ์†Œ๋กœ ๋ณต์‚ฌ
  3. Maven ๋ช…๋ น
mvn clean package site pmd:pmd jdepend:generate

 

# Git ์†Œ๊ฐœ

- ๋ฒ„์ „ ๊ด€๋ฆฌ์˜ ๋Œ€ํ‘œ ๋„๊ตฌ

- ๋ชฉ์  : ๋ฒ„์ „ ๊ด€๋ฆฌ์™€ ํ˜‘์—… ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜

- ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

  1. ๋ณ„๋„์˜ ์ €์žฅ์†Œ ์šด์˜ ์„œ๋ฒ„ ์‚ฌ์šฉ
    1. Git: GitHub, BitBuket, GitLab, Giblit
    2. ํ†ตํ•ฉ ์ €์žฅ์†Œ : SCMManager
  2. ํด๋ผ์ด์–ธํŠธ๋Š” Core๋‚˜ ๋ณ„๋„์˜ ํ™•์žฅ ๋„๊ตฌ ์‚ฌ์šฉ
    1. Eclipse/Intelli J ๊ณ„์—ด / VS Code ํ”Œ๋Ÿฌ๊ทธ์ธ : ๊ธฐ๋ณธํฌํ•จ
    2. Tortoise ์‹œ๋ฆฌ์ฆˆ
    3. Sourcetree 

 

์‹ค์Šต

 

1. github์—์„œ ์ €์žฅ์†Œ ํ•˜๋‚˜ ์ƒ์„ฑ (junit4 ํ”„๋กœ์ ํŠธ fork)

2. github ์ €์žฅ์†Œ (์›๊ฒฉ) >> local(์ปดํ“จํ„ฐ)์— ๋ณต์ œ (git clone)

> ํŒŒ์ผ ํ•˜๋‚˜ ์ˆ˜์ •

> ์ˆ˜์ •๋œ ํŒŒ์ผ commit

> ๋กœ์ปฌ == ์›๊ฒฉ ๋™์ผํ•˜๊ฒŒ ์„ธํŒ…!

 

3. eclipse ํ”„๋กœ์ ํŠธ (maven)

 

 


 

# ํ’ˆ์งˆ(Quality) ์ •์˜

 

- ๋ฌผ๊ฑด์ด ์–ผ๋งˆ๋‚˜ ์ข‹์€์ง€, ๋‚˜์œ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •๋„

- ํ’ˆ์งˆ์€ ๋ชจ๋“  ์ œํ’ˆ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์š”์†Œ์ด๋ฉฐ, ์†Œํ”„ํŠธ์›จ์–ด ์ œํ’ˆ๋„ ์˜ˆ์™ธ๋Š” ์•„๋‹˜

 

- ๋ช…์‹œ์ , ๋ฌต์‹œ์ ์š”๊ตฌ๋ฅผ ๋งŒ์กฑ์‹œํ‚ค๋Š” ์ œํ’ˆ ๋˜๋Š”์„œ๋น„์Šค์˜ ๋Šฅ๋ ฅ์— ๊ด€ํ•œ ํŠน์„ฑ

(๊ณ ๊ฐ์˜ ์š”๊ตฌ๋ฅผ ๋งŒ์กฑ์‹œํ‚ค๋Š” ๊ฒƒ / ํ’ˆ์งˆ์€ ์‚ฌ์šฉ ๋ชฉ์ ์— ์ผ์น˜๋˜๋Š” ์ •๋„ / ํ’ˆ์งˆ์€ ๊ณ ๊ฐ ์š”๊ตฌ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์ ํ•ฉ๋„)

 

 

# ์†Œํ”„ํŠธ์›จ์–ด ํ’ˆ์งˆ์˜ ์ •์˜

  1.    IEEE
    1. ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ํ•„์š”ํ•œ ์†์„ฑ์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋Š” ์ •๋„
    2. ์‚ฌ์šฉ์ž์˜ ๊ธฐ๋Œ€ ์ˆ˜์ค€์„ ๋งŒ์กฑํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋„๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด์˜ ํŠน์„ฑ
  2. United States Department of Defense (DoD ๋ฏธ ๊ตญ๋ฐฉ๋ถ€)
    1. ๊ฐœ๋ฐœ๋œ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋งŒ์กฑํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ
  3. Roger S.Pressman
    1. ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๊ธฐ๋Šฅ ์„ฑ๋Šฅ ๋ฐ ๋งŒ์กฑ๋„์— ์žˆ์–ด์„œ ๋ช…์‹œ๋œ ์š”๊ตฌ์‚ฌํ•ญ ๋ฐ ๋‚ด์žฌ๋œ ์š”๊ตฌ์‚ฌํ•ญ์„ ์–ผ๋งˆ๋‚˜ ์ถฉ์กฑํ•˜๋Š” ๊ฐ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”์†Œํ”„ํŠธ์›จ์–ด ํŠน์„ฑ์˜ ์ด์ฒด

 

# ํ’ˆ์งˆ ๋†’์€ ์†Œํ”„ํŠธ์›จ์–ด๋ž€?

=> ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด + ์ •์ƒ ๋™์ž‘ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด + ์™„์„ฑ๋„๊ฐ€ ๋†’์€ ์†Œํ”„ํŠธ์›จ์–ด

[๊ฐœ๋ฐœ์ž ๊ด€์ ]  ํ”„๋กœ๊ทธ๋žจ์— ๊ฒฐํ•จ์ด ์—†๊ณ  ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ๋ฅผ ์ •์˜ํ•œ ์š”๊ตฌ๋ถ„์„ ๋ช…์„ธ์„œ๋Œ€๋กœ ๋งŒ๋“  ์†Œํ”„ํŠธ์›จ์–ด

 

 

# ์†Œํ”„ํŠธ์›จ์–ด ํ’ˆ์งˆ(Software Quality)

  • ์ œํ’ˆ(Product) ํ’ˆ์งˆ
    • ์ œํ’ˆ ์ž์ฒด๊ฐ€ ๊ฐ€์ง€๋Š” ํ’ˆ์งˆ
    • ์™„์„ฑ๋œ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์šด์šฉ๋  ํ™˜๊ฒฝ์— ์˜ฌ๋ ค์ ธ ์ตœ์ข… ์‹œ์Šคํ…œ์ด ์™„์„ฑ๋˜์—ˆ์„ ๋•Œ, ์†Œ๋น„์ž๊ฐ€ ์š”๊ตฌํ•˜๋Š” ๋ฐ”์— ์–ผ๋งˆ๋‚˜ ๋ถ€ํ•ฉํ•˜๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ’ˆ์งˆ
  •  ํ”„๋กœ์„ธ์Šค(Process) ํ’ˆ์งˆ
    • ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ๋ชจ๋“  ๊ฐœ๋ฐœ ํ™œ๋™์ด ๊ณ„ํš์„ ์ค€์ˆ˜ํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜์˜€๋Š”๊ฐ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ’ˆ์งˆ
    • ๊ทธ ํ™œ๋™์ด ํšจ๊ณผ์ ์ธ์ง€์— ๋Œ€ํ•ด ๊ฒ€ํ† (Review) ๋ฐ ๊ฐ์‚ฌ(Audit) ํ™œ๋™์„ ํ†ตํ•ด ํ™•์ธ

 

#   ์†Œํ”„ํŠธ์›จ์–ด ์ œํ’ˆ ํ’ˆ์งˆ ํŠน์ •

 

- ์†Œํ”„ํŠธ์›จ์–ด ์ œํ’ˆํ’ˆ์งˆ์ด ๊ฐ€์ ธ์•ผํ•˜๋Š” ์„ธ๋ถ€ ์†์„ฑ 

- ISO 25010(๊ณผ๊ฑฐ ISO 9126)์— ์†Œํ”„ํŠธ์›จ์–ด ํ’ˆ์งˆ ํŠน์„ฑ ์ •์˜

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

  

# ์†Œํ”„ํŠธ์›จ์–ด ์ œํ’ˆ ํ’ˆ์งˆ ์ˆ˜์ค€ ์•Œ๊ธฐ : V & V

  • Verification (๊ฒ€์ฆ)
    • ์ œํ’ˆ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ƒ์„ฑ๋˜๊ณ  ์žˆ๋Š”๊ฐ€? (Are we building the product right?)
    • ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์ •ํ™•ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์— ๋ถ€ํ•จํ•˜์—ฌ ๊ตฌํ˜„๋˜์—ˆ์Œ์„ ๋ณด์žฅํ•˜๋Š”ํ™œ๋™
    • ์š”๊ตฌ์‚ฌํ•ญ ๋ช…์„ธ์„œ์— ๋งž๊ฒŒ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ์ œํ’ˆ์„ ๋งŒ๋“ค๊ณ  ์žˆ์Œ์„ ๋ณด์žฅ
    • ์™„์„ฑ๋„๊ฐ€ ๋†’์€ + ์ •์ƒ ๋™์ž‘ํ•˜๋Š” ์ œํ’ˆ!!!
  • Validation (ํ™•์ธ)
    • ์˜ฌ๋ฐ”๋ฅธ ์ œํ’ˆ์„ ์ƒ์„ฑํ•˜๊ณ  ์žˆ๋Š”๊ฐ€? (Are we building the right product?)
    • ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๊ณ ๊ฐ์ด ์˜๋„ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๊ตฌํ˜„๋˜์—ˆ์Œ์„ ๋ณด์žฅํ•˜๋Š” ํ™œ๋™
    • ๊ณ ๊ฐ์ด ์˜๋„ํ•œ ํ™˜๊ฒฝ์ด๋‚˜ ์‚ฌ์šฉ ๋ชฉ์ ์— ๋งž๊ฒŒ ์˜ฌ๋ฐ”๋ฅธ์ œํ’ˆ์„ ๋งŒ๋“ค๊ณ  ์žˆ์Œ์„ ๋ณด์žฅ
    • ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ์ œํ’ˆ!!!

 

#   V๋ชจ๋ธ์—์„œ์˜ V & V

 

- ๊ฐœ๋ฐœ ์ƒ๋ช…์ฃผ๊ธฐ์˜ ๊ฐ ๋‹จ๊ณ„์™€ ๊ทธ์— ์ƒ์‘ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ํ…Œ์ŠคํŠธ ๋‹จ๊ณ„๋ฅผ ๋งคํ•‘ํ•œ ๋ชจ๋ธ : V ๋ชจ๋ธ

- ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋กœ ํญํฌ์ˆ˜ ๋ชจ๋ธ์˜ ํ™•์žฅ๋œ ํ˜•ํƒœ ์ค‘ ํ•˜๋‚˜๋กœ, ๊ฐœ๋ฐœ ์ƒ๋ช…์ฃผ๊ธฐ์˜ ๊ฐ ๋‹จ๊ณ„์™€ ๊ทธ์— ์ƒ์‘ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์‹œํ—˜ ๊ฐ ๋‹จ๊ณ„์˜ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋ƒ„

์ธ์ˆ˜ ํ…Œ์ŠคํŒ… : Validation / ์‹œ์Šคํ…œ, ํ†ตํ•ฉ, ๋‹จ์œ„ : Verification

 

 

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

 

- ์ •์ƒ ์กฐ๊ฑด ๋ฐ ๋น„์ •์ƒ ์กฐ๊ทผ(์ฆ‰, ๊ฒฐํ•จ/๋ฒ„๊ทธ) ์‚ฌ์ด์˜ ์ฐจ์ด์ ์„ ๋ฐœ๊ฒฌํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ์†Œํ”„ํŠธ์›จ์–ด ํ•ญ๋ชฉ์„ ๋ถ„์„ํ•˜๊ณ , ๋ถ„์„๋œ ํ•ญ๋ชฉ์˜ ํŠน์„ฑ์„ ํ‰๊ฐ€ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค

=> ๊ฒฐํ•จ์˜ ๋ฐœ๊ฒฌ์„ ๋ชฉ์ ์œผ๋กœ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋ถ„์„ํ•˜๋Š” ํ™œ๋™

 

 

# Error, Defect, Failure ์šฉ์–ด ์ •์˜

  1. ์—๋Ÿฌ (Error) : ๊ฒฐํ•จ์˜ ์›์ธ์œผ๋กœ ์‚ฌ๋žŒ(SW ๊ฐœ๋ฐœ์ž, ๋ถ„์„๊ฐ€ ๋“ฑ)์— ์˜ํ•˜์—ฌ ์ƒ์„ฑ๋œ ์‹ค์ˆ˜๊ฐ€ ์ฃผ๋ฅผ ์ด๋ฃธ
  2. ๊ฒฐํ•ฉ(Defect, Fault), ๋ฒ„๊ทธ(Bug) : ์‹คํŒจ / ๊ณ ์žฅ ๋˜๋Š” ๋ฌธ์ œ์˜ ์›์ธ์œผ๋กœ ์ œํ’ˆ์— ํฌํ•จ๋œ ๊ฒฐ์ 
  3. ์‹คํŒจ / ๊ณ ์žฅ(Failure), ๋ฌธ์ œ(Problem) : ์ œํ’ˆ์˜ ๊ฒฐํ•จ(Defect)์ด ์žˆ๋Š” ๋ถ€๋ถ„์ด ์‹คํ–‰๋ ๋•Œ ๋ฐœ์ƒ๋˜๋Š” ํ˜„์ƒ
์˜ˆ์‹œ...

Input : Distance, Time
Output : Speed = Distance / Time

1. ์—๋Ÿฌ(Error)
Didn't think about the case of <time=0>

2. ๊ฒฐํ•จ(Defect, Fault) 
There is no code for handling when <time=0>

3. ์‹คํŒจ/๊ณ ์žฅ(Failure)
<Divide by Zero Exception> happened

 

 

#  ์†Œํ”„ํŠธ์›จ์–ด ํ…Œ์ŠคํŠธ ์ข…๋ฅ˜

  1. ์ •์ (Static)์ธ ๋ฐฉ๋ฒ•
    1. ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ๊ฒฐํ•จ์„ ๋ฐœ๊ฒฌ
    2. ์—ฌ๋Ÿฌ ์ฐธ๊ฐ€์ž๋“ค์ด ๋ชจ์—ฌ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฒ€ํ† ํ•˜์—ฌ ๊ฒฐํ•จ์„ ์ฐพ์•„๋‚ด๊ฑฐ๋‚˜ ์ •์  ๊ฒ€์ฆ ๋„๊ตฌ ์ด์šฉ
    3. ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์ค‘์— ์ƒ์„ฑ๋˜๋Š” ๋ชจ๋“  ์‚ฐ์ถœ๋ฌผ๋“ค์— ๋Œ€ํ•ด์„œ ์ ์šฉ ๊ฐ€๋Šฅ
    4. ํ”„๋กœ์ ํŠธ๊ฐ€ ์‹œ์ž‘ํ• ๋•Œ๋ถ€ํ„ฐ ๋๋‚ ๋•Œ๊นŒ์ง€ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ
    5. ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•
      1. ๋™๋ฃŒ ๊ฒ€ํ† (Peer Review)
        1. ์ธ์Šคํ…์…˜(Inspection)
        2. ์›Œํฌ์Šค๋ฃจ(Walk-through)
        3. ๋ฐ์Šคํฌ์ฒดํฌ(Desk Check)
      2. ๋„๊ตฌ๋ฅผ ์ด์šฉํ•œ ์ •์  ๋ถ„์„
        1. ๋ฃฐ ๊ธฐ๋ฐ˜ ์ •์ ๋ถ„์„(PMD, BugFind๋“ฑ)
        2. ์˜์กด์„ฑ ๋ถ„์„
        3. ์ฝ”๋“œ ๋ฉ”ํŠธ๋ฆญ ์ธก์ •  
  2. ๋™์ (Dynamic)์ธ ๋ฐฉ๋ฒ•(์ข์€ ์˜๋ฏธ์—์„œ์˜ ํ…Œ์ŠคํŠธ๋Š” ๋™์  ํ…Œ์ŠคํŠธ๋ผ๊ณ ๋„ ํ•จ)
    1. ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๊ฒฐํ•จ์„ ๋ฐœ๊ฒฌ
    2. ๋ฐœ๊ฒฌ๋œ ๊ฒฐํ•จ์€ ๋””๋ฒ„๊น… ํ™œ๋™์œผ๋กœ ํ™•์ธํ•˜์—ฌ ์ˆ˜์ •ํ•จ
    3. ์†Œ์Šค์ฝ”๋“œ ๋งŒ๋“ค์–ด์ง„ ์ดํ›„์— ์ˆ˜ํ–‰ํ•จ!
    4. ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•
      1. ํ…Œ์ŠคํŠธ
        1. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ(Unit Test)
        2. ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ(Integration Test)
        3. ์‹œ์Šคํ…œ ํ…Œ์ŠคํŠธ(System Test)
        4. ์ธ์Šค ํ…Œ์ŠคํŠธ(Acceptance Test)
      2. ํ…Œ์ŠคํŠธ
        1. ๋ธ”๋ž™๋ฐ•์Šค ํ…Œ์ŠคํŠธ(๋ช…์„ธ ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ)
        2. ํ™”์ดํŠธ๋ฐ•์Šค ํ…Œ์ŠคํŠธ(๊ตฌ์กฐ ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ)

 

# ์†Œํ”„ํŠธ์›จ์–ด ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

- ์†Œํ”„ํŠธ์›จ์–ด ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ ˆ์ฐจ/๋ฐฉ๋ฒ•, ๋„๊ตฌ/์žฅ๋น„, ์ธ๋ ฅ์˜ ํ†ตํ•ฉ

- ํ…Œ์ŠคํŠธ ์ ˆ์ฐจ : ํ…Œ์ŠคํŠธ ๊ณ„ํš -> ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์„ค๊ณ„ -> ํ…Œ์ŠคํŠธ ์‹คํ–‰ ๋ฐ ์ธก์ • -> ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ๋ถ„์„ -> ์˜ค๋ฅ˜ ์ถ”์  ๋ฐ ์ถ”์ •

- ๊ตญ์ œ ํ‘œ์ค€ : ISO/IEC 29119 

- ํ…Œ์ŠคํŠธ ํ™œ๋™

  • ํ…Œ์ŠคํŠธ ๊ณ„ํš(Test Planning), ํ…Œ์ŠคํŠธ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์ œ์–ด(Test Monitoring and Control), ํ…Œ์ŠคํŠธ ๋ถ„์„(Test Analysis), ํ…Œ์ŠคํŠธ ๋””์ž์ธ, ํ…Œ์ŠคํŠธ ๊ตฌํ˜„, ํ…Œ์ŠคํŠธ ์‹คํ–‰, ํ…Œ์ŠคํŠธ ์™„๋ฃŒ... (๋‹ค ํ•˜์ง€๋Š” ์•Š์Œ)
  1. ํ…Œ์ŠคํŠธ ๊ณ„ํš
    1. ํ…Œ์ŠคํŠธ ๋ชฉํ‘œ๋ฅผ ์ •์˜ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ๋Œ€์ƒ ๋ฐ ๋ฒ”์œ„๋ฅผ ๊ฒฐ์ •ํ•˜๋ฉฐ, ํ…Œ์ŠคํŠธ ๊ณ„ํš์„œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๊ฒ€ํ† 
    2. ํ…Œ์ŠคํŠธ ๊ณ„ํš์€ ์ดˆ๋ฐ˜์—๋งŒ ํ•˜๋Š๋ƒ?? ๋ชจ๋“  ํ…Œ์ŠคํŠธ ๊ณผ์ •์—์„œ ๊ณ„ํš์ด ํ•„์š”ํ•จ... 
    3. ์†Œํ”„ํŠธ์›จ์–ด ํ…Œ์ŠคํŠธ ๊ณ„ํš ๋‹จ๊ณ„
      1. ์ž…๋ ฅ : ํ”„๋กœ์ ํŠธ ๊ณ„ํš์„œ, ์š”๊ตฌ๋ถ„์„ ๋ช…์„ธ์„œ
      2. ์ฒ˜๋ฆฌ : ํ…Œ์ŠคํŠธ ๋ชฉํ‘œ ์ •์˜, ํ…Œ์ŠคํŠธ ๋Œ€์ƒ ๋ฐ ๋ฒ”์œ„ ๊ฒฐ์ •, ํ…Œ์ŠคํŠธ ๊ณ„ํš์„œ ์ž‘์„ฑ ๋ฐ ๊ฒ€ํ† 
      3. ๊ฒฐ๊ณผ : ํ…Œ์ŠคํŠธ ์š”๊ตฌ์‚ฌํ•ญ ์ •์˜์„œ, ํ…Œ์ŠคํŠธ ๊ณ„ํš์„œ
  2. ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์„ค๊ณ„
    1. ํ…Œ์ŠคํŠธ ์„ค๊ณ„ ๊ธฐ๋ฒ•์„ ์ •์˜ํ•˜๊ณ , ๋„์ถœ๋œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ์ž…๋ ฅ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ ํ•  ์›์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์ž‘์„ฑ
      1. ์†Œํ”„ํŠธ์›จ์–ด ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์„ค๊ณ„ ๋‹จ๊ณ„
        1. ์ž…๋ ฅ : ํ…Œ์ŠคํŠธ ๊ณ„ํš์„œ
        2. ์ฒ˜๋ฆฌ : ํ…Œ์ŠคํŠธ ์„ค๊ณ„ ๊ธฐ๋ฒ• ์ •์˜, ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๋„์ถœ, ์›์‹œ ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜
        3. ๊ฒฐ๊ณผ : ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๋ช…์„ธ์„œ, ํ…Œ์ŠคํŠธ ์„ค๊ณ„์„œ, ํ…Œ์ŠคํŠธ ์ ˆ์ฐจ์„œ
    2. ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค(Test Case)
      1. ํŠน์ •ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์ด ์ œ๋Œ€๋กœ ๊ตฌํ˜„๋˜์—ˆ๋Š”์ง€ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ํ…Œ์ŠคํŠธ ์กฐ๊ฑด, ์ž…๋ ฅ ๊ฐ’, ์˜ˆ์ƒ ์ถœ๋ ฅ ๊ฐ’, ์‹ค์ œ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋กํ•˜๋Š”๊ฒƒ
    3.  ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ ์‹œ์ 
      1. ํ…Œ์ŠคํŠธ ๋ฒ ์ด์‹œ์Šค(๊ทผ๊ฑฐ ๋ฌธ์„œ)๋ฅผ ์ž‘์„ฑํ• ๋•Œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ
      2. ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ์„ ํ†ตํ•ด ํ…Œ์ŠคํŠธ ๋ฒ ์ด์‹œ์Šค์˜ ํ’ˆ์งˆ์„ ๊ฐœ์„ 

 

3. ํ…Œ์ŠคํŠธ ์‹คํ–‰ ๋ฐ ์ธก์ •

- ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๊ณ  ๋„์ถœ๋œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ด์šฉํ•ด ํ…Œ์ŠคํŠธ๋ฅผ ์‹ค์‹œํ•˜๊ณ  ํ…Œ์ŠคํŠธ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋ฌธ์„œํ™”

- ์‹คํŒจํ•˜๋Š”๋ชจ๋“  ํ•ญ๋ชฉ์— ๋Œ€ํ•ด์„œ ๊ฒฐํ•จ๊ด€๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค

 

4.  ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ๋ถ„์„

- ํ…Œ์ŠคํŠธ๊ฐ€ ๋๋‚˜๋ฉด ๊ณ„ํš ๋Œ€๋น„ ๊ฒฐ๊ณผ๋ฅผ ๋น„๊ต ๋ถ„์„ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ๋ณด๊ณ ์„œ๋ฅผ ์ž‘์„ฑ

- ์ž…๋ ฅ : ํ…Œ์ŠคํŠธ ๊ณ„ํš ๋‹จ๊ณ„์˜ ๋ชฉํ‘œ ๊ฐ’, ํ…Œ์ŠคํŠธ ํ™œ๋™์„ํ†ตํ•ด ์–ป์€ ๊ฒฐ๊ณผ ๊ฐ’

- ์ฒ˜๋ฆฌ : ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ๋ถ„์„, ๋ณด๊ณ ์„œ ์ž‘์„ฑ

- ๊ฒฐ๊ณผ : ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ณ„ ๊ฒฐ๊ณผ ๋ถ„์„์„œ, ์†Œํ”„ํŠธ์›จ์–ด ์ƒํƒœ ๋ณด๊ณ ์„œ, ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ๋ณด๊ณ ์„œ

 

 5. ์˜ค๋ฅ˜ ์ถ”์  ๋ฐ ์ˆ˜์ •

 - ํ…Œ์ŠคํŠธ๊ฐ€ ๋๋‚˜๋ฉด ๊ณ„ํš ๋Œ€๋น„ ๊ฒฐ๊ณผ๋ฅผ ๋น„๊ต ๋ถ„์„ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ๋ณด๊ณ ์„œ๋ฅผ ์ž‘์„ฑ

- ์ž…๋ ฅ : ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ๋ณด๊ณ ์„œ, ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ณ„ ๊ฒฐ๊ณผ ๋ถ„์„์„œ

- ์ฒ˜๋ฆฌ : ์˜ค๋ฅ˜ ์ˆ˜์ • ๊ณ„ํš, ์˜ค๋ฅ˜ ์ˆ˜์ •, ์ˆ˜์ •๋œ ๋‚ด์šฉ ๊ฒ€ํ† 

- ๊ฒฐ๊ณผ : ์ˆ˜์ • ๊ฒฐ๊ณผ ๋ณด๊ณ ์„œ 

 

 

# ํ…Œ์ŠคํŠธ ์›๋ฆฌ

  • ํ…Œ์ŠคํŠธ๋Š” ๊ฒฐํ•จ์ด ์กด์žฌํ•จ์„ ๋ฐํžˆ๋Š” ํ™œ๋™
  • ์™„๋ฒฝํ•œ ํ…Œ์ŠคํŠธ๋Š” ๋ถˆ๊ฐ€๋Šฅ(์ „์ˆ˜ ํ…Œ์ŠคํŠธ ๋ถˆ๊ฐ€๋Šฅ)
  • ํ…Œ์ŠคํŠธ๋Š” ๊ฐœ๋ฐœ ์ดˆ๊ธฐ์— ์‹œ์ž‘
  • ๊ฒฐํ•จ ์ง‘์ค‘
  • ์‚ด์ถฉ์ œ ํŒจ๋Ÿฌ๋…์Šค
  • ํ…Œ์ŠคํŠธ๋Š” ์ •ํ™ฉ(Context)์— ์˜์กด์ 
  • ์˜ค๋ฅ˜ ๋ถ€์žฌ์˜ ๊ถค๋ณ€  

 

# ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์ข‹์€ ์†Œ์Šค์ฝ”๋“œ ์ž‘์„ฑ ๋ฐฉ๋ฒ•

  • ๋ฉ”์„œ๋“œ๋Š” ์ ์ •ํ•œ  ํฌ๊ธฐ๋กœ ์ž‘์„ฑ
    • LOC 80 ๋ผ์ธ ์ดํ•˜
  • ๋ฉ”์„œ๋“œ๋ฅผ ๋„ˆ๋ฌด ๋ณต์žกํ•˜์ง€ ์•Š๊ฒŒ ์ž‘์„ฑ
    • ์ˆœํ™˜ ๋ณต์žก๋„ 10์ดํ•˜ / ์ธ์ง€ ๋ณต์žก๋„ 2-3 ๊ถŒ์žฅ
    • if(A)๋Š” 9๊ฐœ๊นŒ์ง€. (์ด ์กฐ๊ฑด๋ฌธ์€ CNN1)
  • ์ฝ”๋“œ ์ˆ˜์ •ํ•  ๋•Œ ๋ฉ”์„œ๋“œ๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋ฉด, ์ƒˆ๋กœ ๋งŒ๋“ค๊ณ  Call ํ•ด์ฃผ์„ธ์š”
    • ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค
  • ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ์ง€์ผœ์ฃผ์„ธ์š”
    • ๋ฉ”์„œ๋“œ๋Š” ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ๋งŒ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค
  • ๋ฉ”์„œ๋“œ์˜ ์˜์กด์„ ๋‚ฎ์ถฐ์ฃผ์„ธ์š”
    • ์˜์กด์ด ์žˆ๋Š” ๋ถ€๋ถ„๊ณผ ์—†๋Š” ๋ถ€๋ถ„์œผ๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  • Public, Protected ๋ฉ”์„œ๋“œ๋Š” ๋ฆฌํ„ด ํƒ€์ž…์„ ๋ช…์‹œํ•ด์ฃผ์„ธ์š”
    • ๊ฐ ์ ‘๊ทผ ์ง€์ •์ž์˜ ๋ชฉ์ ์— ๋งž๊ฒŒ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”
    • Private๋„ ๋ฆฌํ„ด ํƒ€์ž…์„ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค

 

 

# ๊ฒฐํ•จ ๋ฐœ์ƒ ์›์ธ

  • Communication : 10๋ช…์˜ ์‚ฌ๋žŒ์ด ์žˆ์œผ๋ฉด 45๊ฐœ์˜ Path๊ฐ€ ์ƒ๊น€
  • Short Term memory : ์‚ฌ๋žŒ์ด ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„(7digit) / ์—ฌ๋Ÿฌ ๊ฐ€์ง€ Interruption์ด ๋ฐœ์ƒ
  • Cognitive Dissonance : ์ž์‹ ์˜ ์‚ฐ์ถœ๋ฌผ์—์„œ ๊ฒฐํ•จ์„ ์ฐพ๊ธฐ๊ฐ€ ํž˜๋“ฆ
  • Complexity of work : ์„ค๊ณ„๋ฌธ์„œ์˜ ๋ณต์žก์„ฑ์œผ๋กœ Code ์ž‘์„ฑ์ด ์–ด๋ ค์šด ๊ฒฝ์šฐ ๋ฐœ์ƒ
  • ์•„๋ฌด๋ฆฌ ๋Šฅ์ˆ™ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ผ๋„ ํ‰๊ท ์ ์œผ๋กœ 35 Defs/KLoc๊ฐ€ ๋ฐœ์ƒํ•จ...

 

# ์ •์  ํ…Œ์ŠคํŠธ ๋‹จ๊ณ„์—์„œ ์‹๋ณ„ ๊ฐ€๋Šฅํ•œ ๊ฒฐํ•จ

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

 

# ์ •์  ๋ถ„์„(Static Analysis)

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

 

# ์†Œํ”„ํŠธ์›จ์–ด ์ฝ”๋”ฉ ํ‘œ์ค€(ํ‘œ์ค€ ์ฝ”๋”ฉ ๊ทœ์น™)

- ์ฝ”๋”ฉ ๊ทœ์น™(Coding Conventions)์€ ํŠน์ •ํ”„๋กœ๊ทธ๋žจ ์–ธ์–ด์— ๋Œ€ํ•œ ๊ฐ€์ด๋“œ๋ผ์ธ ๋ชจ์Œ(ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์Šคํƒ€์ผ๊ณผ ๊ด€ํ–‰์„ ๊ถŒ๊ณ ) => Coding Standard

 

 

# PMD Rule Set

 

- ์—ฌ๋Ÿฌ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๋Š” ์˜คํ”ˆ์†Œ์Šค ์ •์ ์ฝ”๋“œ ๋ถ„์„ ๋„๊ตฌ(๋ฃฐ ์…‹ ๊ฐœ์ˆ˜ ์ด 512๊ฐœ)

- ์ง€์› ์–ธ์–ด : Java, JavaScript, Python, C++, HTML, PLSQL, Apex, Swift, Kotlin, Scala, PHP ๋“ฑ..

https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javadoc.html 

 

javadoc

One use page for each package (package-use.html) and a separate use page for each class and interface (class-use/classname.html). The use page describes what packages, classes, methods, constructors and fields use any part of the specified class, interface

docs.oracle.com

 

 

# Eclipse์— pmd ์„ค์น˜

[help] -> [marketplace]์—์„œ pmd๋กœ๊ณ  ์žˆ๋Š”๊ฑธ๋กœ ์„ค์น˜ํ•˜๊ธฐ!

 

pmd ๊ฒ€์‚ฌ

 

pmd ๊ฒ€์‚ฌ ํ™•์ธ๊ธฐ๋ก ๋‚จ๊ธฐ๊ธฐ

 

 

pmd ์ˆ˜์ • ์ฝ”๋“œ ์ถ”์ฒœ(์ถ”์ฒœ ์ฝ”๋“œ๋ฅผ ๊ตณ์ด ์“ธ ํ•„์š” x

 

 

# ์ œํ’ˆ ํ’ˆ์งˆ ๋ฉ”ํŠธ๋ฆญ

  • ๊ทœ๋ชจ ๊ด€๋ จ
    • ๋ผ์ธ ์ˆ˜(LOC : Line of Code)
    • ์ฃผ์„ ์ œ์™ธ ๋ผ์ธ ์ˆ˜(NLOC : Non-Comment Lines of Code)
    • ์ฃผ์„ ๋น„์œจ : 20% ์ด์ƒ
    • ํ•จ์ˆ˜/ํŒŒ์ผ/ํŒจํ‚ค์ง€ ๋ณ„ ๋ผ์ธ์ˆ˜ (๋ฏธ๊ตญ๋ฐฉ๋ถ€ : 80 / NASA : 60 / ํญ์Šค๋ฐ”๊ฒ : 50)
  • ๋ณต์žก๋„ ๊ด€๋ จ
    • ์ˆœํ™˜ ๋ณต์žก๋„(Cyclomatic Complexity) : ํ•จ์ˆ˜์˜ ์ œ์–ด ํ๋ฆ„์ด ์–ผ๋งˆ๋‚˜ ๋ณต์žกํ•œ์ง€ ์ธก์ •. ๋ถ„๊ธฐ๋ฌธ + 1
    • ์ธ์ง€ ๋ณต์žก๋„(Cognitive Complexity) : ํ•จ์ˆ˜๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ค‘์ฒฉ๋ฌธ์ด ๋งŽ์€์ง€ ์ธก์ •, Nesting Depth๋ผ๊ณ ๋„ ํ‘œํ˜„

 


 

# ๋™๋ฃŒ๊ฒ€ํ† 

 

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

 

#  ํšจ์œจ์ ์ธ ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋ฅผ ์ž‘์„ฑ ๋ฐฉ๋ฒ•

  • ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋Š” ๊ฒฐํ•จ ๋ถ„์„์— ๊ธฐ์ดˆํ•ด์„œ ์ •๊ธฐ์ ์œผ๋กœ ๊ฐฑ์‹ ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค
  • ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋Š” ํ•œ ํŽ˜์ด์ง€๋ณด๋‹ค ๊ธธ์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค
  • ์ฒดํฌ๋ฆฌ์ŠคํŠธ ์•„์ดํ…œ์€ ๋ช…๋ น๋ฌธ์œผ๋กœ ์žฌ ํ‘œํ˜„๋  ์ˆ˜ ์žˆ๋Š” ์งˆ๋ฌธ์˜ ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค 
    • ๋ฉ”์†Œ๋“œ ๋ฆฌํ„ด ๊ฐ’์€ ์ ์ ˆํ•˜๊ฒŒ ๋ช…์‹œํ•˜์˜€๋Š”๊ฐ€?
  • ์ฒดํฌ๋ฆฌ์ŠคํŠธ ์•„์ดํ…œ์€ ๋„ˆ๋ฌด ์ผ๋ฐ˜์ ์ด์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค
    • ์™„์ „ํ•˜๊ณ  ์ผ๊ด€์„ฑ ์žˆ๊ณ  ๋ช…๋ฐฑํ•œ๊ฐ€? (๋ชจํ˜ธํ•˜๊ฒŒ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„์•ผ ํ•จ)

 

# ์†Œ์Šค์ฝฌ๋“œ ๋™๋ฃŒ๊ฒ€ํ†  ์ฃผ์˜ ์‚ฌํ•ญ

  • Review fewer than 200 ~ 400 lines of code at a time 
    • ํ•œ๋ฒˆ์— 200 ~ 400 ๋ผ์ธ ์ด๋‚ด์˜ ๋‹จ์œ„๋กœ ๊ฒ€ํ† 
  • Aim for an inspection rate of less than 300 ~ 500 LOC/hour
    • 1์‹œ๊ฐ„์— 300 ~ 500 ๋ผ์ธ ๋ณด๋‹ค ์ ๊ฒŒ ๋ณธ๋‹ค๋Š” ๋Š๋‚Œ์œผ๋กœ ๊ฒ€ํ†  / ๋„ˆ๋ฌด ๋นจ๋ฆฌ ๊ฒ€ํ† ํ•˜๋Š” ๊ฒƒ์€ ์•ˆ ์ข‹์Œ
  • Authors should annotate source code before the review begins
    • ๊ฒ€ํ† ๋ฅผ ์š”์ฒญํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ์–ด๋–ค ๋‚ด์šฉ์ธ์ง€ ์„ค๋ช…์„ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹์Œ
  • Establish quantifiable goals for code review and capture metrics so you can imporve tour processes
    • ๋ชฉ์ ์˜์‹์„ ๊ฐ–๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์—๋Ÿฌ์œจ์„ ํ˜„์žฌ๋ณด๋‹ค 50% ์ค„์ด๊ฒ ๋‹ค๋Š” ๋“ฑ์˜ ๋ช…ํ™•ํ•œ ์ˆ˜์น˜๋ฅผ ์„ค์ •ํ•˜๋ฉด ์ด๋ฅผ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • Managers must foster a good code review culture in which finding defects is viewed positively
    • ๊ด€๋ฆฌ์ž๋“ค์€ ๊ฒ€ํ† ํ™œ๋™์ด ์ž˜ ๋˜๊ณ  ์žˆ๋Š”์ง€ ๊ด€์ฐฐํ•˜๊ณ , ์ด๋ฅผ ์žฅ๋ คํ•˜๋Š” ์กฐ์ง๋ฌธํ™”๋ฅผ ๋งŒ๋“ค์–ด ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค
  • ๋™๋ฃŒ ๊ฒ€ํ† ๋ฅผ ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ๋‚จ์ด ๋ณธ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์ž‘์„ฑํ•˜๊ธฐ!
  • Beware the "Big Brother" effect
    • ๋™๋ฃŒ๊ฐ€ ์ž์‹ ์˜ ์ฝ”๋“œ์— ์˜ค๋ฅ˜๋ฅผ ๋งŽ์ด ๋ฐœ๊ฒฌํ•œ๋‹ค๊ณ  ํ•ด์„œ ๋„ˆ๋ฌด ๊ธฐ์ฃฝ์ง€ ๋งˆ์„ธ์š”. ํ’ˆ์งˆ์„์œ„ํ•œ ํ•˜๋‚˜์˜ ๊ณผ์ •์ด ๋ฟ์ด์ง€ ๋ˆ„๊ตฌ๋ฅผ ๋ชจ์š•ํ•˜๊ฑฐ๋‚˜ ๋น„ํ•˜ํ•˜๋Š” ์ž๋ฆฌ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค   

 

# ์ธ์Šคํ…์…˜์˜ ์ฃผ์š” ํŠน์ง•

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

 

# ํšŒ๊ท€ ํ…Œ์ŠคํŠธ(Regression Test)

  • ์ •์ƒ ๋™์ž‘ํ•˜๋˜ ๊ธฐ๋Šฅ์ด SW ์ˆ˜์ • ํ›„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ํšŒ๊ท€ ๊ฒฐํ•จ์˜ ์œ ๋ฌด๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ด์ „ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ฉฐ ํ™•์ธํ•˜๋Š” ํ…Œ์ŠคํŠธ 
    • SW ์ˆ˜์ •์œผ๋กœ ์ธํ•œ ๋ถ€์ •์ ์ธ ์˜ํ–ฅ ์œ ๋ฌด๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ํ…Œ์ŠคํŠธ
  • ํšŒ๊ท€ ๊ฒฐํ•จ์„ ๋ฐœ์ƒ์‹œํ‚ค๋Š” SW ์ˆ˜์ •์˜ ์ข…๋ฅ˜
    • ์ƒˆ๋กœ์šด ๊ฒฐํ•จ์˜ ์กฐ์น˜
    • ๋ฆฌํŒฉํ† ๋ง
    • ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์˜ ์ถ”๊ฐ€/๋ณ€๊ฒฝ
  • ์›น์€ ํ•„์ˆ˜๋Š” ์•„๋‹ˆ์ง€๋งŒ ๊ฒฐํ•จ์˜ ํ™•์ธ์ด ์ค‘์š”ํ•œ ์ž„๋ฒ ๋””๋“œ(์ฐจ๋Ÿ‰)์˜ ๊ฒฝ์šฐ๋Š” ํ•„์ˆ˜์ ์ž„.. 

 

# SW ๋™์  ํ…Œ์ŠคํŒ…์˜ 4๋‹จ๊ณ„

  1. ๋‹จ์œ„(Unit) ํ…Œ์ŠคํŒ…
  2. ํ†ตํ•ฉ(Integration) ํ…Œ์ŠคํŒ…
  3. ์‹œ์Šคํ…œ(System) ํ…Œ์ŠคํŒ…
  4. ์ธ์ˆ˜(Acceptance) ํ…Œ์ŠคํŒ…

 

# ๋‹จ์œ„ ํ…Œ์ŠคํŒ…(Unit Testiong) / ์ปดํฌ๋„ŒํŠธ ํ…Œ์ŠคํŒ…(Component Testing)

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

 

# ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๊ฒฐํ•จ ์›์ธ ํ•œ์ •

- ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์—์„œ ๊ฒฐํ•จ์ด ๋ฐœ์ƒํ•œ๋‹ค๋ฉด, ๊ทธ ์›์ธ์€ ํ…Œ์ŠคํŠธ ๋Œ€์ƒ ๋ชจ๋“ˆ์— ํ•œ์ •ํ•ด์•ผ ํ•จ

# ํ†ตํ•ฉ ํ…Œ์ŠคํŒ…(Integration Testing)

- ์‹œ์Šคํ…œ์˜ ์„ค๊ณ„์™€ ์š”๊ตฌ์‚ฌํ•ญ์— ๋ถ€ํ•ฉํ•˜๋Š”์ง€ ๋ณด์ด๊ธฐ ์œ„ํ•ด ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์„ฑ์š”์†Œ, ํ•˜๋“œ์›จ์–ด ๊ตฌ์„ฑ์š”์†Œ ๋“ฑ์ด ์ ์ฐจ ํ†ตํ•ฉ๋˜์–ด ์ „์ฒด ์‹œ์Šคํ…œ์œผ๋กœ ํ†ตํ•ฉ๋  ๋•Œ๊นŒ์ง€ ์ด๋ฃจ์–ด์ง€๋Š” ์ ˆ์ฐจ์ ์ธ ํ…Œ์ŠคํŒ…

 

# ์†Œํ”„ํŠธ์›จ์–ด ํ†ตํ•ฉ ์ „๋žต๊ณผ ์—ฐ๊ณ„

  • SW ํ†ตํ•ฉ ์ „๋žต
    • ๋น…๋ฑ…(Big Bang) ๊ธฐ๋ฒ•
      • ๋ชจ๋“ˆ์„ ํ•œ๊บผ๋ฒˆ์— ํ†ตํ•ฉํ•˜์—ฌ ํ…Œ์ŠคํŒ…์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•
      • ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์„ ๊ฒฝ์šฐ ์–ด๋Š ๋ถ€๋ถ„์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ๋Š”์ง€ ์ฐพ๊ธฐ๊ฐ€ ํž˜๋“ฆ 
    • ํ•˜ํ–ฅ์‹(Top-Down) ๊ธฐ๋ฒ•
      • ๊ฐ€์žฅ ์ƒ์œ„ ๋ชจ๋“ˆ๋ถ€ํ„ฐ ํ•˜์œ„ ๋ชจ๋“ˆ๋กœ ์ ์ง„์ ์œผ๋กœ ํ†ตํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•
      • ์ƒ์œ„ ๋ชจ๋“ˆ ํ…Œ์ŠคํŒ… ์‹œ, ํ•˜์œ„ ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ์Šคํ…œ์ด ํ•„์š”
    • ์ƒํ–ฅ์‹(Bottom-Up) ๊ธฐ๋ฒ•
      • ํ•˜์œ„ ๋ชจ๋“ˆ๋ถ€ํ„ฐ ํ…Œ์ŠคํŒ…ํ•˜๊ณ  ์ƒ์œ„ ๋ชจ๋“ˆ๋กœ ์ ์ง„์ ์œผ๋กœ ํ†ตํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•
      • ํ•˜์œ„ ๋ชจ๋“ˆ ํ…Œ์ŠคํŒ…
    • ์ง€์†์  ํ†ตํ•ฉ ๋ฐฉ๋ฒ•(Continuous Integration)
      • SW ํ†ตํ•ฉ ์˜ค๋ฅ˜๋ฅผ ๊ฐœ๋ฐœ์ดˆ๊ธฐ๋ถ€ํ„ฐ ์˜ˆ๋ฐฉํ•˜๋Š” ๊ฒƒ 

 

# ์‹œ์Šคํ…œ ํ…Œ์ŠคํŒ…(System Testing)

  • ๋ชจ๋“ˆ์ด ๋ชจ๋‘ ํ†ตํ•ฉ๋œ ํ›„, ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์‚ฌํ•ญ์ด ๋งŒ์กฑ๋˜์—ˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๋Š” ํ…Œ์ŠคํŒ…
  • ๊ณ ๊ฐ์—๊ฒŒ ์‹œ์Šคํ…œ์„ ์ „๋‹ฌํ•˜๊ธฐ ์ „, ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ•œ ์กฐ์ง์ด ์ฃผ์ฒด๊ฐ€ ๋˜๋Š” ๋งˆ์ง€๋ง‰ ํ…Œ์ŠคํŒ…
  • ํ…Œ์ŠคํŒ… ๋Œ€์ƒ
    • ์š”๊ตฌ์‚ฌํ•ญ ๋ช…์„ธ์„œ๋ฅผ ๊ธฐ์ดˆ๋กœ ํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ๊ธฐ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ
    • ๋ณด์•ˆ, ์„ฑ๋Šฅ, ์‹ ๋ขฐ์„ฑ, UX ๋“ฑ์˜ ๋น„ ๊ธฐ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ
    • ๊ธฐ๋Šฅ ์•ˆ์ „ ์š”๊ตฌ์‚ฌํ•ญ

# ์ธ์ˆ˜ ํ…Œ์ŠคํŒ…(Acceptance Testing)

  • ์‹œ์Šคํ…œ์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์ธ์ˆ˜๋˜๊ธฐ ์ „, ์‚ฌ์šฉ์ž์— ์˜ํ•ด ์‹ค์‹œ๋˜๋Š” ํ…Œ์ŠคํŒ…
  • ์‹ค์ œ ์‚ฌ์šฉ์ž๊ฐ€ ์šด์˜ํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ ์‹ค์‹œ
  • ์ธ์ˆ˜ ํ…Œ์ŠคํŒ…์„ ํ†ต๊ณผํ•ด์•ผ๋งŒ ์‹œ์Šคํ…œ์ด ์ •์ƒ์ ์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ธ์ˆ˜๋˜๊ณ  ํ”„๋กœ์ ํŠธ๋Š” ์ข…๋ฃŒ๋จ

 

# ๋™์  SW ํ…Œ์ŠคํŠธ ์„ค๊ณ„ ๊ธฐ๋ฒ•์˜ ์ข…๋ฅ˜ (+ ๊ฒฝํ—˜ ๊ธฐ๋ฐ˜ Test)

  • ๋ช…์„ธ ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ(Black-Box)
    • ์†Œ์Šค ์ฝ”๋“œ ์ž์ฒด์˜ ๋กœ์ง(Logic)์€ ์ œ์™ธํ•˜๊ณ , ์ถœ๋ ฅ ๊ฐ’์—๋งŒ ์ดˆ์ ์„ ๋‘๊ณ  ํ…Œ์ŠคํŒ… ํ•˜๋Š” ๋ฐฉ๋ฒ•
    • ์š”๊ตฌ์‚ฌํ•ญ ๋ช…์„ธ์„œ(SRS)๋‚˜ ์„ค๊ณ„์„œ๋กœ๋ถ€ํ„ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ถ”์ถœ
      • ๋ธ”๋ž™๋ฐ•์Šค ํ…Œ์ŠคํŠธ
      • ๋ชจ๋“ˆ์˜ ์™ธ๋ถ€(์ž…๋ ฅ, ์ถœ๋ ฅ)
  • ๊ตฌ์กฐ ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ(White-Box)
    • ์†Œ์Šค ์ฝ”๋“œ ๋‚ด์˜ ๋ชจ๋“  ๋…๋ฆฝ์ ์ธ ๊ฒฝ๋กœ๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋ด„์œผ๋กœ์จ ์ž ์žฌ์ ์ธ ์˜ค๋ฅ˜๋ฅผ ์ฐพ์•„๋‚ด๋Š” ๋ฐฉ๋ฒ•
    • ๋‚ด๋ถ€๊ตฌ์กฐ(์†Œ์Šค ์ฝ”๋“œ, ์•Œ๊ณ ๋ฆฌ์ฆ˜)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ถ”์ถœ -> ์ฃผ๋กœ ๋‹จ์œ„ํ…Œ์ŠคํŠธ์—์„œ ์“ฐ์ž„
      • ํ™”์ดํŠธ ๋ฐ•์Šค ํ…Œ์ŠคํŠธ
      • ๋ชจ๋“ˆ์˜ ๋‚ด๋ถ€(๋กœ์ง)

 

#  ๋ธ”๋ž™๋ฐ•์Šค(Black Box) ํ…Œ์ŠคํŒ… ๊ฐœ์š”

- ์†Œ์Šค ์ฝ”๋“œ ์ž์ฒด์˜ ๋กœ์ง์€ ์ œ์™ธํ•˜๊ณ , ์ถœ๋ ฅ ๊ฐ’์—๋งŒ ์ดˆ์ ์„ ๋‘๊ณ  ํ…Œ์ŠคํŒ… ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์š”๊ตฌ์‚ฌํ•ญ ๋ช…์„ธ์„œ๋‚˜ ์„ค๊ณ„์„œ๋กœ๋ถ€ํ„ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ถ”์ถœ

  • ํ…Œ์ŠคํŒ… ์ข…๋ฅ˜
    • ๊ตฌ๋ฌธ ํ…Œ์ŠคํŒ…(Syntax Testing) : ์ž…๋ ฅ ๊ฐ’์„ ์ ํ•ฉ๊ณผ ๋ถ€์ ํ•ฉ ์กฐ๊ฑด์œผ๋กœ ๋ถ„๋ฅ˜ํ•œ ๋’ค, ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์˜ˆ์ƒ๋˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ํ…Œ์ŠคํŒ…
    • ํŽ˜์–ด์™€์ด์ฆˆ(Pairwise) : ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๊ฐ ์ž…๋ ฅ ๊ฐ’๋“ค์ด ๋‹ค๋ฅธ ์ž…๋ ฅ๊ฐ’๊ณผ ์ตœ์†Œํ•œ ํ•œ๋ฒˆ์”ฉ ์กฐํ•ฉ์„ ์ด๋ฃจ๊ฒŒ ํ•˜์—ฌ ํ…Œ์ŠคํŠธ ํ•˜๋Š” ๋ฐฉ๋ฒ• / ํŽ˜์–ด : ์ž…๋ ฅ๊ฐ’์˜ ๊ฐ ์Œ์˜ ๊ฐœ๋ณ„ ์กฐํ•ฉ
    • ๋™๋“ฑ ๋ถ„ํ• (Equivalence Partitioning) : ์ž…๋ ฅ ๊ฐ’์˜ ๋ฒ”์œ„๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์„ ๊ฒฝ์šฐ, ๊ฐ ๋ฒ”์œ„์˜ ๋Œ€ํ‘ฏ๊ฐ’์œผ๋กœ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์˜ˆ์ƒ๋˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ํ…Œ์ŠคํŒ…
    • ๊ฒฝ๊ณ„ ๊ฐ’ ๋ถ„์„(Boundary Value Analysis) : ์ž…๋ ฅ ๊ฐ’์˜ ์ฃผ์š” ์˜ค๋ฅ˜ ๋Œ€์ƒ์ธ ๊ฒฝ๊ณ„ ๊ฐ’์„ ์ž…๋ ฅ ๊ฐ’์œผ๋กœ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์˜ˆ์ƒ๋˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ํ…Œ์ŠคํŒ… 
    • ์˜์‚ฌ๊ฒฐ์ • ํ…Œ์ด๋ธ”(Devision Table) : ์ž…/์ถœ๋ ฅ๊ฐ’์ด True, False๋กœ ๊ฒฐ์ •๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ, ์ž…/์ถœ๋ ฅ๊ฐ’์˜ ๋ชจ๋“  ๋…ผ๋ฆฌ์  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•

 

# ํŽ˜์–ด์™€์ด์ฆˆ ๋„๊ตฌ ์‹ค์Šต

 

https://github.com/microsoft/pict/releases/tag/v3.7.4

 

Release Version 3.7.4 · microsoft/pict

What's Changed Adding building using CMake by @bhardwajs in #81 Enable -pedantic on *nix by @bhardwajs in #82 Enable warnings as error and W4 on MSVC by @bhardwajs in #83 Enable warnings as error ...

github.com

 

- ํŽ˜์–ด์™€์ด์ฆˆ๋Š” cmd ์ฐฝ์—์„œ ์‹คํ–‰!!(๋ฐ์ดํ„ฐ๊ฐ€ ๋ฝ‘์•„์ ธ ๋‚˜์˜จ๋‹ค)

- ์ผ๋‹จ ์ผ€์ด์Šค์˜ ๊ฒฝ์šฐ๋ฅผ txt ํŒŒ์ผ์— ์ ์–ด์คŒ

 

? ๋‚˜์˜ค๋Š”๊ฑฐ๋Š” ์ธ์ฝ”๋”ฉ UTF-8 -> ANSI๋กœ ๋ฐ”๊พธ๋ฉด ํ•ด๊ฒฐ๋œ๋‹ค!!

 

 

pict ํŒŒ์ผ๋ช… > ๋งŒ๋“ค๊ณ  ์‹ถ์€ ํŒŒ์ผ๋ช….xls  => ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์—‘์…€๋กœ ๊ฐ€์ ธ๊ฐ€์คŒ!!

 


 

 

# ํ™”์ดํŠธ๋ฐ•์Šค(White Box) ํ…Œ์ŠคํŒ… ๊ฐœ์š”

  •  ์†Œ์Šค ์ฝ”๋“œ ๋‚ด ๋ชจ๋“  ๋…๋ฆฝ์ ์ธ ๊ฒฝ๋กœ๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋ด„์œผ๋กœ์จ ๊ฒฐํ•จ์„ ์ฐพ์•„๋‚ด๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ ์†Œ์Šค ์ฝ”๋“œ๋กœ๋ถ€ํ„ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ถ”์ถœ

 

 

# ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€(Coverage)

  • ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ˆ˜ํ–‰ ์‹œ ํ…ŸํŠธ ๋Œ€์ƒ์„ ๋ช‡ %๋‚˜ ์‹คํ–‰ํ–ˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ๋Š” ์ง€ํ‘œ
  • ์š”๊ตฌ์‚ฌํ•ญ์ปค๋ฒ„๋ฆฌ์ง€
    • ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์š”๊ตฌ์‚ฌํ•ญ์„ ์–ผ๋งˆ๋งŒํผ ์‹คํ–‰ํ–ˆ๋Š”์ง€ ์ธก์ •
      • ex) ์ „์ฒด 30๊ฐœ ์š”๊ตฌ์‚ฌํ•ญ ์ค‘, 50% ์š”๊ตฌ์‚ฌํ•ญ์„ํ…Œ์ŠคํŠธ ์ˆ˜ํ–‰
    • ๋ธ”๋ž™๋ฐ•์Šค ํ…Œ์ŠคํŠธ ๊ธฐ๋ฒ•์— ์ฃผ๋กœ ์‚ฌ์šฉ
  • ์†Œ์Šค์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€
    • ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์–ผ๋งˆ๋งŒํผ ์‹คํ–‰ํ–ˆ๋Š”์ง€ ์ธก์ •
      • ์˜ˆ1) ๋ฌธ์žฅ ์ปค๋ฒ„๋ฆฌ์ง€ : ์†Œ์Šค์ฝ”๋“œ ์ „์ฒด ๋ฌธ์žฅ์˜ 40% ๋ฌธ์žฅ์„ ํ…Œ์ŠคํŠธ ์ˆ˜ํ–‰
      • ์˜ˆ2) ๊ฒฐ์ • ์ปค๋ฒ„๋ฆฌ์ง€ : ์†Œ์Šค์ฝ”๋“œ ์ „์ฒด if ๋ฌธ์˜ 60%์˜ ์ฐธ/๊ฑฐ์ง“(๊ฒฐ์ •)์„ ํ…Œ์ŠคํŠธ ์ˆ˜ํ–‰
    • ํ™”์ดํŠธ๋ฐ•์Šค ํ…Œ์ŠคํŠธ ๊ธฐ๋ฒ•์— ์ฃผ๋กœ ์‚ฌ์šฉ

 

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

  • ๊ฒฝ๋กœ ์ปค๋ฒ„๋ฆฌ์ง€(Basis Path Coverage)
    • ํ”„๋กœ๊ทธ๋žจ ์ œ์–ด๊ตฌ์กฐ๋ฅผ Flow Graph๋กœ ํ‘œํ˜„ํ•˜๊ณ , ์ˆœํ™˜ ๋ณต์žก๋„(Cyclomatic Complexity)๋ฅผ ํ†ตํ•ด ๋…๋ฆฝ์ ์ธ ๊ฒฝ๋กœ์˜ ์ˆ˜๋ฅผ ์ฐพ์•„ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ์„ ์ •ํ•˜์—ฌ ์ˆ˜ํ–‰ํ•˜๋Š” ํ…Œ์ŠคํŒ…
    • ๊ฒฝ๋กœ ์ปค๋ฒ„๋ฆฌ์ง€ ์ˆ˜ํ–‰ ํ”„๋กœ์„ธ์Šค
      • 1. Flow Graph ์ž‘์„ฑ
      • 2, ์ˆœํ™˜ ๋ณต์žก๋„ ๊ณ„์‚ฐ
      • 3. ๋…๋ฆฝ ๊ฒฝ๋กœ ์ •์˜
      • 4. ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ
    • ์ž…๋ ฅ์—์„œ ์ถœ๋ ฅ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€์˜ ํ”„๋กœ๊ทธ๋žจ ๋‚ด๋ถ€๊ตฌ์กฐ๋ฅผ ํ”Œ๋กœ์šฐ ๊ทธ๋ž˜ํ”„๋กœ ํ‘œํ˜„
  • ํ•จ์ˆ˜ ์ปค๋ฒ„๋ฆฌ์ง€(Function Coverage)
    • ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์„ฑํ•˜๋Š” ํ•จ์ˆ˜๋“ค์˜ ํ…Œ์ŠคํŒ… ์ •๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ ๊ฐ€์žฅ ๋‚ฎ์€ ์ˆ˜์ค€์˜ ์ปค๋ฒ„๋ฆฌ์ง€์ด๋ฏ€๋กœ  ๋‹จ์œ„ ํ…Œ์ŠคํŒ…์„ ํ†ตํ•ด 100% ๋‹ฌ์„ฑ์ด ํ•„์š”ํ•จ
    • ์›น์—์„œ๋Š” ๊ฑฐ์˜ ์“ธ ์ผ์ด ์—†์Œ.. ํ•จ์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š”๊ฑฐ์ง€ ๊ทธ ์•ˆ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ณด์ง€๋Š” ์•Š๊ธฐ ๋•Œ๋ฌธ์—
    • ์ž„๋ฒ ๋””๋“œ์—์„œ ๋ชจ๋“  ๋ชจ๋“ˆ์„ ๋‹ค ํ˜ธ์ถœํ–ˆ๋Š”์ง€, ํ†ตํ•ฉํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•จ 
  • ๋ฌธ์žฅ ์ปค๋ฒ„๋ฆฌ์ง€(Line Coverage)
    • ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฌธ์žฅ๋“ค์ด ์ตœ์†Œํ•œ ํ•œ๋ฒˆ์€ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋Š” ์ž…๋ ฅ ๊ฐ’์„ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ์„ ์ •ํ•˜์—ฌ ์ˆ˜ํ–‰ํ•˜๋Š” ํ…Œ์Šค 
    • ๋ฌธ์žฅ ์ปค๋ฒ„๋ฆฌ์ง€์˜ ๋‹จ์ 
      • ์†Œ์Šค์ฝ”๋“œ์˜ ๋กœ์ง(Logic)์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์กฐ๊ฑด๋ฌธ์„ ํ…Œ์ŠคํŠธํ•˜์ง€ ๋ชปํ•จ
      • ์กฐ๊ฑด๋ฌธ ์ž์ฒด์˜ ๊ฒฐ์ •(Decision์ด True/False ์ธ ๊ฒฝ์šฐ -> ๊ฒฐ์ •(Decision) ์ปค๋ฒ„๋ฆฌ์ง€ ์ ์šฉ
      • ์กฐ๊ฑด๋ฌธ์˜ ๊ฐ ์กฐ๊ฑด(Condition)์ด True/False ์ธ ๊ฒฝ์šฐ -> ์กฐ๊ฑด(Condition) ์ปค๋ฒ„๋ฆฌ์ง€ ์ ์šฉ
  • ๋ถ„๊ธฐ ์ปค๋ฒ„๋ฆฌ์ง€(Branch Coverage)
    • ๋ถ„๊ธฐ๋ฌธ ์ „์ฒด๊ฐ€ ์ฐธ ํ•œ ๋ฒˆ, ๊ฑฐ์ง“ ํ•œ ๋ฒˆ์„ ๊ฐ–๋„๋ก ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์„ ์ •ํ•˜์—ฌ ์ˆ˜ํ–‰ํ•˜๋Š” ํ…Œ์ŠคํŒ… ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฒฐ์ •(Decision) ์ปค๋ฒ„๋ฆฌ์ง€๋ผ๊ณ ๋„ ํ•จ 

 

# Junit ์†Œ๊ฐœ์™€ ๊ธฐ๋ณธ ํ…Œ์ŠคํŠธ ๊ตฌ์กฐ

 

  • ์—๋ฆญ ๊ฐ๋งˆ์™€ ์ผ„ํŠธ๋ฐฑ์ด ํƒ„์ƒ์‹œ์ผœ ํ˜„์žฌ ์ „ ์„ธ๊ณ„์ ์œผ๋กœ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” Java ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ
  • ๊ธฐ๋ณธ ํ…Œ์ŠคํŠธ๊ตฌ์กฐ : assertEquals() ์‚ฌ์šฉ ์˜ˆ์ œ
    • assertEquals(Expected, Actual) : Expected(Object)์™€ Actual(Object)์˜ ๊ฐ์ฒด ํƒ€์ž… ๋ฐ ๊ฐ’์ด ๋™์ผํ•œ์ง€ ํ™•์ธํ•˜์—ฌ ๊ฐ™์œผ๋ฉด ํ…Œ์ŠคํŠธ๊ฐ€ ์„ฑ๊ณตํ•จ

 

# ๋‹จ์œ„ํ…Œ์ŠคํŠธ(๋ฉ”์„œ๋“œ ๋‹จ์œ„) ์ˆ˜ํ–‰ ๋ฐฉ๋ฒ• ์š”์•ฝ

  • ํ…Œ์ŠคํŠธ ๋‹จ์œ„
    • public ๋ฉ”์„œ๋“œ, API ๋ฉ”์„œ๋“œ ๋“ฑ๋ฉ”์„œ๋“œ ๋‹จ์œ„
    • ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๋ฉ”์„œ๋“œ์—์„œ ์‹œ์ž‘
  •   ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ•
    • JUnit์„ ํ™œ์šฉํ•œ ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ํŠน์ • ๋ฉ”์„œ๋“œ์˜ ๊ธฐ๋Šฅ์ด ์ •์ƒ ๋™์ž‘ํ•จ์„ ํ™•์ธ
  • ํ…Œ์ŠคํŠธ ์ ˆ์ฐจ
    • ๊ธฐ๋Šฅ ๊ตฌํ˜„ -> ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ƒ์„ฑ -< ๋‹จ์œ„ํ…Œ์ŠคํŠธ ์ˆ˜์ • -> ์ปค๋ฒ„๋ฆฌ์ง€ ์ธก์ • -> ๋ฆฌํฌํŠธ ์ถœ๋ ฅ
    • ๊ธฐ๋Šฅ ๊ตฌํ˜„๊ณผ ํ…Œ์ŠคํŠธ๋ฅผ ๋ณ‘ํ–‰ํ•˜๋ฉฐ ์ ์ง„์  ๊ฐœ๋ฐœ ์ˆ˜ํ–‰
    • ํ•„์š”์‹œ ์ปค๋ฒ„๋ฆฌ์ง€ ์ธก์ • ํ›„ ํ…Œ์ŠคํŠธ๊ฐ€ ๋ฏธํกํ•œ ์ฝ”๋“œ์— ๋Œ€ํ•ด์„œ๋Š” ํ…Œ์ŠคํŠธ ๋ณด์™„ ๊ฐ€๋Šฅ

 

# JUnit5 ์‹ค์Šต

 

JUnit์ด ์—†๋‹ค๋ฉด ์ถ”๊ฐ€๋จผ์ € ํ•ด์ฃผ๊ธฐ

 

์•Œ์•„์„œ ๋งŒ๋“ค์–ด์คŒ!

package com.calc;

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Test;

class CalculatorTest {
	
	Calculator calculator = new Calculator();

	@Test
	void testAdd() {
//		assertEquals(๊ธฐ๋Œ€๊ฒฐ๊ณผ, add());
		assertEquals(6, calculator.add(4, 2));
//		System.out.println(assertEquals(6, calculator.add(4, 2)));
	}
	
	@Test
	void testMinus() {
		assertEquals(2, calculator.minus(4, 2));
	}

	@Test
	void testMulti() {
		assertEquals(8, calculator.multi(4, 2));
	}

	@Test
	void testDivide() throws Exception {
		assertEquals(2, calculator.divide(4, 2));
		assertThrows(Exception.class, () -> 
			calculator.divide(4, 0), "Divide Error"
		);
	}
	
	@Test
    void testCalculate() throws Exception {
        assertEquals(6, calculator.calculate("+", 4, 2)); 
        assertEquals(2, calculator.calculate("-", 4, 2));
        assertEquals(8, calculator.calculate("*", 4, 2)); 
        assertEquals(2, calculator.calculate("/", 4, 2)); 
//        assertEquals(0.5, calculator.calculate("/", 2, 4)); 
    }
	
	// ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ๋…๋ฆฝ์ ์ธ ๊ธฐ๋Šฅ์„ ํ•˜๋„๋ก ๋ชจ๋“ˆ์„ ๊ฐœ๋ฐœํ•ด์•ผํ•˜๋Š”๋ฐ.. ํ•˜๋‚˜์˜ ๋ชฉ์ ์„ ๊ฐ€์ง€๋Š”๊ฒŒ ์ข‹์•„์„œ ์ •์ƒ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋ฅผ ๋นผ์ฃผ๋Š” ๊ฒƒ์„ ๋”์šฑ ์ถ”์ฒœ!
    @Test
    void testUnsupportedOperator() {
        assertThrows(Exception.class, () -> 
            calculator.calculate("%", 4, 2), "Unsupported Operator"
        );
    }
	
	/**
	@Test
	void testParseInput() {
		fail("Not yet implemented");
	}

	@Test
	void testMain() {
		fail("Not yet implemented");
	}
	**/
}

 

 

์ •์ƒ์ด๋ฉด ์ดˆ๋ก์œผ๋กœ ๋‚˜์˜ต๋‹ˆ๋‹น!!

 

์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ํŒŒ์ผ๋กœ ๋ฐ›์„์ˆ˜๋„ ์žˆ๋‹ค!

 

# ํ…Œ์ŠคํŠธ ์‹คํ–‰ ๊ฑธ์ฐจ

 

# ๊ฒฐํ•จ ๊ด€๋ฆฌ ๊ธฐ๋ฒ•

  • ๊ฒฐํ•จ ๊ฐ์†Œ(Reduction) : ์ฃผ์ž…๋œ ๊ฒฐํ•จ์„ ๊ฐ€๋Šฅํ•œ ๋งŽ์ด ๋ฐœ๊ฒฌํ•˜๊ณ  ์ œ๊ฑฐํ•จ
  • ๊ฒฐํ•ฉ ๋ด‰์‡„(Containment) : ๊ฒฐํ•จ์ด ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š๊ณ  ๊ทธ ๊ฒฐํ•จ์œผ๋กœ ์ธํ•ด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ๋„ ๊ทธ๊ฒƒ์ด ์‹คํŒจ๋กœ ์ด์–ด์ง€์ง€ ์•Š๊ฒŒ ํ•จ
  • ๊ฒฐํ•จ ์˜ˆ๋ฐฉ(Prevention) : ๊ฒฐํ•จ์„ ์˜ˆ์ธกํ•˜๊ณ  ๊ทธ ์›์ธ์„ ํŒŒ์•…ํ•˜์—ฌ ๋ฐฉ์ง€ ๋ฐ ํ•ด๊ฒฐํ•จ
  • ๊ฒฐํ•จ ์˜ˆ๋ฐฉ ํ™œ๋™์ด ์ œ๋Œ€๋กœ ์ด๋ฃจ์–ด ์ง„๋‹ค๋ฉด? => ๊ฒฐํ•จ ๊ฐ์†Œ์™€ ๋ด‰์‡„์— ๋“ค์ด๋Š” ๋…ธ๋ ฅ๊ณผ ๋น„์šฉ ๊ฐ์†Œ ๊ฐ€๋Šฅ

 

# ์†Œํ”„ํŠธ์›จ์–ด ๊ฒฐํ•จ์˜ ํŠน์ง•

  • ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์€ ์ธ๋ ฅ ์ ˆ์•ฝ์  ์ž‘์—…์œผ๋กœ ์†Œํ”„ํŠธ์›จ์–ด ๊ฒฐํ•จ์˜ ๋Œ€๋ถ€๋ถ„์€๊ฐœ๋ฐœ์ž์˜ ํœด๋จผ ์—๋Ÿฌ๋กœ ์ธํ•ด ๋ฐœ์ƒ
    • ๊ตฌํ˜„ ๋‹จ๊ณ„์˜ ๊ฒฐํ•จ๋„ ํœด๋จผ ์—๋Ÿฌ๋กœ ์ธํ•ด ๋ฐœ์ƒ
    • ํœด๋จผ ์—๋Ÿฌ ์˜ˆ๋ฐฉ์„ ํ†ตํ•ด ๊ตฌํ˜„ ๋‹จ๊ณ„ ๊ฒฐํ•จ์˜ ์ž”์กด์„ ๋ฐฉ์ง€ํ•  ํ•„์š”๊ฐ€ ์žˆ์Œ
    • ๊ฒฐํ•จ ๊ด€๋ฆฌ ๋‹จ๊ณ„์—์„œ ์ถฉ๋ถ„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•ด์•ผ ํ•จ!!

 

# ๊ฒฐํ•จ ์˜ˆ๋ฐฉ์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘

  • ๊ฒฐํ•จ ์œ ํ˜• 
    • ๊ฒฐํ•จ ๋ฐœ๊ฒฌ์ž ์ž…์žฅ์—์„œ ๊ฒฐํ•จ์˜ ๋ชจ์Šต : ํ…Œ์ŠคํŠธ ๋‹จ๊ณ„๋งˆ๋‹ค ๊ฒฐํ•จ ์œ ํ˜•์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Œ
  • ๊ฒฐํ•จ ์›์ธ 
    • ๊ฒฐํ•จ ์ œ๊ฑฐ์ž(๊ฐœ๋ฐœ์ž) ์ž…์žฅ์—์„œ ๊ฒฐํ•จ ์›์ธ : ํ…Œ์ŠคํŠธ ๋‹จ๊ณ„ ๊ฒฐํ•จ ์œ ํ˜•์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Œ
  • ๊ฒฐํ•จ ์œ ์ž… ๋‹จ๊ณ„ 
    • ๊ฒฐํ•จ์ด ํฌํ•จ๋œ ๋‹จ๊ณ„
  • ๊ฒฐํ•จ ๋ฐœ๊ฒฌ ๋‹จ๊ณ„ 
    • ํ…Œ์ŠคํŠธ/๋ฆฌ๋ทฐ ๋‹จ๊ณ„
  • ๊ธฐํƒ€ 
    • OS, ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ, ํ…Œ์ŠคํŠธ ID

 

# ๊ฒฐํ•จ์˜ ์ถ”์ 

  • ๊ฐœ๋ฐœ์ž๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœ ํ›„ ํ…Œ์Šคํ„ฐ์—๊ฒŒ ์ „๋‹ฌ
  • ํ…Œ์Šคํ„ฐ๋Š” ํ…Œ์ŠคํŠธ ๊ณ„ํš, ๋ถ„์„ ๋ฐ ์„ค๊ณ„ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰
  • ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์‹คํ–‰ ์ค‘ ๊ฒฐํ•จ์„ ๊ฒ€์ถœํ•˜๊ณ  ๊ฒ€์ถœ๋œ ๊ฒฐํ•จ์„ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ „๋‹ฌ ๋ฐ ์ˆ˜์ • ์š”์ฒญ
  • ๊ฐœ๋ฐœ์ž๋Š” ๊ฒฐํ•จ์„ ์ˆ˜์ •ํ•˜๊ณ  ๋‹ค์‹œ ํ…Œ์Šคํ„ฐ์—๊ฒŒ ์ „๋‹ฌ

 

# ๊ฒฐํ•จ ์ฒ˜๋ฆฌ ์œ ํ˜•

  • Fixed : ์š”์ฒญ๋œ ๊ฒฐํ•จ์„ ์ˆ˜์ • ์™„๋ฃŒํ•œ ๊ฒฝ์šฐ
  • Duplicated : ๊ธฐ์กด์˜ ๋‹ค๋ฅธ ๊ฒฐํ•จ๊ณผ ์ค‘๋ณต๋˜๋Š” ๊ฒฝ์šฐ
  • Won't fix : ์ˆ˜์ •์ด ํ•„์š”ํ•  ์ •๋„๋กœ ์ค‘์š”ํ•˜๊ฑฐ๋‚˜ ๊ธด๊ธ‰ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
  • Invalid : ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ
728x90
๋ฐ˜์‘ํ˜•

+ Recent posts