์ •์  ๋ถ„์„ - ๋„์ž…๋ถ€ํ„ฐ ํ†ตํ•ฉ๊นŒ์ง€

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

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

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

์ •์  ๋ถ„์„์ด ๋ฌด์—‡์ธ์ง€, ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š”์ง€ ํ™•์‹คํžˆ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด, ์ด ๊ธฐ์‚ฌ๋ฅผ ์ฝ์–ด๋ณด์„ธ์š”์ด ๋ฐฉ๋ฒ•๋ก ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์„ธ์š”.

์ •์  ๋ถ„์„์ด ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ ๊ฐ€์†๊ณผ ๋‹จ์ˆœํ™”์ž…๋‹ˆ๋‹ค.

์ •์  ๋ถ„์„์„ ์‚ฌ์šฉํ•˜๋ฉด ์–ธ์–ด ๊ตฌ์„ฑ์˜ ์ž˜๋ชป๋œ ์‚ฌ์šฉ๋ถ€ํ„ฐ ์˜คํƒ€๊นŒ์ง€ ์ฝ”๋“œ์—์„œ ๋‹ค์–‘ํ•œ ๋ฌธ์ œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋Œ€์‹ 

auto x = obj.x;
auto y = obj.y;
auto z = obj.z;

๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

auto x = obj.x;
auto y = obj.y;
auto z = obj.x;

๋ณด์‹œ๋‹ค์‹œํ”ผ ๋งˆ์ง€๋ง‰ ์ค„์— ์˜คํƒ€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด PVS-Studio๋Š” ๋‹ค์Œ ๊ฒฝ๊ณ ๋ฅผ ๋ฐœํ–‰ํ•ฉ๋‹ˆ๋‹ค.

V537 'y' ํ•ญ๋ชฉ์˜ ์‚ฌ์šฉ๋ฒ•์ด ์˜ฌ๋ฐ”๋ฅธ์ง€ ๊ฒ€ํ† ํ•ด ๋ณด์„ธ์š”.

์ด ์˜ค๋ฅ˜๋ฅผ ์ง์ ‘ ํ™•์ธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ ํƒ์ƒ‰๊ธฐ์—์„œ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ง„ ์˜ˆ์ œ๋ฅผ ์‹œ๋„ํ•ด ๋ณด์„ธ์š”. *ํด๋ฆญ*.

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

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

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

๊ธฐ์‚ฌ์—์„œ ๋ถ„์„๊ธฐ๊ฐ€ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ๋” ํฅ๋ฏธ๋กœ์šด ์˜ค๋ฅ˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

0. ๋„๊ตฌ ์•Œ์•„๋ณด๊ธฐ

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

์ด ๋‹จ๊ณ„์—์„œ ๋ฐฐ์šธ ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋ถ„์„๊ธฐ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
  • ๋ถ„์„๊ธฐ๊ฐ€ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ํ˜ธํ™˜๋ฉ๋‹ˆ๊นŒ?
  • ํ˜„์žฌ ๊ท€ํ•˜์˜ ํ”„๋กœ์ ํŠธ์—๋Š” ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ์„ค์น˜ํ•œ ํ›„ ๊ฐ€์žฅ ๋จผ์ € ํ•ด์•ผ ํ•  ์ผ์€ ์ „์ฒด ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๋ถ„์„์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(Windows, Linux, macOS). Visual Studio์˜ PVS-Studio์˜ ๊ฒฝ์šฐ ๋น„์Šทํ•œ ๊ทธ๋ฆผ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค(ํด๋ฆญ ๊ฐ€๋Šฅ).

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

์ •์  ๋ถ„์„ - ๋„์ž…๋ถ€ํ„ฐ ํ†ตํ•ฉ๊นŒ์ง€
์‹ค์ œ๋กœ ์ˆ˜์ฒœ ๊ฐœ์˜ ๊ฒฝ๊ณ ๋ณด๋‹ค 178๊ฐœ์˜ ๊ฒฝ๊ณ ๋ฅผ ๋ณด๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ์‰ฝ์Šต๋‹ˆ๋‹ค.

ํƒญ์—์„œ ์ค‘๊ธ‰ ะธ ๋‚ฎ์€ ์ข‹์€ ๊ฒฝ๊ณ ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋ฒ”์ฃผ์—๋Š” ์ •ํ™•๋„(์‹ ๋ขฐ๋„)๊ฐ€ ๋‚ฎ์€ ์ง„๋‹จ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. Windows ์ž‘์—… ์‹œ ๊ฒฝ๊ณ  ์ˆ˜์ค€ ๋ฐ ์˜ต์…˜์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. *ํด๋ฆญ*.

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

1. ์ž๋™ํ™”

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

์ด ๋‹จ๊ณ„์—์„œ ๋ฐฐ์šธ ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋„๊ตฌ๋Š” ์–ด๋–ค ์ž๋™ํ™” ์˜ต์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๊นŒ?
  • ๋ถ„์„๊ธฐ๊ฐ€ ๊ท€ํ•˜์˜ ์กฐ๋ฆฝ ์‹œ์Šคํ…œ๊ณผ ํ˜ธํ™˜๋ฉ๋‹ˆ๊นŒ?

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

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

๋ถ„์„์„ CI์— ํ†ตํ•ฉํ•˜๋ ค๋ฉด ๋‹ค์Œ ์„ธ ๊ฐ€์ง€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ถ„์„๊ธฐ๋ฅผ ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค.
  • ๋ถ„์„์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Linux(Debian ๊ธฐ๋ฐ˜)์— PVS-Studio๋ฅผ ์„ค์น˜ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

wget -q -O - https://files.viva64.com/etc/pubkey.txt 
    | sudo apt-key add -
sudo wget -O /etc/apt/sources.list.d/viva64.list 
  https://files.viva64.com/etc/viva64.list
  
sudo apt-get update -qq
sudo apt-get install -qq pvs-studio

Windows๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์‹œ์Šคํ…œ์—์„œ๋Š” ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์—์„œ ๋ถ„์„๊ธฐ๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์—†์ง€๋งŒ ๋ช…๋ น์ค„์—์„œ ๋ถ„์„๊ธฐ๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

PVS-Studio_setup.exe /verysilent /suppressmsgboxes 
/norestart /nocloseapplications

Windows*๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์‹œ์Šคํ…œ์— PVS-Studio๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์—ฌ๊ธฐ์—*.

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

์‹œ์ž‘ ๋ฐฉ๋ฒ•์€ ํ”Œ๋žซํผ๊ณผ ํ”„๋กœ์ ํŠธ ๊ธฐ๋Šฅ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋ฏ€๋กœ C++(Linux)์— ๋Œ€ํ•œ ์˜ต์…˜์„ ์˜ˆ๋กœ ํ‘œ์‹œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

pvs-studio-analyzer analyze -j8 
                            -o PVS-Studio.log
plog-converter -t errorfile PVS-Studio.log --cerr -w

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

์žˆ์Šต๋‹ˆ๋‹ค. ํ…์ŠคํŠธ ํ˜•์‹์ด ๋ถˆํŽธํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ์˜ˆ์‹œ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์ข€ ๋” ํฅ๋ฏธ๋กœ์šด ๋ณด๊ณ ์„œ ํ˜•์‹์ธ FullHtml์— ์ฃผ๋ชฉํ•˜์„ธ์š”. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ๋ฅผ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"์—์„œ CI ๋ถ„์„ ์„ค์ •์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.PVS-Studio ๋ฐ ์ง€์†์ ์ธ ํ†ตํ•ฉ"(Windows) ๋˜๋Š” "Travis CI์—์„œ PVS-Studio๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•"(๋ฆฌ๋ˆ…์Šค).

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

์ผ๋ฐ˜์ ์œผ๋กœ ํ’€ ์š”์ฒญ ๋ถ„์„์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ์ผ๋ฐ˜์ ์ธ CI ๋ถ„์„ ์‹œ์ž‘๊ณผ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ ๋ชฉ๋ก์„ ๊ฐ€์ ธ์™€์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ git์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ธŒ๋žœ์น˜ ๊ฐ„์˜ ์ฐจ์ด์ ์„ ์ฟผ๋ฆฌํ•˜์—ฌ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list

์ด์ œ ์ด ํŒŒ์ผ ๋ชฉ๋ก์„ ๋ถ„์„๊ธฐ์— ์ž…๋ ฅ์œผ๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด PVS-Studio์—์„œ๋Š” ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. -S:

pvs-studio-analyzer analyze -j8 
                            -o PVS-Studio.log 
                            -S .pvs-pr.list

ํ’€ ์š”์ฒญ ๋ถ„์„์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค *์—ฌ๊ธฐ์—*. ๊ท€ํ•˜์˜ CI๊ฐ€ ๊ธฐ์‚ฌ์— ์–ธ๊ธ‰๋œ ์„œ๋น„์Šค ๋ชฉ๋ก์— ์—†๋”๋ผ๋„ ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ๋ถ„์„ ์ด๋ก ์„ ๋‹ค๋ฃจ๋Š” ์ผ๋ฐ˜ ์„น์…˜์ด ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ’€ ์š”์ฒญ ๋ถ„์„์„ ์„ค์ •ํ•˜๋ฉด ๊ฒฝ๊ณ ๊ฐ€ ํฌํ•จ๋œ ์ปค๋ฐ‹์„ ์ฐจ๋‹จํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋˜์ง€ ์•Š์€ ์ฝ”๋“œ๊ฐ€ ๋„˜์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ๊ณ„๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ™•์‹คํžˆ ๋‹ค ์ข‹์€๋ฐ, ๋ชจ๋“  ๊ฒฝ๊ณ ๋ฅผ ํ•œ ๊ณณ์—์„œ ๋ณผ ์ˆ˜ ์žˆ์—ˆ์œผ๋ฉด ์ข‹๊ฒ ์–ด์š”. ์ •์  ๋ถ„์„๊ธฐ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋‚˜ ๋™์  ๋ถ„์„๊ธฐ์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค์™€ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด PVS-Studio์—๋Š” SonarQube์— ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ.

2. ๊ฐœ๋ฐœ์ž ์ปดํ“จํ„ฐ์— ํ†ตํ•ฉ

์ด์ œ ์ผ์ƒ์ ์ธ ๊ฐœ๋ฐœ ์‚ฌ์šฉ์„ ์œ„ํ•ด ๋ถ„์„๊ธฐ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๊ตฌ์„ฑํ•  ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค. ์ด ์‹œ์ ์—์„œ๋Š” ์ด๋ฏธ ๋Œ€๋ถ€๋ถ„์˜ ์ž‘์—… ๋ฐฉ์‹์— ์ต์ˆ™ํ•ด์กŒ์œผ๋ฏ€๋กœ ์ด๊ฒƒ์ด ๊ฐ€์žฅ ์‰ฌ์šด ๋ถ€๋ถ„์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์˜ต์…˜์œผ๋กœ ๊ฐœ๋ฐœ์ž๋Š” ํ•„์š”ํ•œ ๋ถ„์„๊ธฐ๋ฅผ ์ง์ ‘ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ์ž‘์—…์€ ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฌ๊ณ  ๊ฐœ๋ฐœ์— ๋ฐฉํ•ด๊ฐ€ ๋˜๋ฏ€๋กœ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ๊ณผ ํ•„์š”ํ•œ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PVS-Studio์—๋Š” ๋‹ค์–‘ํ•œ ์ž๋™ ์„ค์น˜๋ฅผ ์œ„ํ•œ ํ”Œ๋ž˜๊ทธ. ๊ทธ๋Ÿฌ๋‚˜ Chocolatey(Windows), Homebrew(macOS) ๋˜๋Š” Linux์šฉ ์ˆ˜์‹ญ ๊ฐ€์ง€ ์˜ต์…˜๊ณผ ๊ฐ™์€ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋Š” ํ•ญ์ƒ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ํ•„์š”ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค, IDEA, ํƒ€๋Š” ์‚ฌ๋žŒ ๋“ฑ

3. ๋งค์ผ ์‚ฌ์šฉ

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

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

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

์ด๋Ÿฌํ•œ ๊ธฐ์‚ฌ๋Š” ์ผ์ƒ์ ์ธ ์‚ฌ์šฉ์— ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๐Ÿ™‚

๋„๊ตฌ๋ฅผ ์•Œ์•„๊ฐ€๋Š” ๋‹จ๊ณ„์—์„œ๋„ ์ฒซ ๋ฒˆ์งธ ์ถœ์‹œ ์ค‘ ๋งŽ์€ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ถˆํ–‰ํ•˜๊ฒŒ๋„ ์ •์  ๋ถ„์„๊ธฐ๋Š” ์™„๋ฒฝํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋•Œ๋•Œ๋กœ ๊ฑฐ์ง“ ๊ธ์ •์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋ฅผ ์–ต์ œํ•˜๋Š” ๊ฒƒ์€ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Visual Studio์šฉ PVS-Studio ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ๋Š” ๋ฒ„ํŠผ ํ•˜๋‚˜๋งŒ ํด๋ฆญํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

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

ํ†ตํ•ฉ ํ›„

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

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

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

์ •์  ๋ถ„์„ - ๋„์ž…๋ถ€ํ„ฐ ํ†ตํ•ฉ๊นŒ์ง€

์ด ๊ธฐ์‚ฌ๋ฅผ ์˜์–ด๊ถŒ ์ฒญ์ค‘๊ณผ ๊ณต์œ ํ•˜๋ ค๋ฉด ๋ฒˆ์—ญ ๋งํฌ์ธ Maxim Zvyagintsev๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ์ •์  ๋ถ„์„: ์‹œ์ž‘๋ถ€ํ„ฐ ํ†ตํ•ฉ๊นŒ์ง€.

์ถœ์ฒ˜ : habr.com

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