ํŒ€์˜ ์‚ฌ๊ธฐ๋ฅผ ์ €ํ•˜์‹œํ‚ค์ง€ ์•Š๊ณ  ๋ ˆ๊ฑฐ์‹œ ํ”„๋กœ์ ํŠธ์—์„œ ์ •์  ์ฝ”๋“œ ๋ถ„์„๊ธฐ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•

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

์†Œ๊ฐœ

์ตœ๊ทผ์— "๋ผ๋Š” ์ถœํŒ๋ฌผ์— ๊ด€์‹ฌ์„ ๋Œ์—ˆ์Šต๋‹ˆ๋‹ค.ํŒ€์— ๋ถ€๋‹ด์„ ์ฃผ์ง€ ์•Š๊ณ  ์ •์  ํ•ด์„ ์‹œ์ž‘ํ•˜๊ธฐ". ํ•œํŽธ์œผ๋กœ๋Š” ์•Œ์•„๊ฐˆ ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ์ข‹์€ ๊ธฐ์‚ฌ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ•œํŽธ์œผ๋กœ๋Š” ๋งŽ์€ ํ”„๋กœ์ ํŠธ์—์„œ ์ •์  ๋ถ„์„์„ ๊ณ ํ†ต ์—†์ด ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์™„์ „ํ•œ ๋‹ต๋ณ€์„ ์•„์ง ์ œ๊ณตํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ธฐ์‚ฌ์—๋Š” ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ๋ฐ›์•„๋“ค์ด๊ณ  ์ƒˆ ์ฝ”๋“œ์—์„œ๋งŒ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋‚˜์™€ ์žˆ์ง€๋งŒ ๋‚˜์ค‘์— ์ด ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๋‹ต์€ ์—†์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ PVS-Studio ํŒ€์€ ์ด ์ฃผ์ œ์— ๋Œ€ํ•œ ๊ฒฌํ•ด๋ฅผ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ •์  ์ฝ”๋“œ ๋ถ„์„๊ธฐ ๊ตฌํ˜„ ๋ฌธ์ œ๊ฐ€ ์• ์ดˆ์— ์–ด๋–ป๊ฒŒ ๋ฐœ์ƒํ•˜๋Š”์ง€, ์ด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ทน๋ณตํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ป๊ฒŒ ์ ์ง„์ ์œผ๋กœ ๊ธฐ์ˆ ์  ๋ถ€์ฑ„๋ฅผ ๊ณ ํ†ต ์—†์ด ํ•ด์†Œํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ

์ผ๋ฐ˜์ ์œผ๋กœ ์ •์  ๋ถ„์„๊ธฐ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์ž‘๋™ ๋ฐฉ์‹์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ต์ง€ ์•Š์Šต๋‹ˆ๋‹ค.1]. ์ฝ”๋“œ์—์„œ ํฅ๋ฏธ๋กœ์šด ์˜ค๋ฅ˜๋‚˜ ๋ฌด์„œ์šด ์ž ์žฌ์ ์ธ ์ทจ์•ฝ์ ์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ญ”๊ฐ€๋ฅผ ๊ณ ์น  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๊ทธ๋Ÿฌ๋ฉด ๋งŽ์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํฌ๊ธฐํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ์ •์  ๋ถ„์„๊ธฐ๋Š” ๊ฑฐ์ง“ ๊ธ์ •์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ •์  ์ฝ”๋“œ ๋ถ„์„ ๋ฐฉ๋ฒ•๋ก ์˜ ๊ธฐ๋Šฅ์ด๋ฉฐ ์ด์— ๋Œ€ํ•ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์€ ์—†์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ ์ด๋Š” ๋ผ์ด์Šค์˜ ์ •๋ฆฌ(Rice's theorem)๋กœ ํ™•์ธ๋œ ๋ฐ”์™€ ๊ฐ™์ด ํ’€ ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ์ด๋‹ค.2]. ๊ธฐ๊ณ„ ํ•™์Šต ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ [3]. ์‚ฌ๋žŒ์ด ์ด ์ฝ”๋“œ๋‚˜ ์ € ์ฝ”๋“œ๊ฐ€ ํ‹€๋ฆฐ์ง€ ํ•ญ์ƒ ์•Œ ์ˆ˜ ์—†๋”๋ผ๋„ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ด๊ฒƒ์„ ๊ธฐ ๋Œ€ํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค :).

์ •์  ๋ถ„์„๊ธฐ๊ฐ€ ์ด๋ฏธ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉด ๊ฑฐ์ง“ ๊ธ์ •์€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ๊ด€๋ จ ์—†๋Š” ๊ทœ์น™ ์„ธํŠธ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ผ๋ถ€ ๊ด€๋ จ ์—†๋Š” ์ง„๋‹จ์ด ๋น„ํ™œ์„ฑํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • C ๋˜๋Š” C++์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒฝ์šฐ ๋งคํฌ๋กœ๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“  ์œ„์น˜์— ์“ธ๋ชจ์—†๋Š” ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋˜๋„๋ก ํ•˜๋Š” ํŠน์ • ๊ตฌ์„ฑ์„ ํฌํ•จํ•˜๋Š” ๋งคํฌ๋กœ๊ฐ€ ๋งˆํฌ์—…๋ฉ๋‹ˆ๋‹ค.
  • ์‹œ์Šคํ…œ ๊ธฐ๋Šฅ๊ณผ ์œ ์‚ฌํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž์ฒด ๊ธฐ๋Šฅ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค(์ž์ฒด ์•„๋‚ ๋กœ๊ทธ ๋ฐˆํ”ผ ๋˜๋Š” printf)4];
  • ์ฃผ์„์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฑฐ์ง“์–‘์„ฑ์„ ํŠน๋ณ„ํžˆ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋“ฑ๋“ฑ.

์ด ๊ฒฝ์šฐ ์•ฝ 10~15%์˜ ๋‚ฎ์€ ์˜คํƒ๋ฅ ์„ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.5]. ์ฆ‰, ๋ถ„์„๊ธฐ ๊ฒฝ๊ณ  9๊ฐœ ์ค‘ 10๊ฐœ๋Š” ์ฝ”๋“œ์˜ ์‹ค์ œ ๋ฌธ์ œ ๋˜๋Š” ์ ์–ด๋„ "๋ƒ„์ƒˆ๊ฐ€ ๊ฐ•ํ•œ ์ฝ”๋“œ"๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋™์˜ํ•˜์„ธ์š”. ์ด ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ๋งค์šฐ ์ฆ๊ฒ๊ณ  ๋ถ„์„๊ธฐ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์ง„์ •ํ•œ ์นœ๊ตฌ์ž…๋‹ˆ๋‹ค.

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

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

๋ฌผ๋ก  ์‚ฌ์†Œํ•œ ์‹ค์ˆ˜๋ผ๋„ ์—ฌ์ „ํžˆ ์‹ค์ˆ˜์ž…๋‹ˆ๋‹ค. ๋•Œ๋กœ๋Š” ์‹ค์ˆ˜๋กœ ์ธํ•ด ์‹ค์ œ ์ทจ์•ฝ์ ์ด ์ˆจ๊ฒจ์งˆ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ๊ฒƒ์„ ํฌ๊ธฐํ•˜๊ณ  ๊ฑฐ์˜ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋Š” ๊ฒฐํ•จ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ๋ฉฐ์น  ๋˜๋Š” ๋ช‡ ์ฃผ๋ฅผ ์†Œ๋น„ํ•˜๋Š” ๊ฒƒ์€ ๋ชจํ˜ธํ•œ ์ƒ๊ฐ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์ด์ „ ์ž‘์—… ์ฝ”๋“œ์— ๋Œ€ํ•œ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๊ฒฝ๊ณ ๋ฅผ ๋ณด๊ณ , ๋ณด๊ณ , ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋“ค์€ ์ •์  ๋ถ„์„ ์—†์ด๋„ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กญ๊ณ  ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์„ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‚˜๋ฆ„๋Œ€๋กœ ๊ทธ๋“ค์€ ์˜ณ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋จผ์ € ์ด ๋ชจ๋“  ๊ฒฝ๊ณ ๋ฅผ ์–ด๋–ป๊ฒŒ๋“  ์ œ๊ฑฐํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์•ผ๋งŒ ์ฝ”๋“œ ๋ถ„์„๊ธฐ๋ฅผ ์ •๊ธฐ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ƒˆ๋กœ์šด ๊ฒฝ๊ณ ๊ฐ€ ๊ธฐ์กด ๊ฒฝ๊ณ ์— ๋ฌปํ˜€๋ฒ„๋ฆฌ๊ณ  ์•„๋ฌด๋„ ์ด์— ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ด์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋Š” ์ปดํŒŒ์ผ๋Ÿฌ ๊ฒฝ๊ณ ์™€ ๋™์ผํ•œ ๋น„์œ ์ž…๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ ๊ฒฝ๊ณ  ์ˆ˜๋ฅผ 0์œผ๋กœ ์œ ์ง€ํ•˜๋„๋ก ๊ถŒ์žฅํ•˜๋Š” ๊ฒƒ์€ ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ฒฝ๊ณ ๊ฐ€ 1000๊ฐœ์ด๊ณ  1001๊ฐœ๊ฐ€ ์žˆ์œผ๋ฉด ์•„๋ฌด๋„ ์ด์— ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ด์ง€ ์•Š์„ ๊ฒƒ์ด๋ฉฐ ์ด ์ตœ์‹  ๊ฒฝ๊ณ ๋ฅผ ์–ด๋””์—์„œ ์ฐพ์•„์•ผ ํ• ์ง€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํŒ€์˜ ์‚ฌ๊ธฐ๋ฅผ ์ €ํ•˜์‹œํ‚ค์ง€ ์•Š๊ณ  ๋ ˆ๊ฑฐ์‹œ ํ”„๋กœ์ ํŠธ์—์„œ ์ •์  ์ฝ”๋“œ ๋ถ„์„๊ธฐ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•
์ด ์ด์•ผ๊ธฐ์—์„œ ์ตœ์•…์˜ ์ƒํ™ฉ์€ ์ง€๊ธˆ ์œ„์—์„œ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ •์  ์ฝ”๋“œ ๋ถ„์„์„ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ•์š”ํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ํŒ€์˜ ์˜์š•์„ ๋–จ์–ด๋œจ๋ฆด ๋ฟ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ํŒ€์˜ ๊ด€์ ์—์„œ๋Š” ๋ฐฉํ•ด๊ฐ€ ๋˜๋Š” ์ถ”๊ฐ€์ ์ธ ๊ด€๋ฃŒ์  ๋ณต์žก์„ฑ์ด ์žˆ์„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ๋„ ๋ถ„์„๊ธฐ์˜ ๋ณด๊ณ ์„œ๋ฅผ ๋ณด์ง€ ์•Š์œผ๋ฉฐ ๋ชจ๋“  ์‚ฌ์šฉ์€ "์ข…์ด"๋กœ๋งŒ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ์ €๊ฒƒ๋“ค. ๊ณต์‹์ ์œผ๋กœ ๋ถ„์„์€ DevOps ํ”„๋กœ์„ธ์Šค์— ๋‚ด์žฅ๋˜์–ด ์žˆ์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๋ˆ„๊ตฌ์—๊ฒŒ๋„ ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ถ€์Šค์—์„œ ์ปจํผ๋Ÿฐ์Šค ์ฐธ์„์ž๋“ค์˜ ์ž์„ธํ•œ ์ด์•ผ๊ธฐ๋ฅผ ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ๊ฒฝํ—˜์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์˜์›ํžˆ๋Š” ์•„๋‹ˆ๋”๋ผ๋„ ์˜ค๋žซ๋™์•ˆ ์ •์  ๋ถ„์„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์ˆ  ๋ถ€์ฑ„ ๊ตฌํ˜„ ๋ฐ ์ œ๊ฑฐ

์‚ฌ์‹ค, ์˜ค๋ž˜๋œ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—๋„ ์ •์  ๋ถ„์„์„ ๋„์ž…ํ•˜๋Š” ๋ฐ์—๋Š” ์–ด๋ ต๊ฑฐ๋‚˜ ๋‘๋ ค์šด ๊ฒƒ์ด ์—†์Šต๋‹ˆ๋‹ค.

CI / CD

๋˜ํ•œ ๋ถ„์„๊ธฐ๋Š” ์ง€์†์ ์ธ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์˜ ์ผ๋ถ€๋กœ ์ฆ‰์‹œ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, PVS-Studio ๋ฐฐํฌํŒ์—๋Š” ํ•„์š”ํ•œ ํ˜•์‹์œผ๋กœ ๋ณด๊ณ ์„œ๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ์™€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์ฝ”๋“œ ์„น์…˜์„ ์ž‘์„ฑํ•œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋ณด๋‚ด๋Š” ์•Œ๋ฆผ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. CI/CD ์‹œ์Šคํ…œ์—์„œ PVS-Studio๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ๋” ๊ด€์‹ฌ์ด ์žˆ๋Š” ๋ถ„๋“ค์€ ํ•ด๋‹น ๋‚ด์šฉ์„ ์ˆ™์ง€ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋ถ€๋ถ„ ๋ฌธ์„œ ๋ฐ ์ผ๋ จ์˜ ๊ธฐ์‚ฌ:

ํ•˜์ง€๋งŒ ์ฝ”๋“œ ๋ถ„์„ ๋„๊ตฌ ๊ตฌํ˜„์˜ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋‹ค์ˆ˜์˜ ์˜คํƒ ๋ฌธ์ œ๋กœ ๋Œ์•„๊ฐ€ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด ๊ธฐ์ˆ  ๋ถ€์ฑ„ ํ•ด๊ฒฐ ๋ฐ ์ƒˆ๋กœ์šด ๊ฒฝ๊ณ  ์ฒ˜๋ฆฌ

์ตœ์‹  ์ƒ์šฉ ์ •์  ๋ถ„์„๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ƒˆ ์ฝ”๋“œ ๋˜๋Š” ๋ณ€๊ฒฝ๋œ ์ฝ”๋“œ์— ๋‚˜ํƒ€๋‚˜๋Š” ์ƒˆ๋กœ์šด ๊ฒฝ๊ณ ๋งŒ ์—ฐ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ ๊ตฌํ˜„์€ ๋‹ค์–‘ํ•˜์ง€๋งŒ ๋ณธ์งˆ์€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. PVS-Studio ์ •์  ๋ถ„์„๊ธฐ์—์„œ๋Š” ์ด ๊ธฐ๋Šฅ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.

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

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

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

๋”ฐ๋ผ์„œ ๋Œ€๊ทœ๋ชจ ์˜ค๋ž˜๋œ ํ”„๋กœ์ ํŠธ์—์„œ ๋ถ„์„๊ธฐ ๊ตฌํ˜„๊ณผ ๊ด€๋ จ๋œ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๊ธฐ์ˆ  ๋ถ€์ฑ„๋กœ ๋ฌด์—‡์„ ํ•ด์•ผํ• ์ง€ ์•Œ์•„ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฒ„๊ทธ ์ˆ˜์ • ๋ฐ ๋ฆฌํŒฉํ† ๋ง

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

if (a = b)

๋Œ€๋ถ€๋ถ„์˜ C++ ์ปดํŒŒ์ผ๋Ÿฌ์™€ ๋ถ„์„๊ธฐ๋Š” ์‹ค์ œ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹ถ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋Ÿฌํ•œ ์ฝ”๋“œ์— ๋Œ€ํ•ด ๋ถˆํ‰ํ•ฉ๋‹ˆ๋‹ค. (a == b). ๊ทธ๋Ÿฌ๋‚˜ ๋ฌด์–ธ์˜ ํ•ฉ์˜๊ฐ€ ์žˆ์œผ๋ฉฐ ์ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฌธ์„œ์— ์–ธ๊ธ‰๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ๊ด„ํ˜ธ๊ฐ€ ์žˆ์œผ๋ฉด ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์˜๋„์ ์œผ๋กœ ๊ทธ๋Ÿฌํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜๋ฏ€๋กœ ๋งน์„ธํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ง„๋‹จ์„ ์œ„ํ•œ PVS-Studio ๋ฌธ์„œ์—์„œ V559 (CWE-481) ๋‹ค์Œ ์ค„์€ ์ •ํ™•ํ•˜๊ณ  ์•ˆ์ „ํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋œ๋‹ค๋Š” ๊ฒƒ์ด ๋ช…ํ™•ํ•˜๊ฒŒ ๊ธฐ๋ก๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

if ((a = b))

๋‹ค๋ฅธ ์˜ˆ์‹œ. ์ด C++ ์ฝ”๋“œ์—์„œ ์žŠ์–ด๋ฒ„๋ ธ๋‚˜์š”? ํ•˜๋‹ค ์•ˆ ๊ทธ๋ž˜?

case A:
  foo();
case B:
  bar();
  break;

PVS-Studio ๋ถ„์„๊ธฐ๋Š” ์—ฌ๊ธฐ์„œ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. V796 (CWE-484). ์ด๋Š” ์˜ค๋ฅ˜๊ฐ€ ์•„๋‹ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ตฌ๋ฌธ ๋ถ„์„๊ธฐ์— ํžŒํŠธ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. [[์‹คํŒจ๋กœ ๋๋‚˜๋‹ค]] ๋˜๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด __์†์„ฑ__((ํด์Šค๋ฃจ)):

case A:
  foo();
  [[fallthrough]];
case B:
  bar();
  break;

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

๋ฒ„๊ทธ ์ˆ˜์ • ๋ฐ ๋ฆฌํŒฉํ† ๋ง ์™ธ์—๋„ ๋ช…๋ฐฑํžˆ ์ž˜๋ชป๋œ ๋ถ„์„๊ธฐ ๊ฒฝ๊ณ ๋ฅผ ๊ตฌ์ฒด์ ์œผ๋กœ ์–ต์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ๊ด€๋ จ ์—†๋Š” ์ง„๋‹จ์€ ๋น„ํ™œ์„ฑํ™”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฒฝ๊ณ ๊ฐ€ ๋ฌด์˜๋ฏธํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. V550 float/double ๊ฐ’ ๋น„๊ต์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์„ธ์š”. ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ์‚ฌ๋žŒ๋“ค์€ ๊ทธ๊ฒƒ๋“ค์„ ์ค‘์š”ํ•˜๊ณ  ์—ฐ๊ตฌํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ถ„๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค.7]. ์–ด๋–ค ๊ฒฝ๊ณ ๊ฐ€ ๊ด€๋ จ์„ฑ์ด ์žˆ๋‹ค๊ณ  ๊ฐ„์ฃผ๋˜๊ณ  ์–ด๋–ค ๊ฒฝ๊ณ ๊ฐ€ ๊ทธ๋ ‡์ง€ ์•Š์€์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์€ ๊ฐœ๋ฐœ ํŒ€์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋˜ํ•œ, ์–ด๋ ค์›€์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ํ•ญ์ƒ ๊ณ ๊ฐ์ด PVS-Studio๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋˜ํ•œ, ํ—ˆ์œ„ ๊ฒฝ๊ณ ๋ฅผ ์ž์ฒด์ ์œผ๋กœ ์‚ญ์ œํ•˜๊ณ  ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•œ ์‚ฌ๋ก€๋„ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.8]. ๋งŒ์ผ์„ ๋Œ€๋น„ํ•ด, ํ™•์žฅ๋œ ํ˜‘๋ ฅ์„ ์œ„ํ•œ ์ด ์˜ต์…˜๋„ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์„ ์–ธ๊ธ‰ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. :).

๋ž˜์นซ ๋ฐฉ์‹

์ •์  ๋ถ„์„๊ธฐ ๊ฒฝ๊ณ ๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ์ ์ง„์ ์œผ๋กœ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋˜ ๋‹ค๋ฅธ ํฅ๋ฏธ๋กœ์šด ์ ‘๊ทผ ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๋ก ์€ ๊ฒฝ๊ณ  ํšŸ์ˆ˜๊ฐ€ ์ค„์–ด๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŒ€์˜ ์‚ฌ๊ธฐ๋ฅผ ์ €ํ•˜์‹œํ‚ค์ง€ ์•Š๊ณ  ๋ ˆ๊ฑฐ์‹œ ํ”„๋กœ์ ํŠธ์—์„œ ์ •์  ์ฝ”๋“œ ๋ถ„์„๊ธฐ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•

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

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

์ด ๋ฐฉ๋ฒ•๋ก ์€ Ivan Ponomarev์˜ ๋งค์šฐ ํฅ๋ฏธ๋กœ์šด ๊ธฐ์‚ฌ์— ์ž์„ธํžˆ ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.๋ฒ„๊ทธ๋ฅผ ์ฐพ๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ํ”„๋กœ์„ธ์Šค์— ์ •์  ๋ถ„์„์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.", ์ฝ”๋“œ ํ’ˆ์งˆ ํ–ฅ์ƒ์— ๊ด€์‹ฌ์ด ์žˆ๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ์ฝ์–ด๋ณผ ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์‚ฌ์˜ ์ €์ž๋„ ์ด ์ฃผ์ œ์— ๋Œ€ํ•œ ๋ณด๊ณ ์„œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค: "์ง€์†์ ์ธ ์ •์  ๋ถ„์„".

๊ฒฐ๋ก 

์ด ๊ธฐ์‚ฌ๋ฅผ ์ฝ๊ณ  ๋‚˜๋ฉด ๋…์ž๋“ค์ด ์ •์  ๋ถ„์„ ๋„๊ตฌ๋ฅผ ๋” ๋งŽ์ด ๋ฐ›์•„๋“ค์ด๊ณ  ์ด๋ฅผ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์— ๊ตฌํ˜„ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๊ฒŒ ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ถ๊ธˆํ•œ ์ ์ด ์žˆ์œผ์‹œ๋ฉด ์–ธ์ œ๋“ ์ง€ ์ค€๋น„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ถŒํ•˜๋‹ค ์ •์  ๋ถ„์„๊ธฐ PVS-Studio ์‚ฌ์šฉ์ž ๋ฐ ๊ตฌํ˜„์— ๋„์›€์„ ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ •์  ๋ถ„์„์ด ์‹ค์ œ๋กœ ํŽธ๋ฆฌํ•˜๊ณ  ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ์ผ๋ฐ˜์ ์ธ ์˜๊ตฌ์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” "PVS-Studio ์ •์  ์ฝ”๋“œ ๋ถ„์„๊ธฐ๋ฅผ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์— ๋„์ž…ํ•˜๋Š” ์ด์œ "๋ผ๋Š” ์ถœํŒ๋ฌผ์—์„œ ์ด๋Ÿฌํ•œ ์˜์‹ฌ์˜ ๋Œ€๋ถ€๋ถ„์„ ์—†์• ๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค.9].

๋งŽ์€ ๊ด€์‹ฌ๊ณผ ๋ฐฉ๋ฌธ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค ๋‹ค์šด๋กœ๋“œ PVS-Studio ๋ถ„์„๊ธฐ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์„ธ์š”.

์ถ”๊ฐ€ ๋งํฌ

  1. ์•ˆ๋“œ๋ ˆ์ด ์นด๋ฅดํฌํ”„. PVS-Studio ๋ถ„์„๊ธฐ๊ฐ€ C ๋ฐ C++ ์ฝ”๋“œ์— ๋Œ€ํ•ด ์ƒ์„ฑํ•˜๋Š” ํฅ๋ฏธ๋กœ์šด ๊ฒฝ๊ณ ๋ฅผ ์–ด๋–ป๊ฒŒ ๋นจ๋ฆฌ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
  2. ์œ„ํ‚ค ๋ฐฑ๊ณผ (Wikipedia). ๋ผ์ด์Šค์˜ ์ •๋ฆฌ.
  3. ์•ˆ๋“œ๋ ˆ์ด ์นด๋ฅดํฌํ”„, ๋น…ํ† ๋ฆฌ์•„ ์นด๋‹ˆ์—๋ฐ”. ํ”„๋กœ๊ทธ๋žจ ์†Œ์Šค ์ฝ”๋“œ์˜ ์ •์  ๋ถ„์„์— ๊ธฐ๊ณ„ ํ•™์Šต ์‚ฌ์šฉ.
  4. PVS-์ŠคํŠœ๋””์˜ค. ์„ ์  ์„œ๋ฅ˜ ๋น„์น˜. ์ถ”๊ฐ€ ์ง„๋‹จ ์„ค์ •.
  5. ์•ˆ๋“œ๋ ˆ์ด ์นด๋ฅดํฌํ”„. EFL ํ•ต์‹ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์˜ˆ๋ฅผ ์‚ฌ์šฉํ•œ PVS-Studio ๋ถ„์„๊ธฐ์˜ ํŠน์„ฑ, 10-15% ์˜คํƒ๋ฅ .
  6. PVS-์ŠคํŠœ๋””์˜ค. ์„ ์  ์„œ๋ฅ˜ ๋น„์น˜. ๋ถ„์„๊ธฐ ๋ฉ”์‹œ์ง€์˜ ๋Œ€๋Ÿ‰ ์–ต์ œ.
  7. ์ด๋ฐ˜ ์•ˆ๋“œ๋ฆฌ์•„์‹ . X์„  ํ˜ˆ๊ด€๋‚ด ์ˆ˜์ˆ  ๊ต์œก์šฉ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ํ”„๋กœ์ ํŠธ์—์„œ ์ •์  ๋ถ„์„์„ ํ…Œ์ŠคํŠธํ•œ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด.
  8. Pavel Eremeev, Svyatoslav Razmyslov. PVS-Studio ํŒ€์ด Unreal Engine ์ฝ”๋“œ๋ฅผ ๊ฐœ์„ ํ•œ ๋ฐฉ๋ฒ•.
  9. ์•ˆ๋“œ๋ ˆ์ด ์นด๋ฅดํฌํ”„. ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์— ์ •์  ์ฝ”๋“œ ๋ถ„์„๊ธฐ PVS-Studio๋ฅผ ๋„์ž…ํ•˜๋Š” ์ด์œ .

ํŒ€์˜ ์‚ฌ๊ธฐ๋ฅผ ์ €ํ•˜์‹œํ‚ค์ง€ ์•Š๊ณ  ๋ ˆ๊ฑฐ์‹œ ํ”„๋กœ์ ํŠธ์—์„œ ์ •์  ์ฝ”๋“œ ๋ถ„์„๊ธฐ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•

์ด ๊ธฐ์‚ฌ๋ฅผ ์˜์–ด๊ถŒ ์ฒญ์ค‘๊ณผ ๊ณต์œ ํ•˜๋ ค๋ฉด ๋ฒˆ์—ญ ๋งํฌ์ธ Andrey Karpov๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ๋ ˆ๊ฑฐ์‹œ ํ”„๋กœ์ ํŠธ์— ์ •์  ์ฝ”๋“œ ๋ถ„์„๊ธฐ๋ฅผ ๋„์ž…ํ•˜๊ณ  ํŒ€์„ ๋‚™๋‹ด์‹œํ‚ค์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€