728x90
๋ฐ˜์‘ํ˜•

1.3. ํ…Œ์ŠคํŒ…์˜ ์ผ๋ฐ˜์ ์ธ ์›๋ฆฌ

  • ์›๋ฆฌ 1. ํ…Œ์ŠคํŒ…์€ ๊ฒฐํ•จ์ด ์กด์žฌํ•จ์„ ๋ฐํžˆ๋Š” ๊ฒƒ (Testing shows presence of defects)
    • ์ž ์žฌ์ ์œผ๋กœ ์กด์žฌํ•˜๋Š” ๊ฒฐํ•จ ์ค„์ž„
    • But, ๊ฒฐํ•จ์ด ์—†๋‹ค๊ณ  ์ฆ๋ช…ํ•  ์ˆ˜๋Š” ์—†์Œ
  • ์›๋ฆฌ 2. ์™„๋ฒฝํ•œ ํ…Œ์ŠคํŒ… (Exhaustive testing)์€ ๋ถˆ๊ฐ€๋Šฅ (Exhaustive testing is impossible)
    • ํ•œ ํ”„๋กœ๊ทธ๋žจ ๋‚ด์— ๋‚ด๋ถ€ ์กฐ๊ฑด์ด ๋งŽ์Œ
    • ์ž…๋ ฅ์ด ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฐ’์˜ ์กฐํ•ฉ์ด ๋ฌด์ˆ˜ํžˆ ๋งŽ์Œ
    • ์ด๋ฒคํŠธ ๋ฐœ์ƒ์‹œ ๋ฐœ์ƒ ์ˆœ์„œ์— ๋Œ€ํ•œ ์กฐํ•ฉ๋„ ๋ฌด์ˆ˜ํžˆ ๋งŽ์Œ
    • ๋ฆฌ์Šคํฌ์— ๋”ฐ๋ผ ํ…Œ์ŠคํŠธ ๊ฐ•๋„ ๋†’๊ฒŒ ์ˆ˜ํ–‰ -> ์‹ค์ œ ์™„๋ฒฝ์€ ๋ถˆ๊ฐ€
  • ์›๋ฆฌ 3. ๊ฐœ๋ฐœ ์ดˆ๊ธฐ์— ํ…Œ์ŠคํŒ… ์‹œ์ž‘ (Early testing)
    • ๊ฐœ๋ฐœ์˜ ์‹œ์ž‘๊ณผ ๋™์‹œ์— ํ…Œ์ŠคํŠธ๋ฅผ ๊ณ„ํšํ•˜๊ณ  ์ „๋žต์ ์œผ๋กœ ์ ‘๊ทผ
    • ์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„์„œ์™€ ์„ค๊ณ„์„œ ๋“ฑ์˜ ๊ฐœ๋ฐœ ์‚ฐ์ถœ๋ฌผ ๋ถ„์„ ํ›„ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๋„์ถœ
    • ๋‹ค ๋งŒ๋“ค๊ณ  ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๊ฐ€ ์—‰๋ง์ด ๋‚˜์˜ค๋ฉด ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ์ด ์žฅ๋‚œ ์•„๋‹ˆ๊ฒ ์ฅ~
  • ์›๋ฆฌ 4. ๊ฒฐํ•จ ์ง‘์ค‘ (Defect clustering)
    • ๋Œ€๋‹ค์ˆ˜์˜ ๊ฒฐํ•จ๋“ค์€ ์†Œ์ˆ˜์˜ ํŠน์ • ๋ชจ๋“ˆ์— ์ง‘์ค‘๋˜์–ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝํ–ฅ์„ ๋ณด์ž„
    • ๊ฒฐํ•จ์˜ ์ง‘์ค‘์€ ์šด์˜์ƒ์˜ ์žฅ์• ๋ฅผ ์ดˆ๋ž˜
      • ๋ณต์žกํ•œ ๊ตฌ์กฐ์˜ ๋ชจ๋“ˆ
      • ๋‹ค๋ฅธ ๋ชจ๋“ˆ๊ณผ ๋‹ค๋Ÿ‰์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•˜๋Š” ๋ชจ๋“ˆ (์ž๊พธ ํ˜ธ์ถœํ•˜๋‹ค ๋ณด๋ฉด ๊ฒฐํ•จ ๋‚˜์˜ค๊ธฐ ์‰ฌ์›€)
      • ๊ฐœ๋ฐœ ๋‚œ์ด๋„๊ฐ€ ๋†’๊ฑฐ๋‚˜ ์ตœ์‹  ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•œ ๋ชจ๋“ˆ
      • ํฌ๊ธฐ๊ฐ€ ํฐ ๋ชจ๋“ˆ
      • ๊ฒฝํ—˜์ด ๋ฏธํกํ•œ ํŒ€์—์„œ ๊ฐœ๋ฐœํ•œ ๋ชจ๋“ˆ
      • ์ƒˆ๋กญ๊ฒŒ ๊ฐœ๋ฐœํ•œ ๋ชจ๋“ˆ
  • ์›๋ฆฌ 5. ์‚ด์ถฉ์ œ ํŒจ๋Ÿฌ๋…์Šค (Pesticide paradox)
    • ๋™์ผํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ๋™์ผํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉด ๊ฒฐํ•จ์œผ๋กœ ์ฐพ๊ธฐ ์–ด๋ ค์›Œ์ง
    • ๋” ๋งŽ์€ ๊ฒฐํ•จ์„ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ •๊ธฐ์ ์œผ๋กœ ๋ฆฌ๋ทฐํ•˜๊ณ  ๊ฐœ์„ 
  • ์›๋ฆฌ 6. ํ…Œ์ŠคํŒ…์€ ์ •ํ™ฉ(Context)์— ์˜์กด์  (Testing is context dependent)
    • ํ…Œ์ŠคํŒ…์€ ์ •ํ™ฉ(context)๊ณผ ๋„๋ฉ”์ธ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์ง„ํ–‰
    • ๋ชจ๋“  ํ…Œ์ŠคํŠธ์— ์ ์šฉ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒƒ
      • ํ…Œ์ŠคํŠธ ํ”„๋กœ์ ํŠธ ๊ธฐํš
      • ํ‘œ์ค€์ ์ธ ๊ธฐ๋ฒ•์ ์šฉ
      • ๋…๋ฆฝ์ ์ธ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ
      • ํšจ์œจ์ /ํšจ๊ณผ์  ํ…Œ์ŠคํŠธ ํŒ€ ์กฐ์ง
      • ์ •์‹ ๋ฆฌํฌํŒ… ๋“ฑ
  • ์›๋ฆฌ 7. ์˜ค๋ฅ˜-๋ถ€์žฌ์˜ ๊ถค๋ณ€ (Absence-of-errors fallacy)
    • ๊ฐœ๋ฐœ๋œ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์‚ฌ์šฉ์ž ์š”๊ตฌ์ˆ˜์ค€์„ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Œ
728x90
๋ฐ˜์‘ํ˜•

'์ž๊ฒฉ์ฆ > istqb' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์ œ 1์žฅ ํ…Œ์ŠคํŒ…์˜ ๊ธฐ์ดˆ (2)  (0) 2025.03.26
์ œ 1์žฅ ํ…Œ์ŠคํŒ…์˜ ๊ธฐ์ดˆ (1)  (0) 2025.03.26
728x90
๋ฐ˜์‘ํ˜•

1.2 ํ…Œ์ŠคํŒ…์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

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

 

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

 

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

 

๋‚˜์ค‘์—~~

 

728x90
๋ฐ˜์‘ํ˜•

'์ž๊ฒฉ์ฆ > istqb' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์ œ 1์žฅ ํ…Œ์ŠคํŒ…์˜ ๊ธฐ์ดˆ (3)  (0) 2025.03.26
์ œ 1์žฅ ํ…Œ์ŠคํŒ…์˜ ๊ธฐ์ดˆ (1)  (0) 2025.03.26
728x90
๋ฐ˜์‘ํ˜•

1.1. ํ…Œ์ŠคํŒ…์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

 

1.1.1 SW ์‹œ์Šคํ…œ ๊ด€์ ์—์„œ ํ…Œ์ŠคํŒ…์˜ ํ•„์š”์„ฑ

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

 

1.1.2 ์†Œํ”„ํŠธ์›จ์–ด ๊ฒฐํ•จ์˜ ์›์ธ

  • ์†Œํ”„ํŠธ์›จ์–ด ๊ฒฐํ•จ
    • ์˜ค๋ฅ˜(error) - ์ธ๊ฐ„์˜ ํ–‰์œ„, ์‹ค์ˆ˜
      • ์ฝ”๋“œ ์ž‘์„ฑ, ์†Œํ”„ํŠธ์›จ์–ด๋‚˜ ์‹œ์Šคํ…œ ๋˜๋Š” ๋ฌธ์„œ ์ž‘์„ฑ์‹œ ๊ฒฐํ•จ์„ ๋งŒ๋“œ๋Š” ์˜ค๋ฅ˜
    • ๊ฒฐํ•จ(defect) - ์š”๊ตฌ๋œ ๊ธฐ๋Šฅ์˜ ๋ถ€์ •ํ™•ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ๋งํ•˜๋ฉฐ ์ด๊ฒƒ์œผ๋กœ ์ธํ•ด ๊ณ ์žฅ ๋˜๋Š” ์žฅ์• ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์›์ธ์ด ๋จ
      • ์‹œ๊ฐ„์ ์ธ ์••๋ฐ•, ๋ณต์žกํ•œ ์ฝ”๋“œ, ๊ธฐ๋ฐ˜ํ™˜๊ฒฝ์˜ ๋ณต์žก์„ฑ, ๊ธฐ์ˆ ์ด๋‚˜ ์‹œ์Šคํ…œ์˜ ๋ณ€๊ฒฝ, ์ˆ˜๋งŽ์€ ์‹œ์Šคํ…œ ์ƒํ˜ธ๊ฐ„์˜ ์—ฐ๋™
      • ๊ฒฐํ•จ์€ ์žฅ์• ์˜ ์›์ธ
      • But, ๋ชจ๋“  ๊ฒฐํ•จ์ด ์žฅ์• ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ์€ ์•„๋‹˜
    • ์žฅ์• (failure) - ์ฝ”๋“œ์— ์กด์žฌํ•˜๋Š” ๊ฒฐํ•จ์˜ ์‹คํ–‰ ๋˜๋Š” ํ™˜๊ฒฝ์  ์กฐ๊ฑด์— ์˜ํ•ด ๋ถ€์ •ํ™•ํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•จ
      • ๊ฒฐํ•จ + ํ™˜๊ฒฝ์ ์ธ(๋ฐฉ์‚ฌ, ์ „์ž๊ธฐ์žฅ, ๋ฌผ๋ฆฌ์  ์˜ค์—ผ ๋“ฑ) ์กฐ๊ฑด

๋ฆฌ์Šคํฌ๋Š” ๋‚˜์ค‘์—...

๋”๋ณด๊ธฐ

์—๋Ÿฌ - ๊ฒฐํ•จ - ์žฅ์•  ์˜ˆ์‹œ ๋งŒ๋“ค๊ธฐ

 

์—๋Ÿฌ - ์‚ฌ๋žŒ์˜ ์‹ค์ˆ˜ (๋‚ ์งœ ๊ณ„์‚ฐ์—์„œ ์œค๋…„ ๋นผ๋จน์Œ)

๊ฒฐํ•จ - ์ฝ”๋“œ์˜ ๋ฌธ์ œ (2/29์ผ ์žˆ๋Š” ํ•ด์—๋„ 2/28์ผ ๊นŒ์ง€๋งŒ ์žˆ๋‹ค๊ณ  ๊ตฌํ˜„)

์žฅ์•  - ์‚ฌ์šฉ์ž์—๊ฒŒ ๋“œ๋Ÿฌ๋‚˜๋Š” ๋ฌธ์ œ (2/29์ผ ์˜ˆ์•ฝ๋ถˆ๊ฐ€)

 

1.1.3 SW ๊ฐœ๋ฐœ, ์œ ์ง€๋ณด์ˆ˜, ์šด์˜ ์‹œ ํ…Œ์ŠคํŒ…์˜ ์—ญํ• 

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

 

๋”๋ณด๊ธฐ

๋ฆฌ๊ทธ๋ ˆ์…˜ ํ…Œ์ŠคํŒ…(Regression Test)

 

์ด๋ฏธ ํ…Œ์ŠคํŠธ๋œ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋ณ€๊ฒฝํ•œ ํ›„, ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ์ƒˆ๋กœ์šด ๊ฒฐํ•จ์ด ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ํ…Œ์ŠคํŠธ

ํšŒ๊ท€ํ…Œ์ŠคํŠธ๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค

 

 

1.1.4 ํ…Œ์ŠคํŒ…๊ณผ ํ’ˆ์งˆ

  • ํ’ˆ์งˆ ํŠน์„ฑ ๋ฐ ํ–ฅ์ƒ
    • ISO/IEC 9126 ์†Œํ”„ํŠธ์›จ์–ด ์ œํ’ˆ ํ’ˆ์งˆ
      • ๊ธฐ๋Šฅ์„ฑ, ์‹ ๋ขฐ์„ฑ, ์‚ฌ์šฉ์„ฑ, ํšจ์œจ์„ฑ, ์œ ์ง€๋ณด์ˆ˜์„ฑ, ์ด์‹์„ฑ
    • ํ’ˆ์งˆ ํ–ฅ์ƒ -> ํ…Œ์ŠคํŒ…์ด ๊ฒฐํ•จ์„ ์ฐพ์•„๋‚ด๊ณ , ๋ฐœ๊ฒฌ๋œ ๊ฒฐํ•จ ์ˆ˜์ •
    • ํ’ˆ์งˆ ๋ณด์ฆ(Quality Assurance)
      • ์ด์ „ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ๋งŽ์€ ํ…Œ์ŠคํŠธ ๊ฒฝํ—˜๊ณผ ์ •๋ณด ํ™•๋ณด
      • ๋ฐœ๊ฒฌ๋œ ๊ฒฐํ•จ์˜ ๊ทผ๋ณธ ์›์ธ ์ดํ•ด๋ฅผ ํ†ตํ•ด ํ”„๋กœ์„ธ์Šค ๊ฐœ์„ 
      • ๊ฒฐํ•จ์˜ ์žฌ๋ฐœ ๋ฐฉ์ง€
    • ๊ฐœ๋ฐœ ํ‘œ์ค€์ด๋‚˜ ๊ต์œก ํ›ˆ๋ ฅ ๊ทธ๋ฆฌ๊ณ  ๊ฒฐํ•จ ๋ถ„์„

 

1.1.5 ํ…Œ์ŠคํŒ…, ์–ผ๋งˆ๋‚˜ ํ•ด์•ผ ์ถฉ๋ถ„ํ•œ๊ฐ€?

  • ์ ์ ˆํ•œ ํ…Œ์ŠคํŒ… ์ •๋„
    • ๋ฆฌ์Šคํฌ ์ˆ˜์ค€์„ ๊ณ ๋ ค
    • ํ”„๋กœ์ ํŠธ ์ œ์•ฝ ์‚ฌํ•ญ
      • ๊ธฐ์ˆ ์ ์ธ ๋‚ด์šฉ
      • ๋น„์ฆˆ๋‹ˆ์Šค
      • ์ œํ’ˆ
      • ํ”„๋กœ์ ํŠธ ๋ฆฌ์Šคํฌ
      • ์‹œ๊ฐ„
      • ๋น„์šฉ
    • ํ…Œ์ŠคํŒ…์€ ํ…Œ์ŠคํŠธ๋œ SW๋‚˜ ์‹œ์Šคํ…œ์„ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐ ์žˆ์–ด ํ”„๋กœ์ ํŠธ ์ดํ•ด๊ด€๊ณ„์ž๋“ค์ด ๋ฆด๋ฆฌ์ฆˆ ๊ฒฐ์ •(์ถœ์‹œ)์„ ๋‚ด๋ฆด ์ˆ˜ ์žˆ๋„๋ก ์ถฉ๋ถ„ํ•œ ์ •๋ณด ์ œ๊ณต (๋งจ๋‚  ์œ ์ง€๋ณด์ˆ˜ํ•  ์ˆ˜๋Š” ์—†์ž๋‚˜...)

 

 

 

728x90
๋ฐ˜์‘ํ˜•

'์ž๊ฒฉ์ฆ > istqb' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์ œ 1์žฅ ํ…Œ์ŠคํŒ…์˜ ๊ธฐ์ดˆ (3)  (0) 2025.03.26
์ œ 1์žฅ ํ…Œ์ŠคํŒ…์˜ ๊ธฐ์ดˆ (2)  (0) 2025.03.26
728x90
๋ฐ˜์‘ํ˜•
  1. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ž€
    ๋„ค์ด๋ฒ„, ๊ตฌ๊ธ€๊ณผ ๊ฐ™์€ ์›น ํŽ˜์ด์ง€๋ฅผ ๋™์ ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ๋œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด

  2. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ฐจ์ด๋Š”?
    1) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : ๊ฐœ๋ฐœ์ž๊ฐ€ ํŠน์ • ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณตํ•˜๋Š” ๋„๊ตฌ ๋ชจ์Œ, ํ•„์š”ํ•  ๋•Œ ํ˜ธ์ถœํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. Numpy, Pandas ๋“ฑ์ด ์žˆ์Œ
    2) ํ”„๋ ˆ์ž„์›Œํฌ : ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณต, ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ทธ ํ‹€ ์•ˆ์—์„œ ํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ

  3. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํƒ€์ž… ๋ถ„๋ฅ˜?
    1) ์›์‹œ ํƒ€์ž… ์ž๋ฃŒํ˜• : ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋„์ค‘์— ๋‹จ ํ•˜๋‚˜์˜ ๊ฐ’๋งŒ ๊ฐ€์ง€๋Š” SYMBOLํ˜• : BigInt, ๋ฌธ์ž, boolean, null, undefined
    2) ๋น„์›์‹œ ํƒ€์ž… ์ž๋ฃŒํ˜• : ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ํƒ€์ž… : ๊ฐ์ฒด, ํ•จ์ˆ˜, ๋ฐฐ์—ด

  4. Infinity์™€ Nan์— ๋Œ€ํ•ด์„œ ์„ค๋ช…?
    1) Infinity : ๋ฌดํ•œ๋Œ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’์œผ๋กœ, ์–ด๋Š ์ˆซ์ž๋“ ์ง€ 0์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒฝ์šฐ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฐ’์ด๊ธฐ๋„ ํ•˜๋‹ค
    2) NaN : ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ๋ฌธ์ž์—ด์„ ์ˆซ์ž๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ๋ถ€์ •ํ™•ํ•œ ์—ฐ์‚ฐ์„ ํ•  ๊ฒฝ์šฐ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฐ’๊ฐ™์€ ๊ฒฝ์šฐ์ด๋‹ค

  5. null๊ณผ undefined์˜ ์ฐจ์ด์— ๋Œ€ํ•ด์„œ ์„ค๋ช…?
    1) null : ์˜ค์ง null ๊ฐ’๋งŒ ํฌํ•จํ•˜๋Š” ์ž๋ฃŒํ˜•์œผ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์กด์žฌํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์•Œ ์ˆ˜ ์—†๋Š” ๊ฐ’์„ ๋‚˜ํƒ€๋‚ผ ๋•Œ ์‚ฌ์šฉ
    2) undefined : ๋ณ€์ˆ˜์— ๊ฐ’์ด ํ• ๋‹น๋˜์ง€ ์•Š์€ ์ƒํƒœ์ผ ๋•Œ ์ž๋™์œผ๋กœ undefined ๊ฐ’์ด ํ• ๋‹น๋จ!

  6. === ์—ฐ์‚ฐ์ž์™€ == ์—ฐ์‚ฐ์ž์˜ ์ฐจ์ด์ ?
    1) === ์—ฐ์‚ฐ์ž : ๋‘ ๊ฐ’๊ณผ ๋‘ ๋ณ€์ˆ˜์˜ ์ž๋ฃŒํ˜•๊นŒ์ง€ ๊ฐ™์€์ง€๋ฅผ ๋น„๊ตํ•˜๋Š” ์—ฐ์‚ฐ์ž
    2) == ์—ฐ์‚ฐ์ž : ๋‘ ๊ฐ’์˜ ์ž๋ฃŒํ˜•์€ ๋น„๊ตํ•˜์ง€ ์•Š๊ณ , ์˜ค์ง ๊ฐ’์ด ์ผ์น˜ํ•˜๋Š”์ง€๋ฅผ ๋น„๊ตํ•˜๋Š” ์—ฐ์‚ฐ์ž
  7. let๊ณผ var์˜ ์ฐจ์ด์  +const?
    1) let
    - ์žฌํ• ๋‹น ๊ฐ€๋Šฅ ์—ฌ๋ถ€ : ๊ฐ€๋Šฅ
    - ์Šค์ฝ”ํ”„ : ๋ธ”๋ก ์Šค์ฝ”ํ”„
    - ํ˜ธ์ด์ŠคํŒ… : ์„ ์–ธ๋งŒ ํ˜ธ์ด์ŠคํŒ…๋˜๋ฉฐ TDZ ์ ์šฉ
    - ์ดˆ๊ธฐํ™” ํ•„์ˆ˜ ์—ฌ๋ถ€ : ์„ ํƒ
    - ์ถ”์ฒœ ์ƒํ™ฉ : ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์„ ๋•Œ

    2) var
    - ์žฌํ• ๋‹น ๊ฐ€๋Šฅ ์—ฌ๋ถ€ : ๊ฐ€๋Šฅ
    - ์Šค์ฝ”ํ”„ : ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„
    - ํ˜ธ์ด์ŠคํŒ… : ์„ ์–ธ๊ณผ ์ดˆ๊ธฐํ™” ๋ชจ๋‘ ํ˜ธ์ด์ŠคํŒ…๋จ
    - ์ดˆ๊ธฐํ™” ํ•„์ˆ˜ ์—ฌ๋ถ€ : ์„ ํƒ
    - ์ถ”์ฒœ ์ƒํ™ฉ : ์‚ฌ์šฉ ๋น„์ถ”์ฒœ(์˜ค๋ž˜๋œ ๋ฐฉ์‹)

    3) const
    - ์žฌํ• ๋‹น ๊ฐ€๋Šฅ ์—ฌ๋ถ€ : ๋ถˆ๊ฐ€๋Šฅ
    - ์Šค์ฝ”ํ”„ : ๋ธ”๋ก ์Šค์ฝ”ํ”„
    - ํ˜ธ์ด์ŠคํŒ… : ์„ ์–ธ๋งŒ ํ˜ธ์ด์ŠคํŒ…๋˜๋ฉฐ TDZ ์ ์šฉ
    - ์ดˆ๊ธฐํ™” ํ•„์ˆ˜ ์—ฌ๋ถ€ : ์„ ์–ธ ์‹œ ๋ฐ˜๋“œ์‹œ ์ดˆ๊ธฐํ™” ํ•„์š”
    - ์ถ”์ฒœ ์ƒํ™ฉ : ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•„์•ผ ํ•  ๋•Œ


  8. ํ˜ธ์ด์ŠคํŒ…์ด๋ž€?
    ์•„์ง ์„ ์–ธ๋˜์ง€ ์•Š์€ ํ•จ์ˆ˜๋‚˜ ๋ณ€์ˆ˜๋ฅผ ํ•ด๋‹น ์Šค์ฝ”ํ”„์˜ ๋งจ ์œ„๋กœ ๋Œ์–ด์˜ฌ๋ ค์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ํ•˜๋Š” js์˜ ๋™์ž‘ ๋ฐฉ์‹

  9. ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น์ด๋ž€?
    ๋ฐฐ์—ด ์š”์†Œ๋‚˜ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ถ„ํ•ดํ•ด์„œ ๊ทธ ๊ฐ’๋“ค์„ ๊ฐ๊ฐ์˜ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œํ˜„์‹('...'๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉ)

  10. spread์™€ rest
    1) spread
    - ํŠน์ • ๋ฐฐ์—ด์˜ ์š”์†Œ๋‚˜ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ํŽผ์น˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค
    - ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ณผ์ •์—์„œ ์ฝ”๋“œ๋ฅผ ๋”์šฑ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค
    - ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณตํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค

    2) rest
    - ํŠน์ • ๋ถ€๋ถ„์„ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด๋กœ ๋ฌถ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๋ฌธ๋ฒ•
    - ๊ฐ์ฒด์—์„œ rest๋Š” ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋ฉฐ, ์›ํ•˜๋Š” ๊ฐ’๋“ค์„ ๊บผ๋‚ด๊ณ  ๋‚˜๋จธ์ง€ ๊ฐ’์„ ๋ณ„๋„๋กœ ๋ฌถ์–ด์„œ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค
    - rest ๋ฌธ๋ฒ•์€ spread์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ์—ฌ๋Ÿฌ๋ฒˆ ์ž‘์„ฑํ•  ์ˆ˜ ์—†๊ณ , ํ•ญ์ƒ ๋งจ ๋งˆ์ง€๋ง‰์— ์ž‘์„ฑํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜ํ•ด์„œ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค

  11. promise ๊ฐ์ฒด๋ž€?
    - js์—์„œ ํŠน์ • ์ž‘์—…์„ ๋น„๋™๊ธฐ๋กœ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด
    - ํ”„๋กœ๋ฏธ์Šค ๊ฐ์ฒด๋Š” ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ ์ธ์ˆ˜๋กœ excutor๋ผ๋Š” ์‹คํ–‰ ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๊ณ , ์‹คํ–‰ ํ•จ์ˆ˜์—๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ resolve์™€ reject๋ผ๋Š” ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•œ๋‹ค 
    - ํ”„๋กœ๋ฏธ์Šค ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋จ๊ณผ ๋™์‹œ์— excutor๊ฐ€ ์‹คํ–‰๋˜๊ณ , excutor์—์„œ ์›ํ•˜๋Š” ์ž‘์—…์ด ์ฒ˜๋ฆฌ๋œ๋‹ค
    - ํ”„๋กœ๋ฏธ์Šค ๊ฐ์ฒด์˜ excutor๋Š” ์ž‘์—… ์ฒ˜๋ฆฌ์˜ ์„ฑ๊ณ  ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์„ฑ๊ณตํ–ˆ์„ ๊ฒฝ์šฐ resolve, ์‹คํŒจํ–ˆ์„ ๊ฒฝ์šฐ reject๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค

  12. async & await๋ž€?
    1) async
    - "๋น„๋™๊ธฐ ์ž‘์—…์„ ์•ฝ์†(Promise)ํ•˜๋Š” ํ•จ์ˆ˜"๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ฐ„ํŒ ๊ฐ™์€ ์—ญํ• ์ž…๋‹ˆ๋‹ค.
    - ๊ฐ„ํŒ(async)์„ ๋ณด๋ฉด "์ด ํ•จ์ˆ˜๋Š” ๋‚˜์ค‘์— ๊ฒฐ๊ณผ๋ฅผ ์ค„ ๊ฑฐ์•ผ"๋ผ๊ณ  ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    - ํ•จ์ˆ˜์— async๋ฅผ ๋ถ™์ด๋ฉด ์ž๋™์œผ๋กœ Promise๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    - ๋น„๋™๊ธฐ ์ž‘์—…์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ๋ฏธ์Šค ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์— ์ž‘์„ฑํ•˜๋Š” ํ‚ค์›Œ๋“œ์ด๊ธฐ๋•Œ๋ฌธ์—, async๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ๋” ์ง๊ด€์ ์œผ๋กœ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋‹ค

    2) await
    - async ํ•จ์ˆ˜ ์•ˆ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ‚ค์›Œ๋“œ๋กœ, ๋น„๋™๊ธฐ ์ž‘์—…(Promise)์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    - await๋Š” ๋งˆ์น˜ ์‹๋‹น์—์„œ ์Œ์‹์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์†๋‹˜๊ณผ ๊ฐ™์€๋ฐ, ์†๋‹˜์€ ์Œ์‹์„ ๊ธฐ๋‹ค๋ฆฌ์ง€๋งŒ, ์Œ์‹์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๊ณผ ๋Œ€ํ™”๋ฅผ ํ•  ์ˆ˜๋„ ์žˆ์Œ(๋น„๋™๊ธฐ ์ž‘์—…)

  13. JSON์ด๋ž€?
    - ๋ฐ์ดํ„ฐ๋ฅผ ํ…์ŠคํŠธ ํ˜•์‹์œผ๋กœ ์ €์žฅํ•˜๊ณ  ๊ตํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€๋ณ๊ณ  ์ฝ๊ธฐ ์‰ฌ์šด ๋ฐ์ดํ„ฐ ํฌ๋งท
    - ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉ
    - JSON์€ JavaScript ๋ฌธ๋ฒ•์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์ง€๋งŒ, Python, Java, C++, PHP ๋“ฑ ๊ฑฐ์˜ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    - ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œํ˜„

  14. DOM์ด๋ž€?
    - ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” DOM์„ ํ†ตํ•ด ์›น ํŽ˜์ด์ง€ ์š”์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค
    - DOM์„ ์‚ฌ์šฉํ•˜๋ฉด HTML ๋ฌธ์„œ๋ฅผ ๋™์ ์œผ๋กœ ์ˆ˜์ •, ์ถ”๊ฐ€, ์‚ญ์ œํ•˜๊ณ  ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    - ์ฃผ์š” ๊ฐ์ฒด: document, Node, ์š”์†Œ ๋…ธ๋“œ ๋“ฑ
    - ์ฃผ์š” ๋ฉ”์„œ๋“œ: getElementById, querySelector, createElement, appendChild ๋“ฑ
    - DOM์€ ์›น ํŽ˜์ด์ง€๋ฅผ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ํ‘œํ˜„ํ•˜๋ฉฐ, JavaScript๋ฅผ ํ†ตํ•ด ๋™์ ์œผ๋กœ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค.

  15. ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€๋ž€?
    - ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ €์žฅ์†Œ์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ
    - ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ข…๋ฃŒํ•˜๋”๋ผ๋„ ๊ธฐ์กด์— ์›น ํŽ˜์ด์ง€ ๋‚ด์—์„œ ์ €์žฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์† ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค
    - ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€๋Š” ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋งŒ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด ํ˜น์€ ๋ฐฐ์—ด ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•˜๋ ค๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•œ๋‹ค
    - JSON ๊ฐ์ฒด์—๋Š” ํŠน์ • ๋ฌธ์ž์—ด์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” JSON.parse(), ํŠน์ • ๊ฐ์ฒด๋ฅผ JSON ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” JSON.stringify() ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค 
728x90
๋ฐ˜์‘ํ˜•
728x90
๋ฐ˜์‘ํ˜•
  1. jUnit : assertArray / asertThrows
  2. checkStyle : ์ฝ”๋”ฉ ์Šคํƒ€์ผ ์ •๋Ÿ‰
  3. Doxygen : ์˜์กด์„ฑ ๋ถ„์„(๋‹ค์ด์–ด๊ทธ๋žจ)

 

# 1. JUnit ํ•œ๋‹จ๊ณ„ ๋” ๋‚˜์•„๊ฐ€๊ธฐ

 

์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ๊ทธ ๋ฉ”์„ธ์ง€๋ฅผ exception์— ์ €์žฅํ•ด์„œ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ์—๋Ÿฌ ๋ฌธ์ž์™€ ์ผ์น˜ํ•˜๋Š”์ง€๊นŒ์ง€ ํ™•์ธํ•˜๊ธฐ!

@Test
	void testDivide() throws Exception {
//		assertEquals(0.5, calculator.divide(2.0, 4.0));
		assertThrows(Exception.class, () -> 
			calculator.divide(4, 0), "0 ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐœ์ƒ"
		);
		// calculator.divide(4, 0)์‹คํ–‰ ์‹œ, Exception ์—ฌ๋ถ€๋งŒ ํ™•์ธ
	}	
	
	// ์—ฌ๋ถ€๋งŒ ํ™•์ธํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ๋ฌธ์ž๊ฐ€ ๋‚˜์˜ค๋Š”์ง€ ํ™•์ธ
	@Test
	public void testDevide_exception() throws Exception {
		Exception exception = assertThrows(Exception.class, () -> 
		calculator.divide(4, 0), "0 ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐœ์ƒ"
		);
		
		assertEquals("Divide Error", exception.getMessage());
	}

 

์ •์  ๋ถ„์„ ์ฝ”๋“œ ๋Œ๋ฆฌ๊ธฐ  : SonarQube(java๋Š” ๋ฌด๋ฃŒ) - pmd, checkstyle

1. ๊ฐœ์ธ์ ์ธ ํด๋” ๋‚ด์—์„œ eclipse, Intellij์—์„œ ๋Œ๋ฆฌ๋ฉด SonarLint

2. git์— ํ†ต์ฒด๋กœ ์˜ฌ๋ ธ์„๋•Œ๋Š” SonarQube(์„œ๋ฒ„) ํšŒ์‚ฌ ์ „์ฒด ๋‚ด๋ถ€์˜ ์ฝ”๋“œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Œ 

3. Jenkins CI/CD์—์„œ buildํ• ๋•Œ SonarQube ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Œ

 

 

JUnit์€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๋„๊ตฌ์ด๊ณ  ์›น/์•ฑ์—์„œ๋Š” ๊ทธ๋ ‡๊ฒŒ ํ•„์ˆ˜์ ์ด์ง€๋Š” ์•Š๋‹ค!!  

 

 

 

# assertArray ์‚ฌ์šฉ!!

 

package com.calc;

import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;

import java.util.Arrays;

import org.junit.jupiter.api.Test;

class CalculatorTest_format {

	Calculator calculator = new Calculator();
	
	// assertEquals : ๊ฐœ๋ณ„ ์š”์†Œ ๊ฒ€์ฆ
	
	@Test
	void testParseInput_individualCheck() throws Exception {
		String[] result = calculator.parseInput("2 + 3");
		assertEquals("2", result[0]);
		assertEquals("+", result[1]);
		assertEquals("3", result[2]);
	}
	
	// assertEquals : List ๋กœ ๊ฒ€์ฆ
	@Test
	void testParseInput_listCheck() throws Exception {
		String[] result = calculator.parseInput("2 + 3");
		assertEquals(Arrays.asList("2", "+", "3"), Arrays.asList(result));
	}
	
	// assertEquals
	@Test
	void testParseInput_array() throws Exception {
		String[] result = calculator.parseInput("2 + 3");
		assertArrayEquals(new String[] {"2", "+", "3"}, result, "๋ฐฐ์—ด์ด ์˜ˆ์ƒ ๊ฐ’๊ณผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค");
	}
	
	// null, empty ์ฒ˜๋ฆฌ ์—ฌ๋ถ€ ํ™•์ธ
	@Test
	void testParseInput_nullAndEmpty() throws Exception {
		Exception nullException = 
				assertThrows(Exception.class, () -> 
						calculator.parseInput(null));
		assertEquals("null์€ ์ž…๋ ฅ ๋ถˆ๊ฐ€", nullException.getMessage());
	}
}

 

 

# checkStyle ์ ์šฉํ•˜๊ธฐ

marketplace์—์„œ ๋‹ค์šด

 

checkstyle ์„ค์ •

 

๋…ธ๋ž‘์ด๋Š” ์ฃผ์˜~~ ๋นจ๊ฐ•๋งŒ ์•„๋‹ˆ๋ฉด ๋œ๋‹ค~~

 


# doxygen (์˜์กด๊ด€๊ณ„ ํŒŒ์•… ๋ถ„์„ํ•˜๊ณ  ์‹œ๊ฐํ™”ํ•˜์ง€๋งŒ ๊ฐ„๋žตํ•จ)

 

์˜์กด์„ฑ ๋ถ„์„

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

https://www.doxygen.nl/download.html#google_vignette

 

Doxygen download

Download Doxygen Free and open source software

www.doxygen.nl

 

 

# graphvie(Doxygen์˜ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ์ข‹๊ฒŒ ์‹œ๊ฐํ™” ํ•˜๋Š” ๋„๊ตฌ, ์‚ฐ์ถœ๋ฌผ ์ œ์ถœ์— ์šฉ์ดํ•จ)

https://graphviz.org/download/

 

Download

Source Code Source code packages for the latest stable and development versions of Graphviz are available, along with instructions for anonymous access to the sources using Git. Executable Packages Packages marked with an asterisk(*) are provided by outsid

graphviz.org

 

 

 

Scan recursively : ์˜ต์…˜ ๋‹ค ๋ถ„์„!! ๋ฌด์กฐ๊ฑด ๋ˆŒ๋Ÿฌ!!

 

๋ชจ๋“  ์—”ํ‹ฐํ‹ฐ ์ง€์› / Java ์ง€์›

 

๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ” / ๊ฒ€์ƒ‰ ์ถ”๊ฐ€

 

๊ทธ๋ž˜๋น„์ธ ๋ฅผ ๋‹ค์šด ๋ฐ›์€ ์ด์œ  / ์–ด๋–ป๊ฒŒ ํ‘œ์‹œํ• ์ง€๋ฅผ ๋‚˜ํƒ€๋ƒ„

 

 

728x90
๋ฐ˜์‘ํ˜•
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
๋ฐ˜์‘ํ˜•
728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ ๐Ÿ˜ต‍๐Ÿ’ซ

https://school.programmers.co.kr/learn/courses/30/lessons/12909?language=java

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

 

๋‚ด ํ’€๐Ÿฆท

import java.util.*;

class Solution {
    boolean solution(String s) {
        Stack<String> str = new Stack<>();
        boolean answer = true;
        
        for(int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            
            if(c == '(') {
                str.push(String.valueOf(c));
            } else if(c ==')') {
                if(str.isEmpty()) {
                    answer = false;
                    break;
                }
                str.pop();
            }
        }
        
        if (!str.isEmpty()) {
            answer = false;
        }
        return answer;
    }
}

 

์ •๋ง์ •๋ง ์˜ค๋žœ๋งŒ์— ๊ด„ํ˜ธ ๊ฒ€์‚ฌ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค ใ…Žใ…Žใ…Ž

์ง„์งœ ๊ด„ํ˜ธ ๊ฒ€์‚ฌ ์ถ”์–ต์ด ๋งŽ์€ ๋ฌธ์ œ๋ผ ๋„ˆ๋ฌด ๊ธฐ์–ต๋‚˜๋Š”๋ฐ ํŒŒ์ด์ฌ ํ–ˆ๋˜์‹œ์ ˆ์ด๋ผ ์ž ์‹œ ํ ์นซํ–ˆ๋‹ค ใ…Žใ…Žใ…Žใ…Ž

๋‹น์—ฐํžˆ ์Šคํƒ ์จ์„œ ํ’€์–ด์•ผ ๊ฒ ๋‹ค ํ–ˆ๋Š”๋ฐ ๋‹ค๋ฅธ ์‚ฌ๋žŒ ํ’€์ด๊ฐ€ ์Šคํƒ๋„ ์“ฐ์ง€ ์•Š๊ณ  ์ •๋ง ๊ฐ„๋‹จํ•˜๊ฒŒ ์ผ๋˜ ํ’€์ด๊ฐ€ ์žˆ์–ด์„œ ํ•œ๋ฒˆ ๊ฐ€์ ธ์™€ ๋ดค๋‹ค...

 

// ๋‹ค๋ฅธ ์‚ฌ๋žŒ ํ’€์ด

class Solution {
    boolean solution(String s) {
        boolean answer = false;
        int count = 0;
        for(int i = 0; i<s.length();i++){
            if(s.charAt(i) == '('){
                count++;
            }
            if(s.charAt(i) == ')'){
                count--;
            }
            if(count < 0){
                break;
            }
        }
        if(count == 0){
            answer = true;
        }

        return answer;
    }
}

 

์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์„ ๊ฐœ๋…๋“ค โœ๏ธ

์ŠคํŠธ๋ง์œผ๋กœ ๋ณ€ํ™˜ : String.valueOf(๋ฐ”๊ฟ€ ๊ฐ’);

728x90
๋ฐ˜์‘ํ˜•
728x90
๋ฐ˜์‘ํ˜•

MariaDB ๋ณผ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” tool์ด ๋„ˆ๋ฌด ๋Š๋ ธ๋Š”๋ฐ์š”...

VS CODE์—์„œ ์—ฐ๋™ํ•ด์„œ ๋ณด๊ธฐ ์ข‹๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๋‹ค๋”๋ผ๊ตฌ์š”!!

์—„์ฒญ ์‰ฝ์Šต๋‹ˆ๋‹ค!!!!

 

 

- ์ผ๋‹จ Database Client๋ฅผ ๊น”์•„์ค๋‹ˆ๋‹ค!!

 

 

- ์™ผ์ชฝ๋ฐ”์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชจ์–‘์„ ๋ˆ„๋ฅด๊ณ  + ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์„œ  Server Type์„ ์„ ํƒํ•˜๊ณ  host, username, ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ๋งˆ์ง€๋ง‰ Connect๋ฅผ ๋ˆ„๋ฅด๋ฉด ์™„๋ฃŒ!!!

 

 

- ์‹คํ–‰์€ ํ•ด๋‹น ์ค„ [ Ctrl ] + [ L ]๋กœ ์„ ํƒํ•ด์„œ [ Ctrl ] + [ Enter ] ์„ ํƒํ•˜๋ฉด ์‹คํ–‰๋˜๋ฉด์„œ ํ…Œ์ด๋ธ”์ด ์ƒ๊น๋‹ˆ๋‹ค!!

UI๋„ ๋ณด๊ธฐ ํŽธํ•˜๊ณ  ๋นจ๋ผ์„œ ์™„์ „ ์ถ”์ฒœ๋“œ๋ ค์š”!

728x90
๋ฐ˜์‘ํ˜•

+ Recent posts